@zimezone/z-command 1.1.1 → 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. package/README.md +13 -1
  2. package/dist/cli.js +1 -1
  3. package/dist/commands/init.d.ts.map +1 -1
  4. package/dist/commands/init.js +42 -10
  5. package/dist/commands/init.js.map +1 -1
  6. package/dist/platforms.d.ts.map +1 -1
  7. package/dist/platforms.js +11 -1
  8. package/dist/platforms.js.map +1 -1
  9. package/dist/types.d.ts +2 -0
  10. package/dist/types.d.ts.map +1 -1
  11. package/package.json +8 -3
  12. package/templates.zip +0 -0
  13. package/templates/agents/accessibility-expert.agent.md +0 -56
  14. package/templates/agents/ai-engineer.agent.md +0 -61
  15. package/templates/agents/angular-architect.agent.md +0 -49
  16. package/templates/agents/api-designer.agent.md +0 -40
  17. package/templates/agents/api-documenter.agent.md +0 -161
  18. package/templates/agents/architect-review.agent.md +0 -146
  19. package/templates/agents/arm-cortex-expert.agent.md +0 -288
  20. package/templates/agents/azure-infra-engineer.agent.md +0 -57
  21. package/templates/agents/backend-architect.agent.md +0 -309
  22. package/templates/agents/backend-developer.agent.md +0 -61
  23. package/templates/agents/backend-security-coder.agent.md +0 -152
  24. package/templates/agents/bash-pro.agent.md +0 -285
  25. package/templates/agents/blockchain-developer.agent.md +0 -57
  26. package/templates/agents/build-engineer.agent.md +0 -56
  27. package/templates/agents/business-analyst.agent.md +0 -47
  28. package/templates/agents/c-pro.agent.md +0 -35
  29. package/templates/agents/c4-code.agent.md +0 -320
  30. package/templates/agents/c4-component.agent.md +0 -227
  31. package/templates/agents/c4-container.agent.md +0 -248
  32. package/templates/agents/c4-context.agent.md +0 -235
  33. package/templates/agents/cli-developer.agent.md +0 -57
  34. package/templates/agents/cloud-architect.agent.md +0 -56
  35. package/templates/agents/code-architect.agent.md +0 -63
  36. package/templates/agents/code-reviewer.agent.md +0 -49
  37. package/templates/agents/competitive-analyst.agent.md +0 -48
  38. package/templates/agents/conductor-validator.agent.md +0 -245
  39. package/templates/agents/context-manager.agent.md +0 -55
  40. package/templates/agents/cpp-pro.agent.md +0 -59
  41. package/templates/agents/csharp-developer.agent.md +0 -57
  42. package/templates/agents/csharp-pro.agent.md +0 -38
  43. package/templates/agents/customer-support.agent.md +0 -148
  44. package/templates/agents/data-engineer.agent.md +0 -55
  45. package/templates/agents/data-researcher.agent.md +0 -55
  46. package/templates/agents/data-scientist.agent.md +0 -56
  47. package/templates/agents/database-admin.agent.md +0 -142
  48. package/templates/agents/database-administrator.agent.md +0 -50
  49. package/templates/agents/database-architect.agent.md +0 -238
  50. package/templates/agents/database-optimizer.agent.md +0 -144
  51. package/templates/agents/debugger.agent.md +0 -30
  52. package/templates/agents/deployment-engineer.agent.md +0 -0
  53. package/templates/agents/devops-engineer.agent.md +0 -59
  54. package/templates/agents/devops-troubleshooter.agent.md +0 -138
  55. package/templates/agents/django-developer.agent.md +0 -50
  56. package/templates/agents/django-pro.agent.md +0 -159
  57. package/templates/agents/docs-architect.agent.md +0 -77
  58. package/templates/agents/documentation-engineer.agent.md +0 -57
  59. package/templates/agents/dotnet-architect.agent.md +0 -175
  60. package/templates/agents/dx-optimizer.agent.md +0 -63
  61. package/templates/agents/electron-pro.agent.md +0 -56
  62. package/templates/agents/elixir-pro.agent.md +0 -38
  63. package/templates/agents/embedded-systems.agent.md +0 -55
  64. package/templates/agents/error-detective.agent.md +0 -32
  65. package/templates/agents/event-sourcing-architect.agent.md +0 -42
  66. package/templates/agents/fastapi-pro.agent.md +0 -171
  67. package/templates/agents/fintech-engineer.agent.md +0 -57
  68. package/templates/agents/firmware-analyst.agent.md +0 -330
  69. package/templates/agents/flutter-expert.agent.md +0 -50
  70. package/templates/agents/frontend-developer.agent.md +0 -59
  71. package/templates/agents/frontend-security-coder.agent.md +0 -149
  72. package/templates/agents/fullstack-developer.agent.md +0 -46
  73. package/templates/agents/git-workflow-manager.agent.md +0 -57
  74. package/templates/agents/golang-pro.agent.md +0 -50
  75. package/templates/agents/graphql-architect.agent.md +0 -48
  76. package/templates/agents/haskell-pro.agent.md +0 -37
  77. package/templates/agents/hr-pro.agent.md +0 -105
  78. package/templates/agents/incident-responder.agent.md +0 -190
  79. package/templates/agents/ios-developer.agent.md +0 -198
  80. package/templates/agents/iot-engineer.agent.md +0 -56
  81. package/templates/agents/java-architect.agent.md +0 -48
  82. package/templates/agents/java-pro.agent.md +0 -156
  83. package/templates/agents/javascript-pro.agent.md +0 -35
  84. package/templates/agents/julia-pro.agent.md +0 -187
  85. package/templates/agents/kotlin-specialist.agent.md +0 -50
  86. package/templates/agents/laravel-specialist.agent.md +0 -50
  87. package/templates/agents/legacy-modernizer.agent.md +0 -56
  88. package/templates/agents/legal-advisor.agent.md +0 -49
  89. package/templates/agents/llm-architect.agent.md +0 -58
  90. package/templates/agents/malware-analyst.agent.md +0 -272
  91. package/templates/agents/mcp-developer.agent.md +0 -54
  92. package/templates/agents/mermaid-expert.agent.md +0 -39
  93. package/templates/agents/microservices-architect.agent.md +0 -47
  94. package/templates/agents/minecraft-bukkit-pro.agent.md +0 -104
  95. package/templates/agents/ml-engineer.agent.md +0 -56
  96. package/templates/agents/mlops-engineer.agent.md +0 -56
  97. package/templates/agents/mobile-developer.agent.md +0 -45
  98. package/templates/agents/mobile-security-coder.agent.md +0 -163
  99. package/templates/agents/monorepo-architect.agent.md +0 -44
  100. package/templates/agents/multi-agent-coordinator.agent.md +0 -55
  101. package/templates/agents/network-engineer.agent.md +0 -57
  102. package/templates/agents/nextjs-developer.agent.md +0 -48
  103. package/templates/agents/nlp-engineer.agent.md +0 -58
  104. package/templates/agents/observability-engineer.agent.md +0 -228
  105. package/templates/agents/payment-integration.agent.md +0 -56
  106. package/templates/agents/performance-engineer.agent.md +0 -167
  107. package/templates/agents/performance-optimizer.agent.md +0 -57
  108. package/templates/agents/php-pro.agent.md +0 -43
  109. package/templates/agents/platform-engineer.agent.md +0 -57
  110. package/templates/agents/posix-shell-pro.agent.md +0 -284
  111. package/templates/agents/postgres-pro.agent.md +0 -58
  112. package/templates/agents/product-manager.agent.md +0 -55
  113. package/templates/agents/project-manager.agent.md +0 -57
  114. package/templates/agents/prompt-engineer.agent.md +0 -58
  115. package/templates/agents/python-pro.agent.md +0 -48
  116. package/templates/agents/quant-analyst.agent.md +0 -32
  117. package/templates/agents/rails-expert.agent.md +0 -50
  118. package/templates/agents/react-specialist.agent.md +0 -49
  119. package/templates/agents/refactoring-specialist.agent.md +0 -56
  120. package/templates/agents/reference-builder.agent.md +0 -167
  121. package/templates/agents/research-analyst.agent.md +0 -63
  122. package/templates/agents/reverse-engineer.agent.md +0 -202
  123. package/templates/agents/risk-manager.agent.md +0 -41
  124. package/templates/agents/ruby-pro.agent.md +0 -35
  125. package/templates/agents/rust-pro.agent.md +0 -156
  126. package/templates/agents/sales-automator.agent.md +0 -35
  127. package/templates/agents/scala-pro.agent.md +0 -60
  128. package/templates/agents/scrum-master.agent.md +0 -54
  129. package/templates/agents/search-specialist.agent.md +0 -59
  130. package/templates/agents/security-analyst.agent.md +0 -57
  131. package/templates/agents/security-auditor.agent.md +0 -138
  132. package/templates/agents/security-engineer.agent.md +0 -57
  133. package/templates/agents/seo-authority-builder.agent.md +0 -116
  134. package/templates/agents/seo-cannibalization-detector.agent.md +0 -103
  135. package/templates/agents/seo-content-auditor.agent.md +0 -63
  136. package/templates/agents/seo-content-planner.agent.md +0 -88
  137. package/templates/agents/seo-content-refresher.agent.md +0 -98
  138. package/templates/agents/seo-content-writer.agent.md +0 -76
  139. package/templates/agents/seo-keyword-strategist.agent.md +0 -75
  140. package/templates/agents/seo-meta-optimizer.agent.md +0 -72
  141. package/templates/agents/seo-snippet-hunter.agent.md +0 -94
  142. package/templates/agents/seo-specialist.agent.md +0 -57
  143. package/templates/agents/seo-structure-architect.agent.md +0 -88
  144. package/templates/agents/service-mesh-expert.agent.md +0 -41
  145. package/templates/agents/sql-pro.agent.md +0 -146
  146. package/templates/agents/sre-engineer.agent.md +0 -58
  147. package/templates/agents/swift-expert.agent.md +0 -49
  148. package/templates/agents/task-distributor.agent.md +0 -47
  149. package/templates/agents/tdd-orchestrator.agent.md +0 -183
  150. package/templates/agents/technical-writer.agent.md +0 -48
  151. package/templates/agents/temporal-python-pro.agent.md +0 -349
  152. package/templates/agents/terraform-engineer.agent.md +0 -57
  153. package/templates/agents/terraform-specialist.agent.md +0 -137
  154. package/templates/agents/test-automator.agent.md +0 -203
  155. package/templates/agents/test-engineer.agent.md +0 -55
  156. package/templates/agents/threat-modeling-expert.agent.md +0 -44
  157. package/templates/agents/trend-analyst.agent.md +0 -47
  158. package/templates/agents/tutorial-engineer.agent.md +0 -118
  159. package/templates/agents/typescript-pro.agent.md +0 -48
  160. package/templates/agents/ui-designer.agent.md +0 -48
  161. package/templates/agents/ui-ux-designer.agent.md +0 -188
  162. package/templates/agents/ui-visual-validator.agent.md +0 -192
  163. package/templates/agents/ux-researcher.agent.md +0 -48
  164. package/templates/agents/vector-database-engineer.agent.md +0 -43
  165. package/templates/agents/vue-expert.agent.md +0 -48
  166. package/templates/agents/websocket-engineer.agent.md +0 -49
  167. package/templates/agents/workflow-orchestrator.agent.md +0 -48
  168. package/templates/skills/angular-migration/SKILL.md +0 -410
  169. package/templates/skills/api-design-principles/SKILL.md +0 -528
  170. package/templates/skills/api-design-principles/assets/api-design-checklist.md +0 -155
  171. package/templates/skills/api-design-principles/assets/rest-api-template.py +0 -182
  172. package/templates/skills/api-design-principles/references/graphql-schema-design.md +0 -583
  173. package/templates/skills/api-design-principles/references/rest-best-practices.md +0 -408
  174. package/templates/skills/architecture-decision-records/SKILL.md +0 -428
  175. package/templates/skills/architecture-patterns/SKILL.md +0 -494
  176. package/templates/skills/async-python-patterns/SKILL.md +0 -694
  177. package/templates/skills/auth-implementation-patterns/SKILL.md +0 -634
  178. package/templates/skills/changelog-automation/SKILL.md +0 -552
  179. package/templates/skills/code-review/SKILL.md +0 -62
  180. package/templates/skills/code-review-excellence/SKILL.md +0 -520
  181. package/templates/skills/competitive-landscape/SKILL.md +0 -479
  182. package/templates/skills/context-driven-development/SKILL.md +0 -385
  183. package/templates/skills/cost-optimization/SKILL.md +0 -274
  184. package/templates/skills/cqrs-implementation/SKILL.md +0 -554
  185. package/templates/skills/data-quality-frameworks/SKILL.md +0 -587
  186. package/templates/skills/data-storytelling/SKILL.md +0 -453
  187. package/templates/skills/database-migration/SKILL.md +0 -424
  188. package/templates/skills/dbt-transformation-patterns/SKILL.md +0 -561
  189. package/templates/skills/debugging-strategies/SKILL.md +0 -527
  190. package/templates/skills/defi-protocol-templates/SKILL.md +0 -454
  191. package/templates/skills/dependency-upgrade/SKILL.md +0 -409
  192. package/templates/skills/deployment-pipeline-design/SKILL.md +0 -359
  193. package/templates/skills/distributed-tracing/SKILL.md +0 -438
  194. package/templates/skills/dotnet-backend-patterns/SKILL.md +0 -815
  195. package/templates/skills/dotnet-backend-patterns/assets/repository-template.cs +0 -523
  196. package/templates/skills/dotnet-backend-patterns/assets/service-template.cs +0 -336
  197. package/templates/skills/dotnet-backend-patterns/references/dapper-patterns.md +0 -544
  198. package/templates/skills/dotnet-backend-patterns/references/ef-core-best-practices.md +0 -355
  199. package/templates/skills/e2e-testing-patterns/SKILL.md +0 -547
  200. package/templates/skills/employment-contract-templates/SKILL.md +0 -507
  201. package/templates/skills/error-handling-patterns/SKILL.md +0 -636
  202. package/templates/skills/event-store-design/SKILL.md +0 -437
  203. package/templates/skills/fastapi-templates/SKILL.md +0 -567
  204. package/templates/skills/git-advanced-workflows/SKILL.md +0 -400
  205. package/templates/skills/github-actions-templates/SKILL.md +0 -333
  206. package/templates/skills/go-concurrency-patterns/SKILL.md +0 -655
  207. package/templates/skills/grafana-dashboards/SKILL.md +0 -369
  208. package/templates/skills/helm-chart-scaffolding/SKILL.md +0 -544
  209. package/templates/skills/helm-chart-scaffolding/assets/Chart.yaml.template +0 -42
  210. package/templates/skills/helm-chart-scaffolding/assets/values.yaml.template +0 -185
  211. package/templates/skills/helm-chart-scaffolding/references/chart-structure.md +0 -500
  212. package/templates/skills/helm-chart-scaffolding/scripts/validate-chart.sh +0 -244
  213. package/templates/skills/javascript-testing-patterns/SKILL.md +0 -1025
  214. package/templates/skills/langchain-architecture/SKILL.md +0 -338
  215. package/templates/skills/llm-evaluation/SKILL.md +0 -471
  216. package/templates/skills/microservices-patterns/SKILL.md +0 -595
  217. package/templates/skills/modern-javascript-patterns/SKILL.md +0 -911
  218. package/templates/skills/monorepo-management/SKILL.md +0 -622
  219. package/templates/skills/nextjs-app-router-patterns/SKILL.md +0 -544
  220. package/templates/skills/nodejs-backend-patterns/SKILL.md +0 -1020
  221. package/templates/skills/nx-workspace-patterns/SKILL.md +0 -452
  222. package/templates/skills/openapi-spec-generation/SKILL.md +0 -1028
  223. package/templates/skills/paypal-integration/SKILL.md +0 -467
  224. package/templates/skills/pci-compliance/SKILL.md +0 -466
  225. package/templates/skills/postgresql/SKILL.md +0 -204
  226. package/templates/skills/projection-patterns/SKILL.md +0 -490
  227. package/templates/skills/prometheus-configuration/SKILL.md +0 -392
  228. package/templates/skills/prompt-engineering-patterns/SKILL.md +0 -201
  229. package/templates/skills/prompt-engineering-patterns/assets/few-shot-examples.json +0 -106
  230. package/templates/skills/prompt-engineering-patterns/assets/prompt-template-library.md +0 -246
  231. package/templates/skills/prompt-engineering-patterns/references/chain-of-thought.md +0 -399
  232. package/templates/skills/prompt-engineering-patterns/references/few-shot-learning.md +0 -369
  233. package/templates/skills/prompt-engineering-patterns/references/prompt-optimization.md +0 -414
  234. package/templates/skills/prompt-engineering-patterns/references/prompt-templates.md +0 -470
  235. package/templates/skills/prompt-engineering-patterns/references/system-prompts.md +0 -189
  236. package/templates/skills/prompt-engineering-patterns/scripts/optimize-prompt.py +0 -279
  237. package/templates/skills/python-packaging/SKILL.md +0 -870
  238. package/templates/skills/python-performance-optimization/SKILL.md +0 -869
  239. package/templates/skills/python-testing-patterns/SKILL.md +0 -907
  240. package/templates/skills/rag-implementation/SKILL.md +0 -403
  241. package/templates/skills/react-modernization/SKILL.md +0 -513
  242. package/templates/skills/react-native-architecture/SKILL.md +0 -671
  243. package/templates/skills/react-state-management/SKILL.md +0 -429
  244. package/templates/skills/risk-metrics-calculation/SKILL.md +0 -555
  245. package/templates/skills/rust-async-patterns/SKILL.md +0 -517
  246. package/templates/skills/secrets-management/SKILL.md +0 -346
  247. package/templates/skills/security-requirement-extraction/SKILL.md +0 -677
  248. package/templates/skills/security-review/SKILL.md +0 -78
  249. package/templates/skills/shellcheck-configuration/SKILL.md +0 -454
  250. package/templates/skills/similarity-search-patterns/SKILL.md +0 -558
  251. package/templates/skills/slo-implementation/SKILL.md +0 -329
  252. package/templates/skills/sql-optimization-patterns/SKILL.md +0 -493
  253. package/templates/skills/stripe-integration/SKILL.md +0 -442
  254. package/templates/skills/systematic-debugging/SKILL.md +0 -57
  255. package/templates/skills/tailwind-design-system/SKILL.md +0 -666
  256. package/templates/skills/temporal-python-testing/SKILL.md +0 -158
  257. package/templates/skills/temporal-python-testing/resources/integration-testing.md +0 -455
  258. package/templates/skills/temporal-python-testing/resources/local-setup.md +0 -553
  259. package/templates/skills/temporal-python-testing/resources/replay-testing.md +0 -462
  260. package/templates/skills/temporal-python-testing/resources/unit-testing.md +0 -328
  261. package/templates/skills/terraform-module-library/SKILL.md +0 -249
  262. package/templates/skills/terraform-module-library/references/aws-modules.md +0 -63
  263. package/templates/skills/test-driven-development/SKILL.md +0 -46
  264. package/templates/skills/threat-mitigation-mapping/SKILL.md +0 -745
  265. package/templates/skills/track-management/SKILL.md +0 -593
  266. package/templates/skills/typescript-advanced-types/SKILL.md +0 -717
  267. package/templates/skills/ui-ux-pro-max/SKILL.md +0 -352
  268. package/templates/skills/ui-ux-pro-max/data/charts.csv +0 -26
  269. package/templates/skills/ui-ux-pro-max/data/colors.csv +0 -97
  270. package/templates/skills/ui-ux-pro-max/data/icons.csv +0 -101
  271. package/templates/skills/ui-ux-pro-max/data/landing.csv +0 -31
  272. package/templates/skills/ui-ux-pro-max/data/products.csv +0 -97
  273. package/templates/skills/ui-ux-pro-max/data/prompts.csv +0 -24
  274. package/templates/skills/ui-ux-pro-max/data/react-performance.csv +0 -45
  275. package/templates/skills/ui-ux-pro-max/data/styles.csv +0 -59
  276. package/templates/skills/ui-ux-pro-max/data/typography.csv +0 -58
  277. package/templates/skills/ui-ux-pro-max/data/ui-reasoning.csv +0 -101
  278. package/templates/skills/ui-ux-pro-max/data/ux-guidelines.csv +0 -100
  279. package/templates/skills/ui-ux-pro-max/data/web-interface.csv +0 -31
  280. package/templates/skills/ui-ux-pro-max/scripts/core.py +0 -258
  281. package/templates/skills/ui-ux-pro-max/scripts/design_system.py +0 -547
  282. package/templates/skills/ui-ux-pro-max/scripts/search.py +0 -76
  283. package/templates/skills/uv-package-manager/SKILL.md +0 -831
  284. package/templates/skills/vector-index-tuning/SKILL.md +0 -521
  285. package/templates/skills/wcag-audit-patterns/SKILL.md +0 -555
  286. package/templates/skills/workflow-orchestration-patterns/SKILL.md +0 -316
  287. package/templates/skills/workflow-patterns/SKILL.md +0 -623
  288. package/templates/skills/writing-plans/SKILL.md +0 -64
