跳到正文
cccskills
免费在 GitHub 公开

microservices-design

Microservices design patterns including service mesh, event-driven architecture, saga pattern, and API gateway

中文简介正在准备中。当前显示原文说明。

查看安装方法

包含的文件(1)

  • SKILL.md4.4 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Microservices Design

Service Boundaries

Define services around business capabilities, not technical layers. Each service owns its data store and exposes a clear API contract.

order-service/       -> owns orders table, publishes OrderCreated events
inventory-service/   -> owns inventory table, subscribes to OrderCreated
payment-service/     -> owns payments table, handles payment processing
notification-service -> stateless, subscribes to events, sends emails/SMS

Event-Driven Communication

interface DomainEvent {
  eventId: string;
  eventType: string;
  aggregateId: string;
  timestamp: string;
  version: number;
  payload: Record<string, unknown>;
}

const orderCreatedEvent: DomainEvent = {
  eventId: crypto.randomUUID(),
  eventType: "order.created",
  aggregateId: orderId,
  timestamp: new Date().toISOString(),
  version: 1,
  payload: { customerId, items, totalAmount },
};

await broker.publish("orders", orderCreatedEvent);
async function handleOrderCreated(event: DomainEvent) {
  const { items } = event.payload as OrderPayload;

  for (const item of items) {
    await db.inventory.update({
      where: { productId: item.productId },
      data: { quantity: { decrement: item.quantity } },
    });
  }

  await markEventProcessed(event.eventId);
}

Use idempotency keys (eventId) to handle duplicate deliveries safely.

Saga Pattern (Orchestration)

class OrderSaga {
  private steps: SagaStep[] = [
    {
      name: "reserveInventory",
      execute: (ctx) => inventoryService.reserve(ctx.items),
      compensate: (ctx) => inventoryService.release(ctx.items),
    },
    {
      name: "processPayment",
      execute: (ctx) => paymentService.charge(ctx.customerId, ctx.amount),
      compensate: (ctx) => paymentService.refund(ctx.paymentId),
    },
    {
      name: "confirmOrder",
      execute: (ctx) => orderService.confirm(ctx.orderId),
      compensate: (ctx) => orderService.cancel(ctx.orderId),
    },
  ];

  async run(context: SagaContext): Promise<void> {
    const completed: SagaStep[] = [];

    for (const step of this.steps) {
      try {
        const result = await step.execute(context);
        Object.assign(context, result);
        completed.push(step);
      } catch (error) {
        for (const s of completed.reverse()) {
          await s.compensate(context);
        }
        throw new SagaFailedError(step.name, error);
      }
    }
  }
}

API Gateway Pattern

# Kong or similar gateway config
services:
  - name: orders
    url: http://order-service:3000
    routes:
      - paths: ["/api/v1/orders"]
        methods: [GET, POST]
    plugins:
      - name: rate-limiting
        config:
          minute: 100
      - name: jwt
      - name: correlation-id

  - name: users
    url: http://user-service:3000
    routes:
      - paths: ["/api/v1/users"]
    plugins:
      - name: rate-limiting
        config:
          minute: 200

Health Check Pattern

app.get("/health", async (req, res) => {
  const checks = {
    database: await checkDatabase(),
    cache: await checkRedis(),
    broker: await checkMessageBroker(),
  };

  const healthy = Object.values(checks).every(c => c.status === "up");

  res.status(healthy ? 200 : 503).json({
    status: healthy ? "healthy" : "degraded",
    checks,
    version: process.env.APP_VERSION,
    uptime: process.uptime(),
  });
});

Anti-Patterns

  • Sharing a database between services (tight coupling)
  • Synchronous HTTP chains across multiple services (cascading failures)
  • Building a distributed monolith (services cannot deploy independently)
  • Missing circuit breakers on inter-service calls
  • Not implementing idempotency for event handlers
  • Using distributed transactions instead of sagas

Checklist

  • Each service owns its own data store
  • Services communicate via events for async workflows
  • Saga pattern used for multi-service transactions with compensation
  • Circuit breakers protect against cascading failures
  • API gateway handles routing, rate limiting, and authentication
  • Health check endpoints report dependency status
  • Event handlers are idempotent (safe to process duplicates)
  • Services can be deployed and scaled independently

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

Web accessibility patterns for WCAG 2.2 compliance including ARIA, keyboard navigation, screen readers, and testing

中文简介正在准备中。当前显示原文说明。

rohitg00/awesome-claude-code-toolkit27212026年5月12日 更新

Route broad or ambiguous AgentKit SEO work to the right module while keeping context scoped. Use when a request spans multiple surfaces, asks for overall digital-presence strategy, involves provider or install architecture, needs agent-context planning, or the correct platform skill is unclear.

中文简介正在准备中。当前显示原文说明。

rohitg00/awesome-claude-code-toolkit27212026年5月12日 更新

REST API design with resource naming, pagination, versioning, and OpenAPI spec generation

中文简介正在准备中。当前显示原文说明。

rohitg00/awesome-claude-code-toolkit27212026年5月12日 更新

Authentication and authorization patterns including OAuth2, JWT, RBAC, session management, and PKCE flows

中文简介正在准备中。当前显示原文说明。

rohitg00/awesome-claude-code-toolkit27212026年5月12日 更新

AWS cloud patterns for Lambda, ECS, S3, DynamoDB, and Infrastructure as Code with CDK/Terraform

中文简介正在准备中。当前显示原文说明。

rohitg00/awesome-claude-code-toolkit27212026年5月12日 更新

CI/CD pipeline patterns for GitHub Actions, GitLab CI, testing strategies, and deployment automation

中文简介正在准备中。当前显示原文说明。

rohitg00/awesome-claude-code-toolkit27212026年5月12日 更新

查看 rohitg00 的全部技能

报告此技能的问题