いくつかの入力ソースに接続し、読み取ったメッセージを処理するアプリケーションを開発したいと考えています (原則として BizTalk を考えますが、それほど重くはありません)。パフォーマンスと信頼性のために、共有ストレージ (DB など) をメッセージ キューイング メカニズムとして利用することで、サービスの水平方向のスケーリングを可能にしたいと考えています。
ただし、電子メールやディスク フォルダーなどのリソースにアクセスするスレッドは、水平方向にスケーリングできません。その入力ソースから読み取るインスタンスは、一度に 1 つだけ実行する必要があります。(さらにメッセージ処理ビジネス ロジックは、もちろん複数のノードに存在できます)。
これは、アクティブ/パッシブ クラスタリングの最適な候補です。1 つのノードは「アクティブ」と見なされ、「単一インスタンス」リソース (電子メールの受信トレイなど) にアクティブに接続しますが、他のノードは「パッシブ」です。「アクティブ」ノードが停止すると、他の「パッシブ」ノードが新しい「アクティブ」ノードを選択します。
ここで質問です。通常のフェールオーバー クラスタリング ロジックを実装するのに役立つ .NET ライブラリはどこかにありますか? (つまり、必要なハートビートの送信/検出、および「アクティブな」ノード選択プロセスの実装)。車輪を再発明したくないので。
すでに行われた調査からわかること:
- BizTalk Server はこの機能をネイティブでサポートしていますが、BizTalk は重くて高価なので使用していません (ただし、この機能をエミュレートしたい)。
- Windows Server は (Windows Server 2008 Enterprise や Datacenter などの特定のハイエンド バージョンで) フェールオーバー クラスタリングをサポートしていますが、これも高価なソリューションです (各ノードに高価なライセンスが必要になるため)。
- フェイルオーバーアルゴリズムがどのように機能するかについては多くの情報がありますが、オープンソースの実装はどこにも見当たりません... (プレミアムで販売されている商用製品のみ)
それが高度で望ましい機能と見なされる可能性があること、およびそのための商用ソリューションが高価である理由を理解しています. これで問題ありません。オープンソースの実装やライブラリが存在しない場合は、自分で開発します。すでに存在するものに労力を費やしたくないだけです。
UPDATE 12/02/2011: SAForum ( http://www.saforum.org/link/linkshow.asp?link_id=214720 ) を見つけました。これは、サービス可用性の概念を開発するためのオープン仕様を公開する Web サイトです。OpenSAF ( http://www.opensaf.org/Welcome-to-OpenSAF%E2%84%A2~151213~14944.htm ) と、SAForum の仕様のオープンソース C++ 実装もあります。包括的に見えますが、非常に重いです。仕様とドキュメントを読み進めるには、かなりの時間がかかります。また、フェールオーバーだけでなく、完全にスケーラブルな分散システム (通知、分散イベント、ロック、クラスター管理など) の仕様を提供することもカバーしています。.NET 実装の兆候はまだどこにもありません。