用途
该技能用于指导微服务架构的设计与落地,覆盖服务拆分、服务间通信、分布式数据管理以及系统弹性等核心领域。适用于将单体应用拆分为微服务、设计服务边界与契约、实现跨服务通信、管理分布式数据与事务,以及构建具备故障隔离能力的分布式系统等场景。
核心概念
服务拆分策略
按业务能力拆分:围绕业务功能组织服务,每个服务拥有自己的领域,例如 OrderService、PaymentService、InventoryService。
按子域拆分(DDD):区分核心域与支撑子域,将限界上下文映射为服务,明确归属与职责。
Strangler Fig 模式:从单体中逐步抽取功能,新功能以微服务形式实现,通过代理在旧系统与新系统之间路由。
通信模式
同步(请求/响应):REST API、gRPC、GraphQL。
异步(事件/消息):事件流(Kafka)、消息队列(RabbitMQ、SQS)、发布/订阅模式。
数据管理
每个服务独立数据库:每个服务拥有自己的数据,不共享数据库,从而保持松耦合。
Saga 模式:用于分布式事务,通过补偿动作实现最终一致性。
弹性模式
断路器:在重复错误时快速失败,防止级联故障。
带退避的重试:处理瞬时故障,采用指数退避。
舱壁:隔离资源,限制故障影响范围。
主要模式与能力
服务拆分
按业务能力拆分的示例中,OrderService 通过事件总线发布 OrderCreatedEvent;PaymentService 独立处理支付并发布 PaymentCompletedEvent;InventoryService 负责库存检查与预留并发布 InventoryReservedEvent。三者各自独立、通过事件协作。
API 网关
API 网关作为所有客户端请求的统一入口,示例中使用 FastAPI 与 httpx 构建,并通过 circuitbreaker 装饰器为对订单服务的调用添加断路器(failure_threshold=5,recovery_timeout=30)。网关可并行聚合多个服务的数据,并处理部分失败。
同步通信
提供带重试与超时的 HTTP 客户端示例(使用 httpx 与 tenacity),支持指数退避重试(stop_after_attempt(3),wait_exponential(multiplier=1, min=2, max=10))。
异步事件驱动
提供基于 Kafka(aiokafka)的事件总线实现,包括 DomainEvent 数据结构、事件发布 publish 与订阅 subscribe,以及订单创建时发布事件、库存服务监听 OrderCreated 事件并预留库存的示例。
Saga 分布式事务
提供订单履行的编排式 Saga 示例:定义 SagaStep(包含 action 与 compensation)、SagaStatus 枚举,以及 OrderFulfillmentSaga。步骤依次为 create_order、reserve_inventory、process_payment、confirm_order;任一步骤失败时按逆序执行补偿动作(cancel_order、release_inventory、refund_payment 等)。
韧性模式
提供完整的 CircuitBreaker 实现,包含 CLOSED、OPEN、HALF_OPEN 三种状态、失败阈值、恢复超时与成功阈值,以及状态转换逻辑(成功时重置、达到失败阈值时打开、超时后进入半开、半开成功达到阈值则关闭)。
使用方式
技能以参考指南与代码示例的形式提供,可直接参照其中的模式与实现进行设计或编码。资料中列出的参考文件包括 references/service-decomposition-guide.md(拆分单体)与 references/communication-patterns.md(同步与异步模式)。
适用场景
- 将单体应用逐步拆分为微服务
- 设计服务边界与接口契约
- 实现服务间的同步与异步通信
- 处理分布式数据与跨服务事务(Saga)
- 提升分布式系统的容错与弹性能力
- 设计事件驱动架构、服务发现与负载均衡
限制
资料未提供该技能的具体安装命令、收费与价格信息、支持的平台范围、以及实际使用效果数据,这些内容暂未提供。代码示例的具体运行环境与依赖版本需参考示例中出现的库(如 FastAPI、httpx、aiokafka、tenacity、circuitbreaker 等)。