@sylix/coworker 2.0.11 → 2.0.12
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.
- package/dist/commands/slash/config.d.ts.map +1 -1
- package/dist/commands/slash/config.js +22 -4
- package/dist/commands/slash/config.js.map +1 -1
- package/dist/core/CoWorkerAgent.d.ts.map +1 -1
- package/dist/core/CoWorkerAgent.js +6 -3
- package/dist/core/CoWorkerAgent.js.map +1 -1
- package/dist/skills/defaults/accessibility/screen-reader-testing.md +545 -0
- package/dist/skills/defaults/accessibility/wcag-audit-patterns.md +555 -0
- package/dist/skills/defaults/ai-ml/rag.md +276 -0
- package/dist/skills/defaults/backend-development/api-design-principles.md +528 -0
- package/dist/skills/defaults/backend-development/api-design.md +285 -0
- package/dist/skills/defaults/backend-development/architecture-patterns.md +494 -0
- package/dist/skills/defaults/backend-development/async-python.md +237 -0
- package/dist/skills/defaults/backend-development/auth-implementation-patterns.md +638 -0
- package/dist/skills/defaults/backend-development/bazel-build-optimization.md +387 -0
- package/dist/skills/defaults/backend-development/billing-automation/SKILL.md +566 -0
- package/dist/skills/defaults/backend-development/code-review-excellence.md +538 -0
- package/dist/skills/defaults/backend-development/cqrs-implementation.md +554 -0
- package/dist/skills/defaults/backend-development/database-design.md +305 -0
- package/dist/skills/defaults/backend-development/debugging-strategies.md +536 -0
- package/dist/skills/defaults/backend-development/e2e-testing-patterns.md +544 -0
- package/dist/skills/defaults/backend-development/error-handling-patterns.md +641 -0
- package/dist/skills/defaults/backend-development/fastapi-templates.md +559 -0
- package/dist/skills/defaults/backend-development/fastapi.md +309 -0
- package/dist/skills/defaults/backend-development/git-advanced-workflows.md +405 -0
- package/dist/skills/defaults/backend-development/microservices-patterns.md +595 -0
- package/dist/skills/defaults/backend-development/microservices.md +284 -0
- package/dist/skills/defaults/backend-development/monorepo-management.md +623 -0
- package/dist/skills/defaults/backend-development/nodejs-backend-patterns.md +1048 -0
- package/dist/skills/defaults/backend-development/nx-workspace-patterns.md +457 -0
- package/dist/skills/defaults/backend-development/paypal-integration/SKILL.md +478 -0
- package/dist/skills/defaults/backend-development/pci-compliance/SKILL.md +480 -0
- package/dist/skills/defaults/backend-development/python-anti-patterns.md +349 -0
- package/dist/skills/defaults/backend-development/python-background-jobs.md +364 -0
- package/dist/skills/defaults/backend-development/python-code-style.md +360 -0
- package/dist/skills/defaults/backend-development/python-configuration.md +368 -0
- package/dist/skills/defaults/backend-development/python-design-patterns.md +296 -0
- package/dist/skills/defaults/backend-development/python-error-handling.md +323 -0
- package/dist/skills/defaults/backend-development/python-packaging.md +887 -0
- package/dist/skills/defaults/backend-development/python-performance-optimization.md +874 -0
- package/dist/skills/defaults/backend-development/python-project-structure.md +252 -0
- package/dist/skills/defaults/backend-development/python-resilience.md +376 -0
- package/dist/skills/defaults/backend-development/python-resource-management.md +421 -0
- package/dist/skills/defaults/backend-development/python-type-safety.md +428 -0
- package/dist/skills/defaults/backend-development/sql-optimization-patterns.md +509 -0
- package/dist/skills/defaults/backend-development/stripe-integration/SKILL.md +522 -0
- package/dist/skills/defaults/backend-development/turborepo-caching.md +376 -0
- package/dist/skills/defaults/blockchain/defi-protocol-templates.md +430 -0
- package/dist/skills/defaults/blockchain/nft-standards.md +364 -0
- package/dist/skills/defaults/blockchain/solidity-security.md +514 -0
- package/dist/skills/defaults/blockchain/web3-testing.md +360 -0
- package/dist/skills/defaults/business/competitive-landscape/SKILL.md +527 -0
- package/dist/skills/defaults/business/market-sizing-analysis/SKILL.md +451 -0
- package/dist/skills/defaults/business/startup-financial-modeling/SKILL.md +494 -0
- package/dist/skills/defaults/business/startup-metrics-framework/SKILL.md +564 -0
- package/dist/skills/defaults/business/team-composition-analysis.md +437 -0
- package/dist/skills/defaults/compliance/employment-contract-templates/SKILL.md +527 -0
- package/dist/skills/defaults/compliance/gdpr-data-handling/SKILL.md +630 -0
- package/dist/skills/defaults/data-engineering/airflow-dag-patterns.md +436 -0
- package/dist/skills/defaults/data-engineering/airflow.md +519 -0
- package/dist/skills/defaults/data-engineering/data-quality.md +583 -0
- package/dist/skills/defaults/data-engineering/dbt-transformation-patterns.md +482 -0
- package/dist/skills/defaults/data-engineering/dbt.md +556 -0
- package/dist/skills/defaults/data-engineering/ml-pipeline-workflow/SKILL.md +247 -0
- package/dist/skills/defaults/data-engineering/spark-optimization.md +348 -0
- package/dist/skills/defaults/data-engineering/spark.md +411 -0
- package/dist/skills/defaults/database/postgresql.md +202 -0
- package/dist/skills/defaults/debugging/systematic-debugging.md +249 -0
- package/dist/skills/defaults/devops/architecture-decision-records.md +448 -0
- package/dist/skills/defaults/devops/changelog-automation.md +580 -0
- package/dist/skills/defaults/devops/cicd.md +314 -0
- package/dist/skills/defaults/devops/cloud.md +263 -0
- package/dist/skills/defaults/devops/code-review-excellence.md +299 -0
- package/dist/skills/defaults/devops/cost-optimization.md +295 -0
- package/dist/skills/defaults/devops/deployment-pipeline-design.md +356 -0
- package/dist/skills/defaults/devops/docker.md +281 -0
- package/dist/skills/defaults/devops/git-workflows.md +205 -0
- package/dist/skills/defaults/devops/github-actions.md +311 -0
- package/dist/skills/defaults/devops/gitlab-ci-patterns.md +266 -0
- package/dist/skills/defaults/devops/hybrid-cloud-networking.md +241 -0
- package/dist/skills/defaults/devops/istio-traffic-management.md +327 -0
- package/dist/skills/defaults/devops/kubernetes.md +339 -0
- package/dist/skills/defaults/devops/linkerd-patterns.md +311 -0
- package/dist/skills/defaults/devops/multi-cloud-architecture.md +181 -0
- package/dist/skills/defaults/devops/observability.md +243 -0
- package/dist/skills/defaults/devops/openapi-spec-generation.md +1024 -0
- package/dist/skills/defaults/devops/postmortem-writing.md +396 -0
- package/dist/skills/defaults/devops/prometheus-configuration.md +265 -0
- package/dist/skills/defaults/devops/secrets-management.md +341 -0
- package/dist/skills/defaults/devops/service-mesh-observability.md +385 -0
- package/dist/skills/defaults/devops/terraform-module-library.md +244 -0
- package/dist/skills/defaults/finance/backtesting-frameworks/SKILL.md +663 -0
- package/dist/skills/defaults/finance/risk-metrics-calculation/SKILL.md +557 -0
- package/dist/skills/defaults/frontend/accessibility-compliance.md +420 -0
- package/dist/skills/defaults/frontend/design-system-patterns.md +337 -0
- package/dist/skills/defaults/frontend/interaction-design.md +327 -0
- package/dist/skills/defaults/frontend/javascript.md +311 -0
- package/dist/skills/defaults/frontend/modern-javascript-patterns.md +927 -0
- package/dist/skills/defaults/frontend/react-native-design.md +440 -0
- package/dist/skills/defaults/frontend/react.md +345 -0
- package/dist/skills/defaults/frontend/responsive-design.md +472 -0
- package/dist/skills/defaults/frontend/tailwind-design-system.md +337 -0
- package/dist/skills/defaults/frontend/typescript-advanced-types.md +724 -0
- package/dist/skills/defaults/frontend/typescript.md +334 -0
- package/dist/skills/defaults/frontend/visual-design-foundations.md +326 -0
- package/dist/skills/defaults/frontend/web-component-design.md +279 -0
- package/dist/skills/defaults/game-development/godot-gdscript-patterns.md +188 -0
- package/dist/skills/defaults/game-development/unity-ecs-patterns.md +594 -0
- package/dist/skills/defaults/kubernetes/gitops-workflow.md +285 -0
- package/dist/skills/defaults/kubernetes/gitops.md +280 -0
- package/dist/skills/defaults/kubernetes/helm-chart-scaffolding.md +553 -0
- package/dist/skills/defaults/kubernetes/helm.md +343 -0
- package/dist/skills/defaults/kubernetes/k8s-manifest-generator.md +501 -0
- package/dist/skills/defaults/kubernetes/k8s-security-policies.md +342 -0
- package/dist/skills/defaults/kubernetes/manifests.md +330 -0
- package/dist/skills/defaults/kubernetes/security.md +337 -0
- package/dist/skills/defaults/llm-application/embedding-strategies.md +608 -0
- package/dist/skills/defaults/llm-application/hybrid-search-implementation.md +570 -0
- package/dist/skills/defaults/llm-application/hybrid-search.md +570 -0
- package/dist/skills/defaults/llm-application/langchain-architecture.md +666 -0
- package/dist/skills/defaults/llm-application/langchain.md +259 -0
- package/dist/skills/defaults/llm-application/llm-evaluation.md +695 -0
- package/dist/skills/defaults/llm-application/prompt-engineering-patterns.md +449 -0
- package/dist/skills/defaults/llm-application/prompt-engineering.md +219 -0
- package/dist/skills/defaults/llm-application/rag-implementation.md +434 -0
- package/dist/skills/defaults/llm-application/similarity-search-patterns.md +560 -0
- package/dist/skills/defaults/llm-application/similarity-search.md +560 -0
- package/dist/skills/defaults/llm-application/vector-index-tuning.md +523 -0
- package/dist/skills/defaults/mobile/mobile-android-design.md +440 -0
- package/dist/skills/defaults/mobile/mobile-ios-design.md +266 -0
- package/dist/skills/defaults/monitoring/distributed-tracing.md +436 -0
- package/dist/skills/defaults/monitoring/grafana-dashboards.md +370 -0
- package/dist/skills/defaults/monitoring/prometheus-configuration.md +379 -0
- package/dist/skills/defaults/monitoring/slo-implementation.md +323 -0
- package/dist/skills/defaults/refactoring/code-refactoring.md +349 -0
- package/dist/skills/defaults/security/anti-reversing-techniques/SKILL.md +559 -0
- package/dist/skills/defaults/security/auditor.md +168 -0
- package/dist/skills/defaults/security/binary-analysis-patterns/SKILL.md +438 -0
- package/dist/skills/defaults/security/memory-forensics/SKILL.md +483 -0
- package/dist/skills/defaults/security/mtls-configuration.md +349 -0
- package/dist/skills/defaults/security/protocol-reverse-engineering/SKILL.md +520 -0
- package/dist/skills/defaults/security/sast-configuration.md +182 -0
- package/dist/skills/defaults/security/security.md +313 -0
- package/dist/skills/defaults/security/stride-analysis.md +273 -0
- package/dist/skills/defaults/security/threat-mitigation-mapping.md +290 -0
- package/dist/skills/defaults/systems/bash-defensive-patterns/SKILL.md +539 -0
- package/dist/skills/defaults/systems/bats-testing-patterns/SKILL.md +631 -0
- package/dist/skills/defaults/systems/go-concurrency-patterns.md +657 -0
- package/dist/skills/defaults/systems/memory-safety-patterns.md +605 -0
- package/dist/skills/defaults/systems/rust-async-patterns.md +519 -0
- package/dist/skills/defaults/systems/shellcheck-configuration/SKILL.md +456 -0
- package/dist/skills/defaults/team-collaboration/multi-reviewer-patterns.md +126 -0
- package/dist/skills/defaults/team-collaboration/parallel-feature-development.md +151 -0
- package/dist/skills/defaults/testing/javascript-testing-patterns.md +1021 -0
- package/dist/skills/defaults/testing/python-testing-patterns.md +351 -0
- package/dist/skills/defaults/testing/testing.md +332 -0
- package/dist/skills/defaults/workflows/context-driven-development.md +384 -0
- package/dist/skills/defaults/workflows/track-management.md +592 -0
- package/dist/skills/defaults/workflows/workflow-patterns.md +622 -0
- package/dist/skills/index.d.ts +11 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +129 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/utils/character.js +4 -4
- package/dist/utils/character.js.map +1 -1
- package/dist/utils/inputbar.d.ts.map +1 -1
- package/dist/utils/inputbar.js +7 -0
- package/dist/utils/inputbar.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: microservices
|
|
3
|
+
description: Design and implement microservices architectures with patterns for service decomposition, communication, and orchestration.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Microservices Architecture — CoWorker Edition
|
|
7
|
+
|
|
8
|
+
Build scalable, maintainable distributed systems using proven microservices patterns.
|
|
9
|
+
|
|
10
|
+
## When to Use This Skill
|
|
11
|
+
|
|
12
|
+
- Decomposing a monolith into services
|
|
13
|
+
- Designing new distributed systems
|
|
14
|
+
- Choosing communication patterns between services
|
|
15
|
+
- Implementing service discovery and orchestration
|
|
16
|
+
- Handling distributed transactions
|
|
17
|
+
|
|
18
|
+
## Core Principles
|
|
19
|
+
|
|
20
|
+
### 1. Service Decomposition
|
|
21
|
+
|
|
22
|
+
**When to split a service:**
|
|
23
|
+
- Different scaling requirements
|
|
24
|
+
- Distinct domain boundaries
|
|
25
|
+
- Independent deployment cycles
|
|
26
|
+
- Different technology needs
|
|
27
|
+
|
|
28
|
+
**How to decompose:**
|
|
29
|
+
- Start with business capabilities
|
|
30
|
+
- Identify bounded contexts (DDD)
|
|
31
|
+
- Define clear API contracts
|
|
32
|
+
- Extract incrementally
|
|
33
|
+
|
|
34
|
+
```python
|
|
35
|
+
# Bad: Too granular - chat system split into 20 services
|
|
36
|
+
# user-service, message-service, read-service, typing-service,
|
|
37
|
+
# presence-service, notification-service, etc.
|
|
38
|
+
|
|
39
|
+
# Good: Decompose by business capability
|
|
40
|
+
# user-service, conversation-service, notification-service
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 2. Communication Patterns
|
|
44
|
+
|
|
45
|
+
#### Synchronous (REST/gRPC)
|
|
46
|
+
|
|
47
|
+
```python
|
|
48
|
+
# FastAPI service
|
|
49
|
+
from fastapi import HTTPException
|
|
50
|
+
|
|
51
|
+
class OrderService:
|
|
52
|
+
def __init__(self, http_client):
|
|
53
|
+
self.http = http_client
|
|
54
|
+
|
|
55
|
+
async def get_order_with_user(self, order_id: str):
|
|
56
|
+
order = await self.get_order(order_id)
|
|
57
|
+
if not order:
|
|
58
|
+
raise HTTPException(404, "Order not found")
|
|
59
|
+
|
|
60
|
+
# Sync call to user service
|
|
61
|
+
user = await self.http.get(
|
|
62
|
+
f"http://user-service/api/users/{order.user_id}"
|
|
63
|
+
)
|
|
64
|
+
order.user = user
|
|
65
|
+
return order
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
#### Asynchronous (Message Queues)
|
|
69
|
+
|
|
70
|
+
```python
|
|
71
|
+
import aio_pika
|
|
72
|
+
|
|
73
|
+
class OrderService:
|
|
74
|
+
async def create_order(self, order_data: dict):
|
|
75
|
+
# Create order locally
|
|
76
|
+
order = await self.save_order(order_data)
|
|
77
|
+
|
|
78
|
+
# Publish event asynchronously
|
|
79
|
+
await self.channel.default_exchange.publish(
|
|
80
|
+
aio_pika.Message(
|
|
81
|
+
body=json.dumps({
|
|
82
|
+
"event": "order.created",
|
|
83
|
+
"order_id": order.id,
|
|
84
|
+
"user_id": order.user_id
|
|
85
|
+
}).encode()
|
|
86
|
+
),
|
|
87
|
+
routing_key="order.events"
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
return order
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### 3. Service Discovery
|
|
94
|
+
|
|
95
|
+
```yaml
|
|
96
|
+
# Kubernetes service (k8s)
|
|
97
|
+
apiVersion: v1
|
|
98
|
+
kind: Service
|
|
99
|
+
metadata:
|
|
100
|
+
name: user-service
|
|
101
|
+
spec:
|
|
102
|
+
selector:
|
|
103
|
+
app: user-service
|
|
104
|
+
ports:
|
|
105
|
+
- port: 80
|
|
106
|
+
targetPort: 8080
|
|
107
|
+
---
|
|
108
|
+
apiVersion: v1
|
|
109
|
+
kind: Endpoints
|
|
110
|
+
metadata:
|
|
111
|
+
name: user-service
|
|
112
|
+
subsets:
|
|
113
|
+
- addresses:
|
|
114
|
+
- ip: 10.1.0.5
|
|
115
|
+
ports:
|
|
116
|
+
- port: 8080
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### 4. Circuit Breaker Pattern
|
|
120
|
+
|
|
121
|
+
```python
|
|
122
|
+
from circuitbreaker import circuit
|
|
123
|
+
|
|
124
|
+
class UserServiceClient:
|
|
125
|
+
@circuit(failure_threshold=5, recovery_timeout=30)
|
|
126
|
+
async def get_user(self, user_id: str):
|
|
127
|
+
response = await self.http.get(
|
|
128
|
+
f"http://user-service/api/users/{user_id}",
|
|
129
|
+
timeout=5
|
|
130
|
+
)
|
|
131
|
+
if response.status == 503:
|
|
132
|
+
raise ServiceUnavailable()
|
|
133
|
+
return response.json()
|
|
134
|
+
|
|
135
|
+
# Fallback when circuit is open
|
|
136
|
+
async def get_user_safe(user_id: str):
|
|
137
|
+
try:
|
|
138
|
+
return await user_client.get_user(user_id)
|
|
139
|
+
except CircuitOpenError:
|
|
140
|
+
# Return cached data or default
|
|
141
|
+
return await cache.get(f"user:{user_id}")
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### 5. Distributed Tracing
|
|
145
|
+
|
|
146
|
+
```python
|
|
147
|
+
from opentelemetry import trace
|
|
148
|
+
|
|
149
|
+
tracer = trace.get_tracer(__name__)
|
|
150
|
+
|
|
151
|
+
class OrderService:
|
|
152
|
+
async def process_order(self, order_id: str):
|
|
153
|
+
with tracer.start_as_current_span("process_order") as span:
|
|
154
|
+
span.set_attribute("order.id", order_id)
|
|
155
|
+
|
|
156
|
+
# This span automatically includes parent context
|
|
157
|
+
user = await self.get_user(order_id)
|
|
158
|
+
|
|
159
|
+
with tracer.start_as_current_span("process_payment"):
|
|
160
|
+
await self.payment_service.charge(user, order_id)
|
|
161
|
+
|
|
162
|
+
return {"status": "processed"}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Service Mesh
|
|
166
|
+
|
|
167
|
+
### Istio Configuration
|
|
168
|
+
|
|
169
|
+
```yaml
|
|
170
|
+
apiVersion: networking.istio.io/v1beta1
|
|
171
|
+
kind: VirtualService
|
|
172
|
+
metadata:
|
|
173
|
+
name: order-service
|
|
174
|
+
spec:
|
|
175
|
+
hosts:
|
|
176
|
+
- order-service
|
|
177
|
+
http:
|
|
178
|
+
- match:
|
|
179
|
+
- headers:
|
|
180
|
+
x-canary:
|
|
181
|
+
exact: "true"
|
|
182
|
+
route:
|
|
183
|
+
- destination:
|
|
184
|
+
host: order-service
|
|
185
|
+
subset: v2
|
|
186
|
+
weight: 10
|
|
187
|
+
- route:
|
|
188
|
+
- destination:
|
|
189
|
+
host: order-service
|
|
190
|
+
subset: v1
|
|
191
|
+
weight: 90
|
|
192
|
+
---
|
|
193
|
+
apiVersion: networking.istio.io/v1beta1
|
|
194
|
+
kind: DestinationRule
|
|
195
|
+
metadata:
|
|
196
|
+
name: order-service
|
|
197
|
+
spec:
|
|
198
|
+
host: order-service
|
|
199
|
+
trafficPolicy:
|
|
200
|
+
connectionPool:
|
|
201
|
+
tcp:
|
|
202
|
+
maxConnections: 100
|
|
203
|
+
http:
|
|
204
|
+
h2UpgradePolicy: UPGRADE
|
|
205
|
+
http2MaxRequests: 1000
|
|
206
|
+
circuitBreaker:
|
|
207
|
+
consecutive5xxErrors: 5
|
|
208
|
+
interval: 30s
|
|
209
|
+
baseEjectionTime: 60s
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Saga Pattern
|
|
213
|
+
|
|
214
|
+
### Choreography
|
|
215
|
+
|
|
216
|
+
```python
|
|
217
|
+
# Order Service - publishes events
|
|
218
|
+
async def create_order(order_data):
|
|
219
|
+
order = await save_order({**order_data, status: "PENDING"})
|
|
220
|
+
|
|
221
|
+
await publisher.publish("order.created", {
|
|
222
|
+
"order_id": order.id,
|
|
223
|
+
"items": order.items
|
|
224
|
+
})
|
|
225
|
+
|
|
226
|
+
return order
|
|
227
|
+
|
|
228
|
+
# Inventory Service - listens and reacts
|
|
229
|
+
async def on_order_created(event):
|
|
230
|
+
if not reserve_inventory(event.items):
|
|
231
|
+
await publisher.publish("order.failed", {
|
|
232
|
+
"order_id": event.order_id,
|
|
233
|
+
"reason": "inventory_unavailable"
|
|
234
|
+
})
|
|
235
|
+
else:
|
|
236
|
+
await publisher.publish("inventory.reserved", {
|
|
237
|
+
"order_id": event.order_id
|
|
238
|
+
})
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### Orchestration
|
|
242
|
+
|
|
243
|
+
```python
|
|
244
|
+
class OrderSagaOrchestrator:
|
|
245
|
+
def __init__(self):
|
|
246
|
+
self.steps = [
|
|
247
|
+
ReserveInventoryStep(),
|
|
248
|
+
ProcessPaymentStep(),
|
|
249
|
+
CreateShippingLabelStep(),
|
|
250
|
+
NotifyCustomerStep()
|
|
251
|
+
]
|
|
252
|
+
|
|
253
|
+
async def execute(self, order_data):
|
|
254
|
+
saga = SagaContext(order_id=generate_id())
|
|
255
|
+
|
|
256
|
+
for step in self.steps:
|
|
257
|
+
try:
|
|
258
|
+
await step.execute(saga)
|
|
259
|
+
except StepFailed as e:
|
|
260
|
+
await self.compensate(saga, e.step)
|
|
261
|
+
raise OrderFailed(e.reason)
|
|
262
|
+
|
|
263
|
+
return saga.order
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
## Best Practices
|
|
267
|
+
|
|
268
|
+
1. **API Design** - Well-defined contracts, versioning, documentation
|
|
269
|
+
2. **Single Responsibility** - Each service does one thing well
|
|
270
|
+
3. **Loose Coupling** - Services share only contracts, not databases
|
|
271
|
+
4. **Observability** - Distributed tracing, logging, metrics
|
|
272
|
+
5. **Resilience** - Circuit breakers, retries, timeouts
|
|
273
|
+
6. **Configuration** - Externalize config, use config maps/secrets
|
|
274
|
+
7. **Security** - mTLS between services, API gateways, rate limiting
|
|
275
|
+
|
|
276
|
+
## Common Pitfalls
|
|
277
|
+
|
|
278
|
+
- Distributed monolith (services too tightly coupled)
|
|
279
|
+
- Shared databases (breaks independence)
|
|
280
|
+
- Lack of observability
|
|
281
|
+
- No circuit breakers
|
|
282
|
+
- Synchronous everywhere (cascading failures)
|
|
283
|
+
- Ignoring failure modes
|
|
284
|
+
- Over-decomposition (too many services)
|