1

サードパーティのシステムを呼び出して何らかのアクションを実行するプロセスがあります。ユーザーは、データベースに行を挿入するWebアプリケーションでこれらの呼び出しをスケジュールできます。スケジュールされたプロセスにより、データベースで未処理のリクエストが1時間ごとにチェックされ、サードパーティのサービスに電話がかけられます。ユーザーは、Webアプリケーションでスケジュールした通話を手動で行うこともできます。

スケジュールされたプロセスとユーザーが同時に電話をかけようとする状況を避けたい。この安全性を追加するために、新しい行を「待機中」、試行中の行を「試行中」、完了した行を「完了」、失敗した行を「エラー」というさまざまな行ステータスを導入しました。

サードパーティの呼び出しを試行する最初のステップは、次のようなSQLステートメントを使用して、ステータスを「待機中」から「試行中」に更新することです。

UPDATE remote_calls SET status = "trying" WHERE status = "waiting" AND id = ?;

影響を受ける行=0の場合、終了します。影響を受ける行=1の場合は、電話をかけてみてください。したがって、ユーザーとスケジュールされたプロセスが同時に同じ呼び出しを行おうとすると、一方だけが成功し、もう一方は終了します。

これは私のテストボックスでは正常に機能しますが、マスターマスターレプリケーション環境にデプロイされることがわかりました。問題がありますか?ユーザーの試行とスケジュールされたプロセスが異なるマスターを更新しようとすると、両方の更新が成功するのではないかと心配しています。これは正当な心配ですか?もしそうなら、これらのうちの1つだけが成功することを保証できる方法はありますか?

4

0 に答える 0