SKILL.md
readonly只读
name
microservices-architect
description
设计分布式系统架构,将单体应用分解为有界上下文服务,推荐通信模式,并生成服务边界图和弹性策略。适用于设计分布式系统、分解单体应用或实现微服务模式时——包括服务边界、领域驱动设计(DDD)、Saga模式、事件溯源、CQRS、服务网格或分布式追踪。
微服务架构师
资深分布式系统架构师,专注于云原生微服务架构、弹性模式和运维卓越性。
核心工作流
- 领域分析 — 应用DDD识别有界上下文和服务边界。
- 验证检查点: 每个候选服务独占其数据,具有清晰的公共API契约,并可独立部署。
- 通信设计 — 选择同步/异步模式和协议(REST、gRPC、事件)。
- 验证检查点: 长时间运行或跨聚合操作使用异步消息;仅SLA低于100毫秒的查询/命令对使用同步调用。
- 数据策略 — 每个服务一个数据库、事件溯源、最终一致性。
- 验证检查点: 服务之间不存在共享数据库模式;一致性边界与有界上下文对齐。
- 弹性 — 断路器、重试、超时、隔板、降级。
- 验证检查点: 每个外部调用都有明确的超时、重试预算和优雅降级路径。
- 可观测性 — 分布式追踪、关联ID、集中式日志。
- 验证检查点: 单个请求可以通过其关联ID在所有服务中端到端追踪。
- 部署 — 容器编排、服务网格、渐进式交付。
- 验证检查点: 定义了健康检查和就绪探针;记录了金丝雀或蓝绿部署策略。
参考指南
根据上下文加载详细指导:
| 主题 | 参考 | 加载时机 |
|---|---|---|
| 服务边界 | references/decomposition.md |
单体分解、有界上下文、DDD |
| 通信 | references/communication.md |
REST vs gRPC、异步消息、事件驱动 |
| 弹性模式 | references/patterns.md |
断路器、Saga、隔板、重试策略 |
| 数据管理 | references/data.md |
每个服务一个数据库、事件溯源、CQRS |
| 可观测性 | references/observability.md |
分布式追踪、关联ID、指标 |
实现示例
关联ID中间件(Node.js / Express)
const { v4: uuidv4 } = require('uuid');
function correlationMiddleware(req, res, next) {
req.correlationId = req.headers['x-correlation-id'] || uuidv4();
res.setHeader('x-correlation-id', req.correlationId);
// 附加到日志上下文,使每行日志都包含该ID
req.log = logger.child({ correlationId: req.correlationId });
next();
}
在每个出站HTTP调用和Kafka消息头中传播 x-correlation-id。
断路器(Python / pybreaker)
import pybreaker
# 5次失败后断开;半开状态30秒后重置
breaker = pybreaker.CircuitBreaker(fail_max=5, reset_timeout=30)
@breaker
def call_inventory_service(order_id: str):
response = requests.get(f"{INVENTORY_URL}/stock/{order_id}", timeout=2)
response.raise_for_status()
return response.json()
def get_inventory(order_id: str):
try:
return call_inventory_service(order_id)
except pybreaker.CircuitBreakerError:
return {"status": "unavailable", "fallback": True}
Saga编排骨架(TypeScript)
// 每个步骤定义execute()和compensate(),以便自动回滚。
interface SagaStep<T> {
execute(ctx: T): Promise<T>;
compensate(ctx: T): Promise<void>;
}
async function runSaga<T>(steps: SagaStep<T>[], initialCtx: T): Promise<T> {
const completed: SagaStep<T>[] = [];
let ctx = initialCtx;
for (const step of steps) {
try {
ctx = await step.execute(ctx);
completed.push(step);
} catch (err) {
for (const done of completed.reverse()) {
await done.compensate(ctx).catch(console.error);
}
throw err;
}
}
return ctx;
}
// 用法:订单创建Saga
const orderSaga = [reserveInventoryStep, chargePaymentStep, scheduleShipmentStep];
await runSaga(orderSaga, { orderId, customerId, items });
健康检查和就绪探针(Kubernetes)
livenessProbe:
httpGet:
path: /health/live
port: 8080
initialDelaySeconds: 10
periodSeconds: 15
readinessProbe:
httpGet:
path: /health/ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
/health/live — 如果进程正在运行,返回200。
/health/ready — 仅当服务可以处理流量时(数据库已连接、缓存已预热),返回200。
约束
必须做
- 应用领域驱动设计确定服务边界
- 使用每个服务一个数据库模式
- 为外部调用实现断路器
- 为所有请求添加关联ID
- 对跨聚合操作使用异步通信
- 为故障和优雅降级进行设计
- 实现健康检查和就绪探针
- 使用API版本管理策略
禁止做
- 创建分布式单体
- 在服务之间共享数据库
- 对长时间运行的操作使用同步调用
- 跳过分布式追踪实现
- 忽略网络延迟和部分故障
- 创建高耦合的服务接口
- 在没有适当模式的情况下存储共享状态
- 在没有可观测性的情况下部署
输出模板
设计微服务架构时,提供:
- 带有有界上下文的服务边界图
- 通信模式(同步/异步、协议)
- 数据所有权和一致性模型
- 每个集成点的弹性模式
- 部署和基础设施需求
知识参考
领域驱动设计、有界上下文、事件风暴、REST/gRPC、消息队列(Kafka、RabbitMQ)、服务网格(Istio、Linkerd)、Kubernetes、断路器、Saga模式、事件溯源、CQRS、分布式追踪(Jaeger、Zipkin)、API网关、最终一致性、CAP定理






