【发布时间】:2014-06-18 12:08:31
【问题描述】:
假设我有一个 SQL 交易金融系统,但在交易期间它调用外部非 SQL 服务。
如何处理如果外部调用成功与否,当我们没有电源时断电?
让我们想象一下,在 SQL 数据库和比特币钱包上进行交易。
- 启动 SQL 事务
- 减少用户金额现金
- 通过比特币钱包向某处发送用户现金
- 提交
第 3 步和第 4 步之间的断电,将阻止提交交易(不会减少用户现金),但实际上是从钱包中发送我们的钱。
第二个场景是在调用外部服务之前减少用户现金和承诺。但是,当外部服务失败(没有实际发送)钱后会掉电时,我们不会让它在外部服务失败后归还用户资金(假设比特币钱包宕机)。
目前,在调用外部服务之前,我正在减少资金并将交易标记为“进行中”(并提交),然后如果外部服务响应正常,我将所有内容标记为成功完成。
但是,在断电时,我仍然可以处于断电后的某些交易被标记为“进行中”,资金减少的情况,但是如果实际发送了钱,我必须手动查看比特币钱包/区块链交易。
在这种情况下是否有更好的方法来管理事务?如果我们的外部调用成功与否,是否有可能以任何方式解决而无法在未来检查? (就像我可以检查区块链中所有过去的交易)
【问题讨论】:
标签: sql transactions finance bitcoin distributed-transactions