0

さまざまなデバイスの大規模な異種ネットワークについて考えてみます。これらのデバイスは、ピアツーピア方式でネットワーク上の他のデバイスにサービスを提供しています。すべてのノードでサービスの可用性を追跡するために使用されるメカニズムは、現在、通常はノードがオンラインである間、キープアライブとしてマークされたTCPソケットを使用しています。これにより、すべてのノードが他のすべてのノード(ピアツーピアインフラストラクチャのサブネット内)でソケットを開くことになります。

このようにTCPキープアライブを使用することの拡張性に関してどのような議論がありますか?

私の別のアプローチは、パブリッシュ/サブスクライブモデルを使用することです。このモデルでは、ノードが利用可能になったときに新しいサービスをネットワークにプッシュし、ピアがサービスにサブスクライブするときにそれらをキャッシュします。これは実行可能ですか?

4

3 に答える 3

1

あなたが書いたことから、通信は厳密にポイントツーポイントであり、かなりの期間(「リース」)があると解釈します。これが正しい場合、パブリッシュ/サブスクライブ モデルでは何も得られないことを意味します。これが正しくない場合は、通信に合わせてネットワーク モデルを変更する必要があります (変更することもできます)。

2 番目の質問については、TCP ソケットとキープアライブは単なる概念であるため、そのようなキープアライブ コントラクトを使用することによる本質的なコストはありません (または非常に小さい)。実際には YMMV です。異なるソケットの実装には異なるリソースが必要であり、チャネルを開いたままにするために他のアクションが必要になる場合があるためです。ただし、オープン ソケットに必要なリソースが非常に少ない実装が多数あります (select() タイプなど)。

ディスカバリ サービス (サービスのパブリッシュ/サブスクライブ) は、同じ種類のサービスの実装者が多数存在し、それらがどこに表示されるかを静的に予測できない (または予測したくない) 場合に最も適しています。

要するに、現在のコミュニケーションのタイプが現在のアーキテクチャにうまく適合しない場合にのみ、設計を変更する必要があると言えます。あなたのアイデアは確かに非常に実現可能に思えますが、結果を見積もるには、コミュニケーション パターンに関するより多くの情報が必要です。

于 2009-06-03T17:25:54.657 に答える
0

ええ、キープアライブを使用することは、P2P ネットワークにとって悪い考えのように思えます。データが転送されている間だけ接続を開いたままにするだけでなく、ファイル転送を妨げないように、ノード状態の更新を別のソケットで完全に保持します。

于 2009-06-03T17:10:39.217 に答える