GH GambleHub

传奇模式和分布式交易

传奇模式和分布式事务

1)为什么需要传奇

经典2PC(双相固定)的缩放不佳,在故障下复杂并阻止了资源。传奇将整个业务流程分为一系列本地事务(步骤),每个事务都独立进行营销。失败时,将取消后续步骤,并且已完成的步骤将被反向操作补偿。
结果:管理事件一致性,没有全球锁定,高生存能力和明确的恢复协议。

2)基本模型

2.1个编排

专用的传奇协调员控制步骤:发送命令,等待响应/事件,发起补偿。
优点:集中控制,简单可观察性,明确的截止日期。缺点:附加组件。

2.2编舞

没有协调员;服务相互响应事件("OrderPlaced" → "PaymentCaptured" → "InventoryReserved……")。
优点:薄弱的连通性。缺点:更难追踪,没有明确规则的"死亡舞蹈"风险。

2.3 TCC (Try-Confirm/Cancel)

资源冻结选项:

1.Try-准备/储备,

2.Confirm-固定,

3.Cancel-回滚。

担保较高,但合同和储备金定时更为复杂。

3)步骤和补偿合同

每个步骤=本地交易+补偿(相等,允许重复)。
补偿没有完全"收回和平"的义务-足够的域对等(例如,"退还付款"而不是"删除付款")。
定义不变量:对于金钱-资产负债表不会进入负值;对于订单-没有"挂起"状态。
输入截止日期/TTL备份和"垃圾收集器"以进行逾期尝试。

4)交付的一致性和语义

消息传递:在默认情况下(默认)→所有操作都必须是相等的。
顺序:通过相关键(例如"order_id","player_id")很重要。
Exactly once不是传奇的目的;我们通过等效键、outbox/inbox和正确的通讯来实现高效的整数。

5)传奇的状态和她的日志

什么是存储:
  • "saga_id","correlation_id",当前状态(运行/完成/匹配/匹配/失败),
  • 步骤及其变量(付款/准备金的ID),
  • 事件/决定的历史(日志),时间表,截止日期,撤退次数。
储存地点:
  • 可供协调员使用的单独的Saga Store(表/文件)。
  • 对于编舞,是将状态事件发布到公共拓扑中的本地"代理"传奇。

6)可靠发布模式: outbox/inbox

Outbox:此步骤会推销更改,并在单个事务中将事件/命令记录到outbox表中;制造商发布到总线。
收件箱:消费者维护已处理的"message_id"表格→ dedup+等效性。
成功副作用后,commitim offset/ACK(Kafka/RabbitMQ)不早。

7)传奇步骤设计

7.1示例(在iGaming/电子商务中购买)

1.PlaceOrder → "PENDING"状态。

2.AuthorizePayment (Try) → `payment_hold_id`.

3.ReserveInventory → `reservation_id`.

4.CapturePayment (Confirm).

5.FinalizeOrder → `COMPLETED`.

赔偿:
  • 如果(3)"CancelPaymentHold" →失败;
  • (4)在(3)→ "ReleaseInventory"之后失败;
  • 如果(5)→ "RefundPayment"和"ReleaseInventory"失败。

7.2 个截止日期/retrai

指数延迟+jitter的最大N中继。
超出后-过渡到"比较"。
为每个步骤存储next_attempt_at和deadline_at。

8)编曲家vs平台

变体:
  • 轻型家庭编排器(微服务+Saga表)。
  • 平台:Temporal/Cadence、Camunda、Netflix Conductor、Zeebe-提供计时器、中继、长寿锻炼、可见性和网络控制台。
  • 要编排,请使用事件目录和严格的状态/键约定。

9)集成协议

9.1异步(Kafka/RabbitMQ)

命令: 'payments。authorize.v1`, `inventory.reserve.v1`.

事件: 'payments。authorized.v1`, `inventory.reserved.v1`, `payments.captured.v1`, `payments.refunded.v1`.

派对键=顺序的'order_id'/'player_id'。

9.2同步(HTTP/gRPC)

对于"短"步骤是允许的,但始终具有计时器/后置/幂和后退到异步补偿中。

10)相似性和钥匙

在命令和补偿请求中,传送"idempotency_key"。
副作用(写入DB/注销)有条件地执行:"如果尚未看到'idempotency_key',则执行"。
补偿也是偶然的:重播"RefundPayment(id=X)"是安全的。

11)错误处理

类是:
  • Transient(网络/时间)→ retrai/backoff。
  • 业务(资金不足,限制)→立即补偿/替代途径。
  • 可逆性(不变性破坏)→手动干预,"手动"补偿。
  • 建立解决方桉矩阵:错误类型→操作(retry/compensate/escalate)。

