1
  1. N 個の同一の Windows サービス (C#/.NET で開発) が N 個のアプリケーション サーバーで同時に実行されているとします。「残念ながら」、すべてのサービスには独自のメモリ内状態があります (「午後 10 時にジョブを実行する必要がある」など)。

  2. フロントエンド Web UI を介して、ユーザーはこれらのサービスのいずれかの状態を変更できます (たとえば、ジョブの開始時刻を 10 から 12 に変更します)。

私の質問: ユーザーが状態を変更した後、これらのサービス間で状態を同期するためのベスト プラクティスは何ですか? (できれば.NETプラットフォームで)。

ps なぜわざわざ異なるサーバーで同じサービスを実行するのか不思議に思うかもしれません。これは、管理者が冗長性が単一点障害を防ぐと考えているためです。ただし、ユーザーが UI を介して変更できる独自のインメモリ状態をサービス インスタンスが保持している場合にも、上記の問題が発生します。

ここでの提案は大歓迎です!

4

1 に答える 1

0

ローカル サービスの状態をプライマリ構成/設定などとして使用しているようです。各サービス インスタンスに対して。それらの同期を維持したいので、それは各オペレーティングインスタンスを更新することを意味します。

これを解決する方法はいくつか考えられますが、提供された情報に基づいて、更新ポーリングを使用した集中構成を使用します。

  • ジョブ時間などの構成/設定用の中央データベース。
  • すべてのサービスは、初期化時に中央データベースから読み取って設定/構成を取得し、それらを状態のままサービス インスタンスに適用します。
  • 管理 UI は、データを config/settings DB に保存するだけです。
  • すべてのサービスは定期的に DB からの更新を照会し、それに応じて適用します。

これは、各サービスが動作のために設定を取得する役割を担う単純な分散構造であり (プル モデル)、各サービス インスタンスに通知を送信するよりも管理が容易です (プッシュ モデル)。アプリケーション コードを変更したり、構成情報を変更したりすることなく、後でサーバーやサービス インスタンスを追加できるという利点があります。

于 2012-10-19T21:17:27.433 に答える