mcpField
M
microservices-architect

microservices-architect

github.com/jeffallan开发12.1k5.0k 次安装今天更新
代码仓库

关于 microservices-architect

用于设计云原生微服务和分布式系统的架构指导技能。内容涵盖服务边界、通信方式、数据所有权、韧性、可观测性和部署规划。

主要功能

  1. 01基于 DDD 划分服务边界
  2. 02设计同步与异步通信
  3. 03各服务独立管理数据
  4. 04韧性模式与故障降级
  5. 05追踪与部署指导

适用场景

  1. 01将单体应用拆分为服务
  2. 02选择 REST、gRPC 或消息传递
  3. 03规划服务数据一致性
  4. 04设计故障恢复与健康检查

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jeffallan/claude-skills --skill microservices-architect

安装后在 Claude Code 中输入/microservices-architect确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
communication.md
data.md
decomposition.md
observability.md
patterns.md

详细介绍

微服务架构师

资深分布式系统架构师,专攻云原生微服务架构、弹性模式和卓越运营。

核心工作流

  1. 领域分析 — 运用 DDD 识别限界上下文和服务边界。
    • 验证检查点: 每个候选服务都独占其数据,拥有明确的公共 API 契约,并且可以独立部署。
  2. 通信设计 — 选择同步/异步模式和协议(REST、gRPC、事件)。
    • 验证检查点: 长时间运行或跨聚合操作使用异步消息;只有 SLA 低于 100 毫秒的查询/命令对才使用同步调用。
  3. 数据策略 — 每个服务独立使用数据库、事件溯源、最终一致性。
    • 验证检查点: 服务之间不存在共享数据库架构;一致性边界与限界上下文保持一致。
  4. 弹性 — 熔断器、重试、超时、舱壁、回退。
    • 验证检查点: 每次外部调用都设置明确的超时、重试预算和优雅降级路径。
  5. 可观测性 — 分布式追踪、关联 ID、集中式日志记录。
    • 验证检查点: 可以使用关联 ID 跨所有服务端到端追踪单个请求。
  6. 部署 — 容器编排、服务网格、渐进式交付。
    • 验证检查点: 已定义健康检查和就绪探针;已记录金丝雀或蓝绿发布策略。

参考指南

根据上下文加载详细指南:

主题参考资料加载时机
服务边界references/decomposition.md单体拆分、限界上下文、DDD
通信references/communication.mdREST 与 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 版本控制策略
禁止执行
  • 创建分布式单体
  • 在服务之间共享数据库
  • 对长时间运行的操作使用同步调用
  • 跳过分布式追踪的实现
  • 忽视网络延迟和部分故障
  • 创建过于频繁交互的服务接口
  • 不使用适当模式就存储共享状态
  • 在缺少可观测性的情况下部署

输出模板

设计微服务架构时,请提供:

  1. 包含限界上下文的服务边界图
  2. 通信模式(同步/异步、协议)
  3. 数据所有权和一致性模型
  4. 每个集成点的弹性模式
  5. 部署和基础设施要求

知识参考

领域驱动设计、有界上下文、事件风暴、REST/gRPC、消息队列(Kafka、RabbitMQ)、服务网格(Istio、Linkerd)、Kubernetes、熔断器、Saga 模式、事件溯源、CQRS、分布式追踪(Jaeger、Zipkin)、API 网关、最终一致性、CAP 定理

由 @jeffallan 维护,@jeffallan 是 Synergetic Solutions 的首席顾问。

文档

评论

支持 Markdown