12)可观察性和SLO sag

SLI/SLO:

端到端后期传奇(p50/p95/p99)。
成功率(未补偿完成的比例为)。

Mean time to compensate и compensation rate.

Orphaned sagas(悬挂)和GC之前的时间。
跟踪:"trace_id"/"saga_id"作为步骤之间的span链接;错误预算的burn-rate度量标准。

Logi:传奇状态的每次变化=有原因的结构化记录。

13)示例(伪代码)

13.1编曲家(想法)

python def handle(OrderPlaced e):
saga = Saga. start(e. order_id)
saga. run(step=authorize_payment, compensate=cancel_payment)
saga. run(step=reserve_inventory, compensate=release_inventory)
saga. run(step=capture_payment, compensate=refund_payment)
saga. run(step=finalize_order, compensate=refund_and_release)
saga. complete()

def run(step, compensate):
try:
step () # local transaction + outbox except Transient:
schedule_retry()
except Business as err:
start_compensation(err)

13.2 Outbox(表格创意)


outbox(id PK, aggregate_id, event_type, payload, created_at, sent_at NULL)
inbox(message_id PK, processed_at, status)
saga(order_id PK, state, step, next_attempt_at, deadline_at, context JSONB)
saga_log(id PK, order_id, time, event, details)

13.3编舞(主题想法)

`orders.placed '→消费者: 'payments。authorize`, `inventory.reserve`

`payments.authorized` + `inventory.reserved` → `orders.try_finalize`

任何拒绝→ 'orders。compensate "→由"payments启动。cancel/refund`, `inventory.release`.

14)与2PC和ES的比较

2PC:强烈的一致性,但锁定,瓶颈,"铜管"。
传奇:事件一致性,需要补偿和遥测学科。
事件来源:将事件存储为真理的来源;它的传奇是自然的,但增加了迁移/狙击的复杂性。

15)安全和合规性

Transport Security (TLS/mTLS), ACL per topic/queue。
在事件中-最低PII,敏感字段加密,令牌化。
审核对传奇和补偿日志的访问。
与外部提供商(付款/交付)的SLA=截止日期和转发限制参数。

16)实施清单(0-45天)

0-10天

突出显示候选流程(多服务、补偿)。
选择模型(编排/编排/TSS)和相关密钥。
描述步骤/补偿、不变性和截止值。举起"saga"、"outbox"、"inbox"表。

11-25天

启用outbox/inbox、Idempentity和backoff retrai。
取消第一个传奇;添加SLI/SLO行列板和跟踪。
写一本补偿书(包括手动的)和升级。

26-45天

自动化GC"挂式"传奇,定期重新启动/继续截止日期。
进行游戏日:步骤故障,过期,经纪人无法访问。
标准化事件合同(版本、兼容性),建立"sag目录"。

17)反模式

"补偿=从DB删除"代替域正确反向动作。
没有outbox/inbox →事件丢失/双重效果。
没有jitter的retrai →依赖性的DDoS本身。
期望在没有"处理"的情况下在阅读上具有强烈的一致性。
一个巨大的管弦乐队全→控制整体。
完全无视编舞,SLA →无法控制的舞蹈。
忽略截止日期→永恒的储备/丘陵。

18)成熟度量

≥ 90%的关键过程被传奇/补偿覆盖,并具有描述的不变性。
Outbox/inbox集成到所有Tier-0/1生产者/消费者中。
SLO:正常的p95端到端传奇,成功率稳定,orphaned<目标。
透明的跟踪和行进板"通过步骤",燃烧率差。
季度的游戏日和手写的跑步补偿检查。

19)结论

传奇是分布式系统的实用一致性合同:明确步骤和反向行动,发布纪律(outbox/inbox),截止日期和转发,可观察性和补偿过程。选择一个模型(编排/编排/TSS),记录不变式和密钥,使处理程序相等-如果没有昂贵的2PC,您的多服务业务流程将变得可预测和可持续。

Contact

联系我们

如需任何咨询或支持,请随时联系我们。我们随时准备提供帮助!

开始集成

Email — 必填。Telegram 或 WhatsApp — 可选

您的姓名 可选
Email 可选
主题 可选
消息内容 可选
Telegram 可选
@
如果填写 Telegram,我们也会在 Telegram 回复您。
WhatsApp 可选
格式:+国家代码 + 号码(例如:+86XXXXXXXXX)。

点击按钮即表示您同意数据处理。