Files
go_bt/knowledge-base/Shared/state-idempotency-recovery.md
T

1.8 KiB

title, type, status, updated, tags
title type status updated tags
状态、幂等与恢复原则 engineering-principle active 2026-08-31
state-machine
idempotency
recovery
concurrency

状态、幂等与恢复原则

状态是独立维度

账号总状态、ChatGPT 状态、授权 JSON 状态、套餐状态、充值状态、账号退款状态、退款流程状态互相独立。一个流程只能更新自己拥有的字段,不能用“总状态”代替其他结果。

幂等规则

  • 远程副作用请求使用稳定操作标识;重试同一操作时复用标识和远程任务 ID。
  • 只有明确的终态失败才允许创建新的完整尝试。
  • 成功是单调状态:迟到的超时、查询失败或本地进度消息不能把成功降级。
  • 数据库更新应带操作归属或最新状态检查,避免并发结果串号。

提交点

每个流程必须明确不可逆提交点。提交点之前可以安全停止;提交点之后必须完成必要清理和本地对账。退款迁移的提交点是个人空间迁移成功;充值的远程创建/确认后必须通过任务查询判定结果。

恢复规则

  • 充值:保存远程任务 ID,启动时由 reconciler 继续查询。
  • 退款:通过团队成员关系和个人空间状态做只读后置确认;提交后即使收到停止信号也继续清理。
  • 定时任务:同类任务不重叠;下一次触发遇到仍运行的上次任务时跳过本轮,不启动第二份。
  • 外部成功、本地保存失败:单独报告,不能再次执行可能重复的副作用。

并发规则

  • 浏览器查询可按配置并发,但同一账号避免同时变更。
  • 充值对账号做占用;一个账号同一时间只有一个未决充值操作。
  • 母号团队退款共享座位和团队成员表,手动、额度触发、截止时间触发共用一把全局锁并固定串行。