質問

Windowsサービスを実行するための確立されたベストプラクティス(私の場合は.NETで開発された)を知っている人はいますか?

これが行われているのを見ることができる主な方法は、必要に応じてセカンダリサーバーを起動すること(その場合、他のサーバーを監視するものが必要です)か、両方のサービスを一緒に実行することです(その場合、作業を同期する必要があります。彼らは同じことをしようとしません)。

この種の問題のパターンやモデルはありますか?正確な状況が大きな違いを生むことは知っていますが、それはかなり一般的な問題のように思えます。

ありがとう

ジョン

役に立ちましたか?

解決

これが私のために働いたものです。

インフラストラクチャの立場から、クラスター化された2つのWindowsサーバーが必要です。 (2つの標準のWindowsサーバーボックスが実行され、クラスタリングピースをインストールして構成することができ、ほとんどのSYS管理者はこれを行う方法を知っている必要があります。)次に、クラスターの両方のノードにサービスをインストールし、両方をオフにしてマニュアルに設定してもらいます起動。次に、クラスタリングされたリソースをWindowsクラスター管理者に追加して、アクティブなノードでサービスをオンとオフにすることを管理します。サービスが実行されているときとノードでWindowsクラスターを管理します。これは、サービスをクラスタリングする簡単な部分です。

サービススタンドポイントから、できるだけステートレスにすることができるように、サービスを設計する必要があります。これはちょっと不自由なアドバイスですが、それは本当にあなたのサービスが何をしているかに依存します。デザインでは、コードの寿命の間に何らかのポイントで最悪の時期に停止すると仮定してください。 node2のサービスは、node1が中断した場所でどこでピックアップするかをどのように知ることができますか?それはあなたが設計する必要がある難しい部分です。サービスが何をしているかによっては、最後に完了したタスクをDBテーブルまたは共有データファイルに残すことができます。また、最初から開始して、そのタスクがそれに基づいて行動する前に再完了したかどうかを再確認することもできます。

繰り返しますが、それは本当にサービスを達成する必要があることに依存するでしょう。お役に立てれば。

他のヒント

両方を常に実行することはおそらく最も単純なソリューションですが、50%を超える負荷をかけないことを確認する必要があります。

同期するには、トランザクションデータベースを使用します。通常、独自の同期を書こうとすると、通常はバグが生じます。

両方のサービスを機能させることができれば、それはより良いです。それらがステートレスであることを確認するか、状態の問題を処理する方法を知る必要があり、データベースはそれらの間で同期します。障害の単一のポイントでは、問題をDBに押し上げます。2ノードのアクティブアクティブクラスターを使用して、DB製造に同期の問題を処理させることができます。

フェイルオーバーに対処する最良の方法は、可能な限りネットワークレベルにあると思います。ロードバランスまたはプライマリ/フェイルオーバー環境に面している仮想IPSフロントは、フェールオーバーシナリオのコードを記述する必要がないようにするための良い方法です。

コードのフェイルオーバーを処理する必要がある場合:

  1. 接続/サービスコールをテストします
  2. テストが失敗した場合は、アラートを送信します
  3. 次の「登録」サービスエンドポイントに失敗します

2つの基本的なアプローチがあります。

  1. クライアントは、必要に応じて、または別のサービスまたは構成メカニズムの指示に従って、異なるエンドポイントアドレスとスイッチを認識しています。 (例として ストックトレーダーデモアプリケーション これを行います。)

  2. クライアントは気づいておらず、フェイルオーバーを提供できる標準ネットワークロードバランスアプローチを使用します。 F5は1つの製品です。他にもたくさんあります。これは基本的に、すべてのリクエストがNLBを通過し、サーバーに送信し、応答を発信者に転送するサービスのNATのようなものです。これらの製品は、サービスを監視し、アップしているサービスのみを使用します。また、多くの場合、ルールを使用してカスタマイズして、サーバーワークロードに基づいてサーバーに新しいリクエストを割り当てることができます。 Windows Serverにはこれがあります ある程度組み込まれた機能。

いずれにせよ、サービスコールが「ステートレス」である場合、はるかに簡単です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top