ENGINEERING NOTE 34 / 50 · CARD
并发请求下如何执行支出预算
先读余额再写的预算检查,可能让多个请求同时使用相同剩余额度。提交工作前应原子预留。
本文由 OPEN RAMBO 发布。工程方案和伪代码用于说明设计,不是现有产品 API 文档;示例数字均为演示。
预留而非只观察
两请求都看到剩余100,各批准80。应在事务或条件更新里组合资格检查与预留。预留与已结算支出分开记录。
确认失败后释放
权威拒绝后可释放预留,客户端断线不能作为充分理由。上游结果未知继续待处理。释放也必须幂等,重试不能多次增加可用预算。
对齐重置边界
日月预算需明确时区及未完成预留结转规则。重置不能抹掉仍可能结算的操作。每次预留、消耗、释放均保留账本证据。
示意流程
atomic_reserve(where={"available": {"gte": amount}},
decrement_available=amount, increment_reserved=amount)如何验收
同时发出总额超预算的请求,批准预留总额不得超过可执行额度。