1

是否有任何与处理重要财务操作相关的“设计模式”,以便本地数据库不会因为某些错误而变得不同步?

例子:

在本地数据库中创建金融交易记录,然后向远程支付 API 端点发送请求以向客户收费。伪代码:

record = TransactionRecord.create(timestamp=DateTime.now, amount=billed_amount, status=Processing)
response = Request.post(url=remote_url, data=record.post_data)
if response.ok:
    record.mark_as_ok()
else:
    record.mark_failed()

现在,即使我处理了可以由远程支付服务返回的错误,许多其他不好的事情仍然可能发生:数据库服务器可能会关闭,网络连接可能会关闭等,在任意时间点。

在上面的代码中,数据库服务器可能在创建交易记录后立即变得不可访问,因此即使金融交易本身已由远程服务成功执行,也可能无法将该记录标记为正常。换句话说:向客户收费,但我们没有预订..

这可以通过多种方式解决 - 通过定期与远程服务同步,通过调查TransactionReturn正在处理但早于例如 10 分钟或一小时的 -s。

但我的问题是,是否有一些成熟的模式来处理这种情况(涉及金钱,所以一切都应该“一直”正常工作)?

PS。我不确定我应该为这个问题使用什么标签,请随时重新标记它。

4

1 回答 1

2

我认为没有任何“设计模式”可以解决您的场景中发生的数据库连接断开或网络连接断开等情况。这两种情况中的任何一种都是重大故障事件,很可能需要人工干预。

除了通过进行适当的错误检查、提供适当的通知以支持和自动禁用不起作用的功能(如果应用程序检测到支付服务已关闭,则“提交支付”按钮应该被禁用)。

如果您进行正确的错误处理和状态管理,您将能够显着减少支持。在您的情况下,事务记录必须将其状态从 Pending -> Submitted -> Processed 或 Rejected 或类似的东西更改。

此外,并非每个服务都提供同步功能。

于 2013-01-04T20:45:24.973 回答