私はこれに数日間取り組んできましたが、いくつかの解決策を見つけましたが、どれも信じられないほど単純でも軽量でもありませんでした。問題は基本的に次のとおりです。10 台のマシンのクラスターがあり、それぞれがマルチスレッド ESB プラットフォームで同じソフトウェアを実行しています。同じマシン上のスレッド間の同時実行の問題はかなり簡単に処理できますが、異なるマシン上の同じデータに対する同時実行の問題はどうでしょうか?
基本的に、ソフトウェアは Web サービスを介して顧客のデータをある企業から別の企業にフィードする要求を受け取ります。ただし、顧客が他のシステムに存在する場合もあれば、存在しない場合もあります。そうでない場合は、Web サービス メソッドを介して作成します。したがって、ある種のテスト アンド セットが必要ですが、他のマシンが競合状態を引き起こさないようにロックアウトするための何らかのセマフォが必要です。以前、1 人のローカル カスタマーに対してリモート カスタマーが 2 回作成されたという状況がありましたが、これはあまり望ましくありません。
私が概念的にいじった解決策は次のとおりです。
フォールト トレラントな共有ファイル システムを使用して、お客様に応じて各マシンでチェックされる「ロック」ファイルを作成します。
データベースで特別なテーブルを使用し、ロック レコードの「テストと設定」を行うためにテーブル全体をロックします。
スケーリングを支援するオープン ソース サーバー ソフトウェアである Terracotta を使用しますが、ハブ アンド スポーク モデルを使用します。
メモリ内の「ロック」の同期レプリケーションに EHCache を使用します。
この種の問題を経験したことがあるのが私だけだとは想像できません。どのように解決しましたか?社内で何か調理しましたか、それともお気に入りのサードパーティ製品はありますか?