私は現在、監視および保守システムのソリューションを構築するための優れたミドルウェアを探しています。私たちは、最大10,000の個別ノードで構成される分散システムを監視、データ収集、および維持するという課題に取り組んでいます。
システムは、5〜20ノードのグループにクラスター化されます。各グループは、受信したセンサーデータを処理することにより、(チームとして)データを生成します。各グループには、グループのファサード/プロキシとして機能する専用ノード(青いボックス)があり、グループからのデータと状態を外部に公開します。これらのクラスターは地理的に離れており、さまざまなネットワークを介して外界に接続できます(1つはファイバーを介して、もう1つは3G /衛星を介して実行できます)。より短い(秒/分)停止とより長い(時間)停止の両方が発生する可能性があります。データは、各クラスターによってローカルに保持されます。
このデータは、さまざまなクライアント(オレンジ色のボックス)によるさらなる処理、分析、および表示のために、外部および集中型サーバー(緑色のボックス)によって(継続的かつ確実に)収集される必要があります。また、各グループのプロキシノードを介してすべてのノードの状態を監視する必要があります。ミドルウェアがそれをサポートできればよいとはいえ、各ノードを直接監視する必要はありません(最大10,000ノードからのハートビート/状態メッセージを処理します)。プロキシに障害が発生した場合は、他の方法を使用して個々のノードを特定できます。
さらに、設定などを微調整するために各ノードと対話できる必要がありますが、それはほとんどの場合、必要に応じてノードごとに手動で処理されるため、より簡単に解決できるようです。いくつかのバッチ調整が必要になる場合がありますが、全体としては、標準のRPC状況(Webサービスなど)のように見えます。もちろん、ミドルウェアがこれも処理できる場合は、いくつかの要求/応答メカニズムを介してプラスになります。
要件:
- 継続的なデータを公開/提供する1000以上のノード
- データは(何らかの方法で)確実に収集され、1つ以上のサーバーに継続的に収集される必要があります。これは、失われたデータを要求するためのある種の明示的な要求/応答を使用して、ミドルウェアの上に構築される可能性があります。これがミドルウェアによって自動的に処理される可能性がある場合、これはもちろんプラスです。
- 複数のサーバー/サブスクライバーが同じデータプロデューサー/パブリッシャーに接続し、同じデータを受信できる必要があります
- データレートは、グループあたり1秒あたり10〜20の範囲で最大です。
- メッセージのサイズは、おそらく100バイトから4〜5キロバイトの範囲です。
- ノードは、組み込みの制約付きシステムから通常のCOTS Linux/Windowsボックスまでさまざまです。
- ノードは通常C/C ++を使用し、サーバーとクライアントは通常C ++ / C#を使用します
- ノードは(望ましい)追加のSWまたはサーバーをインストールする必要はありません。つまり、ノードごとに1つの専用ブローカーまたは追加のサービスは高価です。
- セキュリティはメッセージベースになります。つまり、トランスポートセキュリティは必要ありません。
データの公開/ポーリング/ダウンロードのために主にプロキシノード(青)とサーバー(緑)の間、および設定を微調整するためにクライアント(オレンジ)から個々のノード(RPCスタイル)への通信を処理できるソリューションを探しています。
逆の状況については、多くの議論と推奨事項があるようです。サーバーから多くのクライアントにデータを配布しますが、説明されている状況に関連する情報を見つけるのは困難です。一般的な解決策は、SNMP、Nagios、Gangliaなどを使用して多数のノードを監視および変更することですが、私たちにとって難しい部分はデータ収集です。
DDS、ZeroMQ、RabbitMQ(すべてのノードでブローカーが必要ですか?)、SNMP、さまざまな監視ツール、Webサービス(JSON-RPC、REST /プロトコルバッファー)などのソリューションについて簡単に説明しました。
では、使いやすく、堅牢で、安定していて、軽量で、クロスプラットフォームで、クロス言語のミドルウェア(またはその他の)ソリューションについて、法案に適合する推奨事項はありますか?できるだけ単純ですが、単純ではありません。