@@ -1,595 +0,0 @@
1
- ---
2
- name: microservices-patterns
3
- description: Design microservices architectures with service boundaries, event-driven communication, and resilience patterns. Use when building distributed systems, decomposing monoliths, or implementing microservices.
4
- ---
5
-
6
- # Microservices Patterns
7
-
8
- Master microservices architecture patterns including service boundaries, inter-service communication, data management, and resilience patterns for building distributed systems.
9
-
10
- ## When to Use This Skill
11
-
12
- - Decomposing monoliths into microservices
13
- - Designing service boundaries and contracts
14
- - Implementing inter-service communication
15
- - Managing distributed data and transactions
16
- - Building resilient distributed systems
17
- - Implementing service discovery and load balancing
18
- - Designing event-driven architectures
19
-
20
- ## Core Concepts
21
-
22
- ### 1. Service Decomposition Strategies
23
-
24
- **By Business Capability**
25
-
26
- - Organize services around business functions
27
- - Each service owns its domain
28
- - Example: OrderService, PaymentService, InventoryService
29
-
30
- **By Subdomain (DDD)**
31
-
32
- - Core domain, supporting subdomains
33
- - Bounded contexts map to services
34
- - Clear ownership and responsibility
35
-
36
- **Strangler Fig Pattern**
37
-
38
- - Gradually extract from monolith
39
- - New functionality as microservices
40
- - Proxy routes to old/new systems
41
-
42
- ### 2. Communication Patterns
43
-
44
- **Synchronous (Request/Response)**
45
-
46
- - REST APIs
47
- - gRPC
48
- - GraphQL
49
-
50
- **Asynchronous (Events/Messages)**
51
-
52
- - Event streaming (Kafka)
53
- - Message queues (RabbitMQ, SQS)
54
- - Pub/Sub patterns
55
-
56
- ### 3. Data Management
57
-
58
- **Database Per Service**
59
-
60
- - Each service owns its data
61
- - No shared databases
62
- - Loose coupling
63
-
64
- **Saga Pattern**
65
-
66
- - Distributed transactions
67
- - Compensating actions
68
- - Eventual consistency
69
-
70
- ### 4. Resilience Patterns
71
-
72
- **Circuit Breaker**
73
-
74
- - Fail fast on repeated errors
75
- - Prevent cascade failures
76
-
77
- **Retry with Backoff**
78
-
79
- - Transient fault handling
80
- - Exponential backoff
81
-
82
- **Bulkhead**
83
-
84
- - Isolate resources
85
- - Limit impact of failures
86
-
87
- ## Service Decomposition Patterns
88
-
89
- ### Pattern 1: By Business Capability
90
-
91
- ```python
92
- # E-commerce example
93
-
94
- # Order Service
95
- class OrderService:
96
- """Handles order lifecycle."""
97
-
98
- async def create_order(self, order_data: dict) -> Order:
99
- order = Order.create(order_data)
100
-
101
- # Publish event for other services
102
- await self.event_bus.publish(
103
- OrderCreatedEvent(
104
- order_id=order.id,
105
- customer_id=order.customer_id,
106
- items=order.items,
107
- total=order.total
108
- )
109
- )
110
-
111
- return order
112
-
113
- # Payment Service (separate service)
114
- class PaymentService:
115
- """Handles payment processing."""
116
-
117
- async def process_payment(self, payment_request: PaymentRequest) -> PaymentResult:
118
- # Process payment
119
- result = await self.payment_gateway.charge(
120
- amount=payment_request.amount,
121
- customer=payment_request.customer_id
122
- )
123
-
124
- if result.success:
125
- await self.event_bus.publish(
126
- PaymentCompletedEvent(
127
- order_id=payment_request.order_id,
128
- transaction_id=result.transaction_id
129
- )
130
- )
131
-
132
- return result
133
-
134
- # Inventory Service (separate service)
135
- class InventoryService:
136
- """Handles inventory management."""
137
-
138
- async def reserve_items(self, order_id: str, items: List[OrderItem]) -> ReservationResult:
139
- # Check availability
140
- for item in items:
141
- available = await self.inventory_repo.get_available(item.product_id)
142
- if available < item.quantity:
143
- return ReservationResult(
144
- success=False,
145
- error=f"Insufficient inventory for {item.product_id}"
146
- )
147
-
148
- # Reserve items
149
- reservation = await self.create_reservation(order_id, items)
150
-
151
- await self.event_bus.publish(
152
- InventoryReservedEvent(
153
- order_id=order_id,
154
- reservation_id=reservation.id
155
- )
156
- )
157
-
158
- return ReservationResult(success=True, reservation=reservation)
159
- ```
160
-
161
- ### Pattern 2: API Gateway
162
-
163
- ```python
164
- from fastapi import FastAPI, HTTPException, Depends
165
- import httpx
166
- from circuitbreaker import circuit
167
-
168
- app = FastAPI()
169
-
170
- class APIGateway:
171
- """Central entry point for all client requests."""
172
-
173
- def __init__(self):
174
- self.order_service_url = "http://order-service:8000"
175
- self.payment_service_url = "http://payment-service:8001"
176
- self.inventory_service_url = "http://inventory-service:8002"
177
- self.http_client = httpx.AsyncClient(timeout=5.0)
178
-
179
- @circuit(failure_threshold=5, recovery_timeout=30)
180
- async def call_order_service(self, path: str, method: str = "GET", **kwargs):
181
- """Call order service with circuit breaker."""
182
- response = await self.http_client.request(
183
- method,
184
- f"{self.order_service_url}{path}",
185
- **kwargs
186
- )
187
- response.raise_for_status()
188
- return response.json()
189
-
190
- async def create_order_aggregate(self, order_id: str) -> dict:
191
- """Aggregate data from multiple services."""
192
- # Parallel requests
193
- order, payment, inventory = await asyncio.gather(
194
- self.call_order_service(f"/orders/{order_id}"),
195
- self.call_payment_service(f"/payments/order/{order_id}"),
196
- self.call_inventory_service(f"/reservations/order/{order_id}"),
197
- return_exceptions=True
198
- )
199
-
200
- # Handle partial failures
201
- result = {"order": order}
202
- if not isinstance(payment, Exception):
203
- result["payment"] = payment
204
- if not isinstance(inventory, Exception):
205
- result["inventory"] = inventory
206
-
207
- return result
208
-
209
- @app.post("/api/orders")
210
- async def create_order(
211
- order_data: dict,
212
- gateway: APIGateway = Depends()
213
- ):
214
- """API Gateway endpoint."""
215
- try:
216
- # Route to order service
217
- order = await gateway.call_order_service(
218
- "/orders",
219
- method="POST",
220
- json=order_data
221
- )
222
- return {"order": order}
223
- except httpx.HTTPError as e:
224
- raise HTTPException(status_code=503, detail="Order service unavailable")
225
- ```
226
-
227
- ## Communication Patterns
228
-
229
- ### Pattern 1: Synchronous REST Communication
230
-
231
- ```python
232
- # Service A calls Service B
233
- import httpx
234
- from tenacity import retry, stop_after_attempt, wait_exponential
235
-
236
- class ServiceClient:
237
- """HTTP client with retries and timeout."""
238
-
239
- def __init__(self, base_url: str):
240
- self.base_url = base_url
241
- self.client = httpx.AsyncClient(
242
- timeout=httpx.Timeout(5.0, connect=2.0),
243
- limits=httpx.Limits(max_keepalive_connections=20)
244
- )
245
-
246
- @retry(
247
- stop=stop_after_attempt(3),
248
- wait=wait_exponential(multiplier=1, min=2, max=10)
249
- )
250
- async def get(self, path: str, **kwargs):
251
- """GET with automatic retries."""
252
- response = await self.client.get(f"{self.base_url}{path}", **kwargs)
253
- response.raise_for_status()
254
- return response.json()
255
-
256
- async def post(self, path: str, **kwargs):
257
- """POST request."""
258
- response = await self.client.post(f"{self.base_url}{path}", **kwargs)
259
- response.raise_for_status()
260
- return response.json()
261
-
262
- # Usage
263
- payment_client = ServiceClient("http://payment-service:8001")
264
- result = await payment_client.post("/payments", json=payment_data)
265
- ```
266
-
267
- ### Pattern 2: Asynchronous Event-Driven
268
-
269
- ```python
270
- # Event-driven communication with Kafka
271
- from aiokafka import AIOKafkaProducer, AIOKafkaConsumer
272
- import json
273
- from dataclasses import dataclass, asdict
274
- from datetime import datetime
275
-
276
- @dataclass
277
- class DomainEvent:
278
- event_id: str
279
- event_type: str
280
- aggregate_id: str
281
- occurred_at: datetime
282
- data: dict
283
-
284
- class EventBus:
285
- """Event publishing and subscription."""
286
-
287
- def __init__(self, bootstrap_servers: List[str]):
288
- self.bootstrap_servers = bootstrap_servers
289
- self.producer = None
290
-
291
- async def start(self):
292
- self.producer = AIOKafkaProducer(
293
- bootstrap_servers=self.bootstrap_servers,
294
- value_serializer=lambda v: json.dumps(v).encode()
295
- )
296
- await self.producer.start()
297
-
298
- async def publish(self, event: DomainEvent):
299
- """Publish event to Kafka topic."""
300
- topic = event.event_type
301
- await self.producer.send_and_wait(
302
- topic,
303
- value=asdict(event),
304
- key=event.aggregate_id.encode()
305
- )
306
-
307
- async def subscribe(self, topic: str, handler: callable):
308
- """Subscribe to events."""
309
- consumer = AIOKafkaConsumer(
310
- topic,
311
- bootstrap_servers=self.bootstrap_servers,
312
- value_deserializer=lambda v: json.loads(v.decode()),
313
- group_id="my-service"
314
- )
315
- await consumer.start()
316
-
317
- try:
318
- async for message in consumer:
319
- event_data = message.value
320
- await handler(event_data)
321
- finally:
322
- await consumer.stop()
323
-
324
- # Order Service publishes event
325
- async def create_order(order_data: dict):
326
- order = await save_order(order_data)
327
-
328
- event = DomainEvent(
329
- event_id=str(uuid.uuid4()),
330
- event_type="OrderCreated",
331
- aggregate_id=order.id,
332
- occurred_at=datetime.now(),
333
- data={
334
- "order_id": order.id,
335
- "customer_id": order.customer_id,
336
- "total": order.total
337
- }
338
- )
339
-
340
- await event_bus.publish(event)
341
-
342
- # Inventory Service listens for OrderCreated
343
- async def handle_order_created(event_data: dict):
344
- """React to order creation."""
345
- order_id = event_data["data"]["order_id"]
346
- items = event_data["data"]["items"]
347
-
348
- # Reserve inventory
349
- await reserve_inventory(order_id, items)
350
- ```
351
-
352
- ### Pattern 3: Saga Pattern (Distributed Transactions)
353
-
354
- ```python
355
- # Saga orchestration for order fulfillment
356
- from enum import Enum
357
- from typing import List, Callable
358
-
359
- class SagaStep:
360
- """Single step in saga."""
361
-
362
- def __init__(
363
- self,
364
- name: str,
365
- action: Callable,
366
- compensation: Callable
367
- ):
368
- self.name = name
369
- self.action = action
370
- self.compensation = compensation
371
-
372
- class SagaStatus(Enum):
373
- PENDING = "pending"
374
- COMPLETED = "completed"
375
- COMPENSATING = "compensating"
376
- FAILED = "failed"
377
-
378
- class OrderFulfillmentSaga:
379
- """Orchestrated saga for order fulfillment."""
380
-
381
- def __init__(self):
382
- self.steps: List[SagaStep] = [
383
- SagaStep(
384
- "create_order",
385
- action=self.create_order,
386
- compensation=self.cancel_order
387
- ),
388
- SagaStep(
389
- "reserve_inventory",
390
- action=self.reserve_inventory,
391
- compensation=self.release_inventory
392
- ),
393
- SagaStep(
394
- "process_payment",
395
- action=self.process_payment,
396
- compensation=self.refund_payment
397
- ),
398
- SagaStep(
399
- "confirm_order",
400
- action=self.confirm_order,
401
- compensation=self.cancel_order_confirmation
402
- )
403
- ]
404
-
405
- async def execute(self, order_data: dict) -> SagaResult:
406
- """Execute saga steps."""
407
- completed_steps = []
408
- context = {"order_data": order_data}
409
-
410
- try:
411
- for step in self.steps:
412
- # Execute step
413
- result = await step.action(context)
414
- if not result.success:
415
- # Compensate
416
- await self.compensate(completed_steps, context)
417
- return SagaResult(
418
- status=SagaStatus.FAILED,
419
- error=result.error
420
- )
421
-
422
- completed_steps.append(step)
423
- context.update(result.data)
424
-
425
- return SagaResult(status=SagaStatus.COMPLETED, data=context)
426
-
427
- except Exception as e:
428
- # Compensate on error
429
- await self.compensate(completed_steps, context)
430
- return SagaResult(status=SagaStatus.FAILED, error=str(e))
431
-
432
- async def compensate(self, completed_steps: List[SagaStep], context: dict):
433
- """Execute compensating actions in reverse order."""
434
- for step in reversed(completed_steps):
435
- try:
436
- await step.compensation(context)
437
- except Exception as e:
438
- # Log compensation failure
439
- print(f"Compensation failed for {step.name}: {e}")
440
-
441
- # Step implementations
442
- async def create_order(self, context: dict) -> StepResult:
443
- order = await order_service.create(context["order_data"])
444
- return StepResult(success=True, data={"order_id": order.id})
445
-
446
- async def cancel_order(self, context: dict):
447
- await order_service.cancel(context["order_id"])
448
-
449
- async def reserve_inventory(self, context: dict) -> StepResult:
450
- result = await inventory_service.reserve(
451
- context["order_id"],
452
- context["order_data"]["items"]
453
- )
454
- return StepResult(
455
- success=result.success,
456
- data={"reservation_id": result.reservation_id}
457
- )
458
-
459
- async def release_inventory(self, context: dict):
460
- await inventory_service.release(context["reservation_id"])
461
-
462
- async def process_payment(self, context: dict) -> StepResult:
463
- result = await payment_service.charge(
464
- context["order_id"],
465
- context["order_data"]["total"]
466
- )
467
- return StepResult(
468
- success=result.success,
469
- data={"transaction_id": result.transaction_id},
470
- error=result.error
471
- )
472
-
473
- async def refund_payment(self, context: dict):
474
- await payment_service.refund(context["transaction_id"])
475
- ```
476
-
477
- ## Resilience Patterns
478
-
479
- ### Circuit Breaker Pattern
480
-
481
- ```python
482
- from enum import Enum
483
- from datetime import datetime, timedelta
484
- from typing import Callable, Any
485
-
486
- class CircuitState(Enum):
487
- CLOSED = "closed" # Normal operation
488
- OPEN = "open" # Failing, reject requests
489
- HALF_OPEN = "half_open" # Testing if recovered
490
-
491
- class CircuitBreaker:
492
- """Circuit breaker for service calls."""
493
-
494
- def __init__(
495
- self,
496
- failure_threshold: int = 5,
497
- recovery_timeout: int = 30,
498
- success_threshold: int = 2
499
- ):
500
- self.failure_threshold = failure_threshold
501
- self.recovery_timeout = recovery_timeout
502
- self.success_threshold = success_threshold
503
-
504
- self.failure_count = 0
505
- self.success_count = 0
506
- self.state = CircuitState.CLOSED
507
- self.opened_at = None
508
-
509
- async def call(self, func: Callable, *args, **kwargs) -> Any:
510
- """Execute function with circuit breaker."""
511
-
512
- if self.state == CircuitState.OPEN:
513
- if self._should_attempt_reset():
514
- self.state = CircuitState.HALF_OPEN
515
- else:
516
- raise CircuitBreakerOpenError("Circuit breaker is open")
517
-
518
- try:
519
- result = await func(*args, **kwargs)
520
- self._on_success()
521
- return result
522
-
523
- except Exception as e:
524
- self._on_failure()
525
- raise
526
-
527
- def _on_success(self):
528
- """Handle successful call."""
529
- self.failure_count = 0
530
-
531
- if self.state == CircuitState.HALF_OPEN:
532
- self.success_count += 1
533
- if self.success_count >= self.success_threshold:
534
- self.state = CircuitState.CLOSED
535
- self.success_count = 0
536
-
537
- def _on_failure(self):
538
- """Handle failed call."""
539
- self.failure_count += 1
540
-
541
- if self.failure_count >= self.failure_threshold:
542
- self.state = CircuitState.OPEN
543
- self.opened_at = datetime.now()
544
-
545
- if self.state == CircuitState.HALF_OPEN:
546
- self.state = CircuitState.OPEN
547
- self.opened_at = datetime.now()
548
-
549
- def _should_attempt_reset(self) -> bool:
550
- """Check if enough time passed to try again."""
551
- return (
552
- datetime.now() - self.opened_at
553
- > timedelta(seconds=self.recovery_timeout)
554
- )
555
-
556
- # Usage
557
- breaker = CircuitBreaker(failure_threshold=5, recovery_timeout=30)
558
-
559
- async def call_payment_service(payment_data: dict):
560
- return await breaker.call(
561
- payment_client.process_payment,
562
- payment_data
563
- )
564
- ```
565
-
566
- ## Resources
567
-
568
- - **references/service-decomposition-guide.md**: Breaking down monoliths
569
- - **references/communication-patterns.md**: Sync vs async patterns
570
- - **references/saga-implementation.md**: Distributed transactions
571
- - **assets/circuit-breaker.py**: Production circuit breaker
572
- - **assets/event-bus-template.py**: Kafka event bus implementation
573
- - **assets/api-gateway-template.py**: Complete API gateway
574
-
575
- ## Best Practices
576
-
577
- 1. **Service Boundaries**: Align with business capabilities
578
- 2. **Database Per Service**: No shared databases
579
- 3. **API Contracts**: Versioned, backward compatible
580
- 4. **Async When Possible**: Events over direct calls
581
- 5. **Circuit Breakers**: Fail fast on service failures
582
- 6. **Distributed Tracing**: Track requests across services
583
- 7. **Service Registry**: Dynamic service discovery
584
- 8. **Health Checks**: Liveness and readiness probes
585
-
586
- ## Common Pitfalls
587
-
588
- - **Distributed Monolith**: Tightly coupled services
589
- - **Chatty Services**: Too many inter-service calls
590
- - **Shared Databases**: Tight coupling through data
591
- - **No Circuit Breakers**: Cascade failures
592
- - **Synchronous Everything**: Tight coupling, poor resilience
593
- - **Premature Microservices**: Starting with microservices
594
- - **Ignoring Network Failures**: Assuming reliable network
595
- - **No Compensation Logic**: Can't undo failed transactions