7

私は現在、監視および保守システムのソリューションを構築するための優れたミドルウェアを探しています。私たちは、最大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 /プロトコルバッファー)などのソリューションについて簡単に説明しました。

では、使いやすく、堅牢で、安定していて、軽量で、クロスプラットフォームで、クロス言語のミドルウェア(またはその他の)ソリューションについて、法案に適合する推奨事項はありますかできるだけ単純ですが、単純ではありません。

4

2 に答える 2

6

開示:私は長年のDDSスペシャリスト/愛好家であり、DDSベンダーの1つで働いています。

優れたDDS実装は、探しているものを提供します。データの収集とノードの監視は、DDSの従来のユースケースであり、そのスイートスポットとなるはずです。ノードとの対話やノードの調整も可能です。たとえば、いわゆるコンテンツフィルターを使用して、特定のノードにデータを送信します。これは、たとえば文字列または整数IDを使用して、システム内の各ノードを一意に識別する手段があることを前提としています。

システムの階層的な性質とその完全な(潜在的な)サイズのために、クラスター間でデータを転送するために、おそらくいくつかのルーティングメカニズムを導入する必要があります。一部のDDS実装は、そのための汎用サービスを提供できます。多くの場合、DBMSやWebインターフェイスなどの他のテクノロジへのブリッジもサポートされています。

特に、マルチキャストを自由に使用できる場合は、システム内のすべての参加者の検出を自動的に実行でき、最小限の構成で済みます。ただし、これは必須ではありません。

私には、システムが複雑でカスタマイズが必要なように見えます。特にシステムがフォールトトレラントで堅牢である必要がある場合は、どのソリューションも「簡単に対応できる」とは思いません。何よりも、要件を認識する必要があります。あなたが言及したものの文脈でのDDSについてのいくつかの言葉:

継続的なデータを公開/提供する1000以上のノード

これは大きな数ですが、特にDDSでサポートされているデータ分割機能を利用するオプションがあるため、可能であるはずです。

データは(何らかの方法で)確実に収集され、1つ以上のサーバーに継続的に収集される必要があります。これは、失われたデータを要求するためのある種の明示的な要求/応答を使用して、ミドルウェアの上に構築される可能性があります。これがミドルウェアによって自動的に処理される可能性がある場合、これはもちろんプラスです。

DDSは、インフラストラクチャが配布しているデータをどのように処理するかを指定する、いわゆるサービス品質(QoS)設定の豊富なセットをサポートします。これらは、開発者によって設定された名前と値のペアです。サポートされているQoSの信頼性とデータ可用性の領域。これにより、要件が自動的に処理されます。

複数のサーバー/サブスクライバーが同じデータプロデューサー/パブリッシャーに接続し、同じデータを受信できる必要があります

1対多または多対多の配布が一般的なユースケースです。

データレートは、グループあたり1秒あたり10〜20の範囲で最大です。

特にデータフローがパーティション化されている場合は、1秒あたり最大20,000メッセージを追加できます。

メッセージのサイズは、おそらく100バイトから4〜5キロバイトの範囲です。

メッセージが過度に大きくならない限り、メッセージの数は通常、ネットワークを介して転送されるキロバイトの合計量よりも制限されます。ただし、大きなメッセージの構造が非常に複雑な場合を除きます。

ノードは、組み込みの制約付きシステムから通常のCOTS Linux/Windowsボックスまでさまざまです。

一部のDDS実装は、システム内で混合できるさまざまなOS/プラットフォームの組み合わせをサポートしています。

ノードは通常C/C ++を使用し、サーバーとクライアントは通常C ++ / C#を使用します

これらは通常サポートされており、システム内で混在させることができます。

ノードは(望ましい)追加のSWまたはサーバーをインストールする必要はありません。つまり、ノードごとに1つの専用ブローカーまたは追加のサービスは高価です。

このようなオプションは利用可能ですが、追加のサービスの必要性は、DDSの実装と使用する機能によって異なります。

セキュリティはメッセージベースになります。つまり、トランスポートセキュリティは必要ありません。

それは確かにあなたの生活を楽にします-しかし、メッセージレベルでその保護を実装しなければならない人にとってはそれほどではありません。DDSセキュリティは、アプリケーションに対して透過的な包括的なセキュリティモデルを提供するDDSエコシステムの新しい標準の1つです。

于 2012-11-26T04:13:55.713 に答える
3

ZeroMQは、管理する中央インフラストラクチャがなくても、簡単に対応できるようです。監視サーバーが修正されているため、解決するのは非常に簡単な問題です。0MQガイドのこのセクションが役立つ場合があります。

http://zguide.zeromq.org/page:all#Distributed-Logging-and-Monitoring

「信頼性」についておっしゃっていますが、回復したい実際の障害のセットを指定できますか?TCPを使用している場合、ネットワークは定義上、すでに「信頼できる」ものです。

于 2012-11-21T06:20:10.023 に答える