在 Manus 中运行任何 Skill
一键导入
一键导入
一键在 Manus 中运行任何 Skill
开始使用saga
星标51
分支15
更新时间2026年5月25日 13:32
管理跨多个服务的分布式事务,通过编排或协调事件序列确保数据最终一致性。
安装
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
SKILL.md
readonly菜单
管理跨多个服务的分布式事务,通过编排或协调事件序列确保数据最终一致性。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
以聚合根为边界,包含多个相关Entity和ValueObject的集合。保证数据一致性和事务边界。
在DDD中具有唯一身份标识和生命周期的对象,通过身份而非属性值相等判断。
封装复杂对象和聚合的创建过程,将创建职责从领域对象中剥离,保证聚合创建时的不变量满足。
没有身份标识,通过属性值判断相等的对象。不可变,通常代表领域中的度量或描述。
命令查询责任分离,将数据的写入操作和读取操作分别用不同的模型处理,优化各自的性能。
将DDD战略设计应用于微服务架构,限界上下文指导服务拆分,领域事件实现服务间通信。
| name | Saga模式 |
| description | 管理跨多个服务的分布式事务,通过编排或协调事件序列确保数据最终一致性。 |
Saga 模式用于管理跨多个聚合或服务的长事务,将大事务拆分为一系列本地事务,每个本地事务有对应的补偿操作。
正常流程:
T1(创建订单) → T2(扣减库存) → T3(扣款) → T4(确认订单)
补偿流程(T3 失败时):
T3失败 → C2(恢复库存) → C1(取消订单)
// 中央协调器控制整个流程
public class OrderSagaOrchestrator {
public void execute(CreateOrderCommand cmd) {
String sagaId = UUID.randomUUID().toString();
try {
// Step 1: 创建订单
Order order = orderService.create(cmd);
// Step 2: 预留库存
inventoryService.reserve(order.getItems());
// Step 3: 扣款
paymentService.charge(order.getCustomerId(), order.getTotal());
// Step 4: 确认订单
order.confirm();
orderRepo.save(order);
} catch (PaymentFailedException e) {
// 补偿:恢复库存
inventoryService.cancelReservation(cmd.getItems());
// 补偿:取消订单
orderService.cancel(cmd.getOrderId(), "支付失败");
throw new SagaFailedException("下单失败:支付异常", e);
} catch (InsufficientStockException e) {
orderService.cancel(cmd.getOrderId(), "库存不足");
throw new SagaFailedException("下单失败:库存不足", e);
}
}
}
# 每个服务监听事件并做出反应,没有中央协调器
# 订单服务
class OrderService:
def create_order(self, data):
order = Order.create(data)
self.repo.save(order)
self.events.publish(OrderCreatedEvent(order.id, order.items))
def on_payment_completed(self, event: PaymentCompletedEvent):
order = self.repo.find_by_id(event.order_id)
order.confirm()
self.repo.save(order)
def on_payment_failed(self, event: PaymentFailedEvent):
order = self.repo.find_by_id(event.order_id)
order.cancel("支付失败")
self.repo.save(order)
# 库存服务
class InventoryService:
def on_order_created(self, event: OrderCreatedEvent):
try:
self.reserve_stock(event.items)
self.events.publish(StockReservedEvent(event.order_id))
except InsufficientStockError:
self.events.publish(StockReservationFailedEvent(event.order_id))
def on_payment_failed(self, event: PaymentFailedEvent):
self.release_stock(event.order_id) # 补偿
# 支付服务
class PaymentService:
def on_stock_reserved(self, event: StockReservedEvent):
try:
self.charge(event.order_id)
self.events.publish(PaymentCompletedEvent(event.order_id))
except PaymentError:
self.events.publish(PaymentFailedEvent(event.order_id))
| 维度 | 编排式 | 协同式 |
|---|---|---|
| 控制方式 | 中央协调器 | 事件驱动,无中心 |
| 复杂度 | 流程集中管理 | 逻辑分散在各服务 |
| 耦合度 | 协调器依赖所有服务 | 服务间松耦合 |
| 可观测性 | 容易追踪流程 | 难以追踪全链路 |
| 适用场景 | 流程复杂、步骤多 | 流程简单、参与方少 |
| 概念 | 关系 |
|---|---|
| 领域事件 | Saga 通过事件触发和通信 |
| 聚合根 | 每个 Saga 步骤操作一个聚合 |
| 微服务中的DDD | Saga 解决微服务间的分布式事务 |
核心:将分布式事务拆分为本地事务序列 + 补偿操作。
选择:流程复杂用编排式,流程简单用协同式。