RDBMS に対して動作するジョブ処理分析サービスがあります。これは、複雑なキャッシングとキャッシュ更新ロジックが必要なため、高可用性クラスター内のシングルトンである必要があります。ジョブは JMS メッセージとして (ActiveMQ 経由で) 送信されます。これは、Web フロントエンドを備えた HA Tomcat クラスターでホストされるアプリケーションの一部です。
問題は、実行中のノードに障害が発生した場合、サービス自体が数秒以内に回復できる必要があることです。障害は、システムのダウンまたは CPU の低速化を意味する可能性があります。つまり、ノードが CPU の遅延後に回復しても、処理が引き渡された場合、処理を続行できません。
経験から、ここで最も適切な解決策は何でしょうか:
- データベースベースのロックと、各ジョブが開始する前のロック チェック (ここで防弾ソリューションを簡単に思いつくことはできませんでした。推奨事項はありますか?)
- ある種の Paxos アルゴリズム? アルゴリズム自体が正しくなってから QA に時間がかかるため、その目的のためのスリムなフレームワークを知っていますか?
- 他に何か?
障害回復が遅くても構いませんが、各ジョブのオーバーヘッドを最小限に抑えたいと考えています。
いくつかの追加の背景: ジョブには、データベースからデータを読み取り、さまざまなアルゴリズムを使用してそれを処理し (最短ルートを見つけることに似ています)、さまざまなアクターが次に進むための最適なソリューションを元に戻すだけの作業が含まれます。アクターは現実の世界と対話し、同じジョブ プロセッサによって最適化された後続のステップに基づいてフィードバックを返します。