いくつかのエラーのためにローカルデータベースが同期しなくなる可能性がないように、重要な財務業務の処理に関連する「デザインパターン」はありますか?
例:
金融取引レコードがローカルデータベースに作成され、顧客に請求するためのリクエストがリモート支払い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()
これで、リモート決済サービスから返される可能性のあるエラーを処理しても、DBサーバーがダウンしたり、ネットワーク接続がダウンしたりするなど、さまざまな問題が発生する可能性があります。
上記のコードでは、トランザクションレコードを作成した直後に、DBサーバーにアクセスできなくなる可能性があるため、リモートサービスによって金融トランザクション自体が正常に実行された場合でも、そのレコードをOKとしてマークできない場合があります。言い換えれば、顧客は課金されますが、予約されていません。
これは、リモートサービスと定期的に同期する、TransactionReturn
処理されているが10分または1時間より古い-sを調査するなど、さまざまな方法で回避できます。
しかし、私の質問は、そのような状況を処理するための確立されたパターンがあるかどうかです(お金が関係しているので、すべてが「常に」適切に機能するはずです)?
PS。この質問にどのタグを使用すればよいかわかりません。タグを付け直してください。