微服务模式Skill microservices-patterns

该技能专注于微服务架构的设计与实现,涵盖服务分解、通信模式、数据管理和弹性模式等关键方面。适用于构建分布式系统、分解单体应用和提升系统可扩展性与可靠性。关键词:微服务、架构、模式、分布式系统、服务边界、事件驱动、弹性。

微服务 0 次安装 0 次浏览 更新于 3/16/2026

名称: 微服务模式 描述: 设计微服务架构,包括服务边界、事件驱动通信和弹性模式。用于构建分布式系统、分解单体应用或实施微服务。

微服务模式

掌握微服务架构模式,包括服务边界、服务间通信、数据管理和弹性模式,用于构建分布式系统。

何时使用此技能

  • 分解单体应用到微服务
  • 设计服务边界和合同
  • 实施服务间通信
  • 管理分布式数据和事务
  • 构建弹性分布式系统
  • 实施服务发现和负载均衡
  • 设计事件驱动架构

核心概念

1. 服务分解策略

按业务能力分解

  • 围绕业务功能组织服务
  • 每个服务拥有其域
  • 示例:订单服务、支付服务、库存服务

按子域分解(DDD)

  • 核心域、支持子域
  • 有界上下文映射到服务
  • 清晰的拥有和责任

绞杀者模式

  • 从单体逐步提取
  • 新功能作为微服务
  • 代理路由到旧/新系统

参见详细指南服务分解

2. 通信模式

同步(请求/响应)

  • REST API
  • gRPC
  • GraphQL

异步(事件/消息)

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

参见详细模式通信模式

3. 数据管理

每个服务独立数据库

  • 每个服务拥有其数据
  • 无共享数据库
  • 松耦合

Saga模式

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

参见详细模式数据管理

4. 弹性模式

断路器

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

退避重试

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

舱壁隔离

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

参见详细实现弹性模式

快速入门

基本服务结构

from fastapi import FastAPI

app = FastAPI()

class OrderService:
    """处理订单生命周期。"""

    async def create_order(self, order_data: dict) -> Order:
        order = Order.create(order_data)

        # 为其他服务发布事件
        await self.event_bus.publish(
            OrderCreatedEvent(
                order_id=order.id,
                customer_id=order.customer_id,
                items=order.items,
                total=order.total
            )
        )

        return order

@app.post("/orders")
async def create_order(order_data: dict):
    service = OrderService()
    return await service.create_order(order_data)

API网关模式

class APIGateway:
    """所有客户端请求的中央入口点。"""

    async def call_order_service(self, path: str, method: str = "GET", **kwargs):
        response = await self.http_client.request(
            method,
            f"{self.order_service_url}{path}",
            **kwargs
        )
        return response.json()

    async def create_order_aggregate(self, order_id: str) -> dict:
        """从多个服务聚合数据。"""
        order, payment, inventory = await asyncio.gather(
            self.call_order_service(f"/orders/{order_id}"),
            self.call_payment_service(f"/payments/order/{order_id}"),
            self.call_inventory_service(f"/reservations/order/{order_id}"),
            return_exceptions=True
        )

        return {"order": order, "payment": payment, "inventory": inventory}

参见详细模式API网关

服务分解模式

使用业务能力和DDD原则将单体分解为微服务。

参见详细指南服务分解

通信模式

同步通信

带重试逻辑和超时的REST API。

from tenacity import retry, stop_after_attempt, wait_exponential

class ServiceClient:
    @retry(
        stop=stop_after_attempt(3),
        wait=wait_exponential(multiplier=1, min=2, max=10)
    )
    async def get(self, path: str, **kwargs):
        response = await self.client.get(f"{self.base_url}{path}", **kwargs)
        response.raise_for_status()
        return response.json()

参见详细模式通信模式

异步事件驱动

使用Kafka的事件总线实现解耦通信。

async def publish_event(event: DomainEvent):
    await event_bus.publish(event)

async def subscribe_to_events(topic: str, handler: callable):
    await event_bus.subscribe(topic, handler)

参见详细实现事件驱动架构

数据管理模式

Saga模式

通过补偿操作管理分布式事务。

class OrderFulfillmentSaga:
    """订单履行的编排式Saga。"""

    async def execute(self, order_data: dict) -> SagaResult:
        try:
            for step in self.steps:
                result = await step.action(context)
                if not result.success:
                    await self.compensate(completed_steps, context)
                    return SagaResult(status=SagaStatus.FAILED)

                completed_steps.append(step)

            return SagaResult(status=SagaStatus.COMPLETED)
        except Exception:
            await self.compensate(completed_steps, context)

参见详细实现Saga模式

弹性模式

断路器

通过快速失败防止级联故障。

class CircuitBreaker:
    async def call(self, func: Callable, *args, **kwargs) -> Any:
        if self.state == CircuitState.OPEN:
            raise CircuitBreakerOpenError("断路器已打开")

        try:
            result = await func(*args, **kwargs)
            self._on_success()
            return result
        except Exception:
            self._on_failure()
            raise

参见详细实现弹性模式

最佳实践

  1. 服务边界:与业务能力对齐
  2. 每个服务独立数据库:无共享数据库
  3. API合同:版本化、向后兼容
  4. 尽可能异步:事件优于直接调用
  5. 断路器:服务失败时快速失败
  6. 分布式跟踪:跨服务跟踪请求
  7. 服务注册:动态服务发现
  8. 健康检查:活跃和就绪探针

参见详细指南最佳实践

常见陷阱

  • 分布式单体:服务紧密耦合
  • 聊天式服务:过多服务间调用
  • 共享数据库:通过数据紧密耦合
  • 无断路器:级联故障
  • 全同步:紧密耦合、弹性差
  • 过早微服务化:从微服务开始
  • 忽略网络故障:假设网络可靠
  • 无补偿逻辑:无法撤销失败事务

参见详细解决方案常见陷阱