3

Go でネイティブに Pastry のバージョンを作成する作業を行っています。設計図より[PDF]:

アプリケーションは、各 Pastry ノードが特定の IP アドレスを持つノードとそれ自体の「距離」を決定できるようにする機能を提供すると想定されています。距離の値が小さいノードほど、より望ましいと見なされます。アプリケーションは、traceroute やインターネット サブネット マップなどのネットワーク サービスを使用して、近接メトリックの選択に応じてこの機能を実装し、オーバーヘッドを最小限に抑えるための適切なキャッシュおよび近似手法を実装することが期待されます。

Go からプログラムで 2 つの EC2 インスタンス間の「近接性」(つまり、ネットワーク遅延) を判断する最良の方法を見つけようとしています。残念ながら、私は使用できるさまざまなタイプのリクエストを区別できるほど、低レベルのネットワークに精通していません。Googling では、Go からのレイテンシを測定するための提案は見つかりませんでした。また、一般的なレイテンシ テクニックは常に Linux バイナリのように見えますが、依存関係を減らすという名目で回避したいと考えています。何か助けはありますか?

また、レイテンシーは 2 つの EC2 インスタンス間で 1 ミリ秒のスケールである必要があることに注意してください。EC2 での実装を使用する予定ですが、どこでも使用できる可能性があります。2 つのノードのネットワークの近接性を確保するために労力を費やす必要があるほど、一般的に遅延がひどいですか? ほとんどの Pastry リクエストは、クラスター内のサーバー数の 16 を底とする対数で処理できることに注意してください (したがって、10,000 サーバーの場合、検索対象のキーを見つけるのに平均で約 3 リクエストかかります)。たとえば、EC2 のアジアパシフィック リージョンから EC2 の米国東部リージョンへのレイテンシは、ノードを追加する際のレイテンシ チェックによって生じる複雑さとオーバーヘッドを正当化するのに十分ですか?

4

1 に答える 1

5

ネットワークにおける一般的な距離メトリックは、パケットが宛先に到達するために必要なホップ数 (その間のノード ホップ数) をカウントすることです。この指標は、引用したテキストでも言及されていました。これにより、言及した低レイテンシー環境 (EC2「ローカル」) でも適切な距離値が得られる可能性があります。

go ロジック自体については、netパッケージが探しているものだと思うでしょう。実際、遅延テスト (ICMP ping)では、それを使用して IP 接続を作成できます。

conn, err := net.Dial("ip4", "127.0.0.1")

ICMP パッケージの構造とデータを作成し、送信します。( Wikipedia の ICMP ページを参照してください。IPv6には別の形式が必要です。) 残念ながら、TCP や UDP のように ICMP 接続を直接作成することはできないため、パッケージ構造を自分で処理する必要があります。

connタイプConnが aであるためWriter、定義した ICMP データであるデータを渡すことができます。

ICMP Typeフィールドでは、メッセージ タイプを指定できます。値 8、1、および 30 が探している値です。エコー リクエストに対して 8 を指定すると、応答はタイプ 1 になります。30 を指定すると、さらに多くの情報が得られます。

残念ながら、ネットワーク ホップをカウントするには、IP パケット ヘッダー フィールドが必要です。これは、独自の IP パケットを作成する必要があることを意味しますが、これnetは許可されていないようです。

のソースをDial()確認すると、internetSocketエクスポート/公開されていない を使用しています。何か不足しているかどうかはよくわかりませんが、カスタマイズ可能なヘッダー値を使用して、送信する独自​​の IP パケットを作成する簡単な方法はないようです。DialIPパッケージを送信する方法をさらに確認しinternetSocket、そのコード/コンセプトを複製して適応させる必要があります。別の方法として、cgo とシステム ライブラリを使用して独自のパッケージを構築することもできます (ただし、これはさらに複雑になります)。

IPv6の使用を計画している場合は、(また) ICMPv6を調べる必要があります。どちらのパッケージも、v4 バージョンで構造が異なります。


したがって、シンプルなレイテンシー (時間指定の ping) をシンプルな (r) 実装として使用し、必要に応じて後でノードホップを追加することをお勧めします。両方を設置している場合は、これら 2 つを組み合わせることもできます (ホップ数が少ないからといって必ずしも良いというわけではありません。長い海外ケーブルなどを検討してください)。

于 2012-04-17T22:03:12.177 に答える