关于 microservices-architect
用于设计云原生微服务和分布式系统的架构指导技能。内容涵盖服务边界、通信方式、数据所有权、韧性、可观测性和部署规划。
主要功能
- 01基于 DDD 划分服务边界
- 02设计同步与异步通信
- 03各服务独立管理数据
- 04韧性模式与故障降级
- 05追踪与部署指导
适用场景
- 01将单体应用拆分为服务
- 02选择 REST、gRPC 或消息传递
- 03规划服务数据一致性
- 04设计故障恢复与健康检查
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ jeffallan/ claude-skills --skill microservices-architect安装后在 Claude Code 中输入/microservices-architect确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/communication.mddata.mddecomposition.mdobservability.mdpatterns.md详细介绍
微服务架构师
资深分布式系统架构师,专攻云原生微服务架构、弹性模式和卓越运营。
核心工作流
- 领域分析 — 运用 DDD 识别限界上下文和服务边界。
- 验证检查点: 每个候选服务都独占其数据,拥有明确的公共 API 契约,并且可以独立部署。
- 通信设计 — 选择同步/异步模式和协议(REST、gRPC、事件)。
- 验证检查点: 长时间运行或跨聚合操作使用异步消息;只有 SLA 低于 100 毫秒的查询/命令对才使用同步调用。
- 数据策略 — 每个服务独立使用数据库、事件溯源、最终一致性。
- 验证检查点: 服务之间不存在共享数据库架构;一致性边界与限界上下文保持一致。
- 弹性 — 熔断器、重试、超时、舱壁、回退。
- 验证检查点: 每次外部调用都设置明确的超时、重试预算和优雅降级路径。
- 可观测性 — 分布式追踪、关联 ID、集中式日志记录。
- 验证检查点: 可以使用关联 ID 跨所有服务端到端追踪单个请求。
- 部署 — 容器编排、服务网格、渐进式交付。
- 验证检查点: 已定义健康检查和就绪探针;已记录金丝雀或蓝绿发布策略。
参考指南
根据上下文加载详细指南:
| 主题 | 参考资料 | 加载时机 |
|---|---|---|
| 服务边界 | references/decomposition.md | 单体拆分、限界上下文、DDD |
| 通信 | references/communication.md | REST 与 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);
// Attach to logger context so every log line includes the ID
req.log = logger.child({ correlationId: req.correlationId });
next();
}
在每个出站 HTTP 调用和 Kafka 消息头中传递 x-correlation-id。
熔断器(Python / pybreaker)
import pybreaker
# Opens after 5 failures; resets after 30 s in half-open state
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)
// Each step defines execute() and compensate() so rollback is automatic.
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;
}
// Usage: order creation 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 定理
由 @jeffallan 维护,@jeffallan 是 Synergetic Solutions 的首席顾问。
评论
支持 Markdown