SuperAPI AI 工具集

microservices-patterns

编程与开发

查看项目

更新于 10-16 07:45

技能介绍

用途

该技能用于掌握微服务架构模式,包括服务边界、服务间通信、数据管理与弹性模式,面向构建分布式系统的场景。

适用时机包括:

  • 将单体应用分解为微服务
  • 设计服务边界与契约
  • 实现服务间通信
  • 管理分布式数据与事务
  • 构建具备弹性的分布式系统
  • 实现服务发现与负载均衡
  • 设计事件驱动架构

核心概念

1. 服务分解策略

按业务能力

  • 围绕业务功能组织服务
  • 每个服务拥有自己的领域
  • 示例:OrderService、PaymentService、InventoryService

按子域(DDD)

  • 核心域、支撑子域
  • 限界上下文映射到服务
  • 清晰的归属与职责

Strangler Fig 模式

  • 从单体中逐步抽取
  • 新功能以微服务实现
  • 代理路由到旧/新系统

2. 通信模式

同步(请求/响应)

  • REST API
  • gRPC
  • GraphQL

异步(事件/消息)

  • 事件流(Kafka)
  • 消息队列(RabbitMQ、SQS)
  • 发布/订阅模式

3. 数据管理

每服务独立数据库

  • 每个服务拥有自己的数据
  • 不共享数据库
  • 松耦合

Saga 模式

  • 分布式事务
  • 补偿操作
  • 最终一致性

4. 弹性模式

熔断器

  • 对重复错误快速失败
  • 防止级联故障

带退避的重试

  • 瞬时故障处理
  • 指数退避

舱壁

  • 隔离资源
  • 限制故障影响

服务分解模式

模式 1:按业务能力

以电商为例,OrderService 负责订单生命周期,创建订单后通过事件总线发布 OrderCreatedEvent;PaymentService 独立处理支付,成功后发布 PaymentCompletedEvent;InventoryService 负责库存管理,检查可用量后创建预留并发布 InventoryReservedEvent。各服务通过事件解耦。

模式 2:API 网关

API 网关作为所有客户端请求的集中入口,内部持有各服务的 URL 与 HTTP 客户端,通过熔断器装饰调用(如 failure_threshold=5、recovery_timeout=30),并可用 asyncio.gather 并行聚合多个服务的数据,对部分失败做容错处理。对外暴露端点(如 POST /api/orders)路由到订单服务,服务不可用时返回 503。

通信模式

模式 1:同步 REST 通信

ServiceClient 封装 HTTP 客户端,设置超时(如 5 秒,连接 2 秒)与连接池限制,并使用 tenacity 的 retry 装饰器实现自动重试(stop_after_attempt(3)、wait_exponential(multiplier=1, min=2, max=10))。提供 get/post 方法,调用后 raise_for_status 并返回 JSON。

模式 2:异步事件驱动

使用 aiokafka 的 AIOKafkaProducer 与 AIOKafkaConsumer 实现事件总线。DomainEvent 数据类包含 event_id、event_type、aggregate_id、occurred_at、data。EventBus 提供 start、publish(发送到以 event_type 命名的 topic,以 aggregate_id 为 key)与 subscribe(指定 group_id 消费并交给 handler 处理)。订单服务创建订单后发布 OrderCreated 事件,库存服务订阅并处理该事件以预留库存。

模式 3:Saga 模式(分布式事务)

SagaStep 包含 name、action、compensation。SagaStatus 有 PENDING、COMPLETED、COMPENSATING、FAILED。OrderFulfillmentSaga 编排 create_order、reserve_inventory、process_payment、confirm_order 四步,每步配有补偿动作(cancel_order、release_inventory、refund_payment、cancel_order_confirmation)。execute 顺序执行各步,失败时按逆序执行已完成步骤的补偿动作;compensate 对补偿失败仅记录日志。

弹性模式

熔断器模式

CircuitBreaker 定义三种状态:CLOSED(正常)、OPEN(失败,拒绝请求)、HALF_OPEN(测试是否恢复)。构造参数包括 failure_threshold(默认 5)、recovery_timeout(默认 30 秒)、success_threshold(默认 2)。call 方法在 OPEN 状态下若超过恢复超时则转为 HALF_OPEN,否则抛出 CircuitBreakerOpenError;成功时重置失败计数,HALF_OPEN 下累计成功达到阈值则回到 CLOSED;失败时累加失败计数,达到阈值则转为 OPEN 并记录打开时间,HALF_OPEN 下失败则重新转为 OPEN。

资源

  • references/service-decomposition-guide.md:拆分单体
  • references/communication-patterns.md:同步与异步模式

限制

资料未提供该技能的安装方式、收费信息、支持平台或具体使用步骤,暂未提供。