mcpField
M
microservices-architect

microservices-architect

github.com/farmage开发218283 次安装5 周前更新
代码仓库

关于 microservices-architect

Microservices Architect 是用于设计云原生分布式系统的架构技能,涵盖服务边界、通信、数据所有权、韧性、可观测性和部署决策。

主要功能

  1. 01基于 DDD 划分服务边界
  2. 02设计同步与异步通信
  3. 03规划服务级数据与一致性
  4. 04为外部调用设计韧性模式
  5. 05分布式追踪与关联 ID
  6. 06健康检查与部署规划

适用场景

  1. 01将单体应用拆分为服务
  2. 02选择 REST、gRPC 或消息模式
  3. 03规划故障处理与可观测性

安装

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

$npx skills add https://github.com/farmage/opencode-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 定理

文档

评论

支持 Markdown