概述在跨服务写入场景中,强一致成本高,常采用 Saga + Outbox 实现最终一致性。本文给出补偿编排、Outbox 投递与幂等去重的实践与验证方法。Saga 补偿(已验证)设计每个子事务的补偿操作;失败时按逆序执行补偿。状态机:订单创建 → 支付预留 → 库存预留 → 成功/补偿。超时与重试:为每步设置超时与限制重试次数,避免放大风暴。Outbox 模式写模型:业务写入与事件写入同一数据库事务;轮询与投递:后台任务读取 Outbox 表,按顺序投递到消息队列;去重与幂等:事件包含 `eventId` 与幂等键,消费端去重。示例(伪代码)BEGIN; INSERT INTO orders(id, status) VALUES($1, 'PENDING'); INSERT INTO outbox(event_id, type, payload, created_at) VALUES($2, 'OrderCreated', $3, now()); COMMIT; poll outbox ORDER BY created_at LIMIT 100 for each event: publish(event) mark_sent(event_id) 幂等与去重幂等键:对写操作使用 `Idempotency-Key` 或自然键去重;去重存储:消费端记录已处理 `eventId`;过期清理;侧写与恢复:失败重试不产生副作用。监控与验证指标:事件积压、投递失败率、补偿成功率与时长;回归:模拟失败注入与网络抖动,验证补偿与投递稳定性;常见误区业务写与事件写分离事务导致丢失;无补偿或补偿不可逆,导致数据破坏;无幂等去重造成重复写入与资金风险。结语以 Saga 的补偿编排与 Outbox 的可靠投递为核心,结合幂等与监控验证,可在复杂分布式场景下实现可控的最终一致性。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部
1.737637s