web-dev-qa-db-ja.com

2つの異なるシステム間での送金に関する一般的なベストプラクティスの方法は何ですか?

先日のインタビューでこの質問を受けましたが、それを解決するためのベストプラクティスが何であるかについては無知でした。これは、2つのシステム間で送金する必要があり、二重カウントを避けたい場合の問題です。システムは同じホスティング環境に配置されておらず、それぞれゲートウェイ経由でWebアクセスできます。このような状況は通常どのように処理されますか?ある口座から送金して別の口座に入金する前に、両方のシステムでロックを確立する必要があることは知っています。しかし、両方のシステムでロックを確立し、一方のシステムからの引き落としを要求しても応答がない場合はどうでしょうか。

ここのベストプラクティスに興味があります。

3
Dave

したがって、最初に理解する必要があるのは、アカウントの実際のシステムには、加算および減算される単一の合計がないということです。代わりに、アカウントからのインフローとアウトフローを表す一連のトランザクションレコードがあります。アカウントの残高を決定することは、(過度に単純化するために)すべての金融取引を読み取り、それらを合計する(負の数を含む)ことです。

あるシステムから別のシステムにお金を移動する場合、各システムのアカウントに記録があると、多かれ少なかれ完了です。負の金額を持つソースアカウントと正の金額を持つターゲット。

銀行の顧客としての私の経験に基づいて、あなたが尋ねている問題が管理される方法は、大まかにトランザクションが作成され、他のシステムが受け取ったという確認を両方が受け取るまで、ある種の処理中/不完全な状態であるとマークされていることですそれ。確認の受領の確認もありそうです。

DBトランザクションまたは 分散トランザクション のような 2フェーズコミット は、この種の場合に役立ちますが、厳密には必須ではありません。この種の問題はネットワーク化されたシステムの基本であり、これらのプロトコルはこれを信頼できるものにするために必要な種類のアプローチを実装しているため、それらについてさらに読むとわかります。

5
JimmyJames