Level 3-4: 异步事件 & Saga
处理事件驱动架构和分布式事务的中级~高级复杂度模式。
Level 3: 异步事件驱动 MSA
特征:
- 事件总线(Kafka、RabbitMQ、EventBridge)
- Eventually Consistent 数据模型
- 领域事件发布/订阅
- 异步通信、松耦合
AIDLC 应用方法:
本体水平
完整本体: 实体 + 关系 + 事件 Schema + 不变条件
- 明确事件契约(Schema Registry)
- 定义事件顺序/依赖关系
示例本体(事件 Schema):
# ontology/order-events.yaml
events:
OrderCreated:
schema:
orderId: string
userId: string
items: list<OrderItem>
createdAt: timestamp
producers:
- OrderService
consumers:
- InventoryService(扣减库存)
- NotificationService(发送通知)
idempotencyKey: orderId
ordering: strict(基于 orderId)
OrderConfirmed:
schema:
orderId: string
confirmedAt: timestamp
producers:
- PaymentService
consumers:
- ShippingService
idempotencyKey: orderId
invariants:
- OrderCreated must precede OrderConfirmed
- OrderCancelled cannot follow OrderShipped
Harness 检查清单
- ✅ 事件 Schema 验证(Avro、Protobuf)
- ✅ 幂等性 Harness(重复事件处理)
- ✅ 事件顺序验证
- ✅ Eventually Consistent 测试(最终状态验证)
- ✅ Dead Letter Queue 处理
应用策略
- 通过事件风暴定义事件
- 必须有事件 Schema 本体
- 幂等性 Harness (应对重复事件)
- 集成事件 Schema Registry
- 自动化 Eventual Consistency 测试
Level 4: Saga + 补偿事务
特征:
- 分布式事务(Saga 模式)
- 补偿事务(Compensating Transaction)
- Orchestration Saga 或 Choreography Saga
- 复杂的失败场景
AIDLC 应用方法:
本体水平
完整本体 + Saga 规范: 实体 + 事件 + Saga 步骤 + 补偿逻辑
- 定义 Saga 各步骤的状态转换
- 明确补偿逻辑(回滚场景)
示例本体(Saga):
# ontology/travel-booking-saga.yaml
saga:
name: TravelBookingSaga
type: orchestration
orchestrator: BookingService
steps:
- name: ReserveFlight
service: FlightService
action: reserveFlight
compensation: cancelFlightReservation
timeout: 10s
retryPolicy: exponentialBackoff(3)
- name: ReserveHotel
service: HotelService
action: reserveHotel
compensation: cancelHotelReservation
timeout: 10s
retryPolicy: exponentialBackoff(3)
- name: ChargePayment
service: PaymentService
action: chargeCard
compensation: refundPayment
timeout: 5s
retryPolicy: none
failureScenarios:
- scenario: FlightReservationFailed
compensations:
- (无,第一步失败)
- scenario: HotelReservationFailed
compensations:
- cancelFlightReservation
- scenario: PaymentFailed
compensations:
- cancelHotelReservation
- cancelFlightReservation
invariants:
- All compensations must be idempotent
- Compensation order is reverse of execution order
- Saga timeout = sum of step timeouts + buffer
Harness 检查清单
- ✅ Saga 各步骤验证
- ✅ 补偿事务验证(回滚场景)
- ✅ 超时 Harness(防止无限等待)
- ✅ 重试策略验证
- ✅ 断路器
- ✅ 分布式追踪(OpenTelemetry)
Harness 实现示例
补偿事务 Harness
# harness/saga_compensation_test.py
def test_saga_compensation():
"""验证 Saga 失败时补偿逻辑是否正确工作"""
saga = TravelBookingSaga()
# 1. Flight 预订成功
saga.execute_step("ReserveFlight")
assert flight_service.is_reserved("flight123")
# 2. Hotel 预订成功
saga.execute_step("ReserveHotel")
assert hotel_service.is_reserved("hotel456")
# 3. Payment 失败模拟
with pytest.raises(PaymentFailedException):
saga.execute_step("ChargePayment")
# 4. 补偿事务验证
saga.compensate()
assert not hotel_service.is_reserved("hotel456") # 已取消
assert not flight_service.is_reserved("flight123") # 已取消
应用策略
- 必须进行 Saga 设计(Orchestration vs Choreography)
- 在本体中明确补偿逻辑
- 在 Harness 中添加补偿事 务验证
- 全面测试失败场景(Chaos Engineering)
- 必须有专家评审
下一步
最高复杂度的 Event Sourcing 模式: