私はサードパーティのWebサービスに接続し、情報を取得してmongoコレクションに保存する小さなサービスを持っています。このサービスが興味を持っているデータはかなり静的ですが、例外的な状況(それはサッカースケジュール、btwです)の下で変更することができます。変更の通知を受けるために、サービスは3〜6時間ごとにチェックして、一致またはキャンセルされた一致があるかどうかを確認します。新しいエントリはデータベースに入り、古いものは既にコレクションに入っているので破棄されます。複数インスタンスサービスの不要な作業を減らす
サービスは、ユーザーが接続するGETエンドポイントも公開します。
これは、サービスの単一インスタンスを実行するとうまくいきますが、複数のインスタンスがある場合はうまくいきません(おそらく、すべてのインスタンスが3時間ごとにデータサービスを照会し、結果)。
私はこの解決方法以下のアイデアを持っている:
- リーダー選挙アルゴリズムのいくつかの種類を使用し、唯一のリーダーは、サードパーティのサービス
- を照会すべき二つにサービスを分離:1より小さいサービスを希望(複数のインスタンスでは依然として問題がある)、結果をメッセージキューに入れて、その結果を1人の消費者が処理して処理するようにしてください。
- クエリーサービスのリーダー選定、データ
- 何らかの種類の分散ロックを使用します(私はRedis/Jedisのソリューションを認識しています)ので、1つのサービスだけがクエリを実行します。これは、しかし、少し過剰な感じです。ちょうどロックのためのRedisを追加すると、一般的に
:-)このような場合に使用されるより良い、他のアイデアは、あなたが好ましい解決策があるかどうか私に教えてくださいません
なぜ同じデータをチェックするインスタンスがたくさん必要ですか?冗長性のためだけに? –
サービスはGETエンドポイントも持っているので、このサービスを高可用性にしたいと考えています。私は本当にシステムの単一の障害点を望んでいません。 – TamasGyorfi