今さらChordを実装してみた

Chord's GUI

図1:Chordの実行画面

今さら感がありますが、構造化オーバーレイネットワークとしては最も有名であると思われるChordを実装してみました。図1は、実装したChordの実行画面です。「Node」には通信中のノード一覧が、「Object」には登録したオブジェクトの一覧が、「Pointer」には自分が管理している(responsibleな)オブジェクトの一覧が表示されています。本当に分散して動かしているわけではないので、通信中のノードのIPアドレスが全て「127.0.0.1」となっていますが。。。(でも、ちゃんとループバックIF経由のUDPで通信してます。ちなみに、ちょっとだけNAT Traversalも考慮していたりします。)

Chordを実装してみて感じたのは、Chordのプログラムコードはシンプルに記述することができるということです。Chord以外にも、SkipGraphとかChord#とかWaon(独自のオーバーレイネットワーク)も実装しているのですが、これらと比較して、Chordの方がプログラムコードをシンプルに記述できます。

ChordのFinger Tableに登録するノードの基準はSuccessorとPredecessorと同じ「ID空間上の距離」ですので、SuccessorとPredecessorの管理コードを拡張する方向でFinger Tableの管理コードを書けます。しかし、Chord以外の構造化オーバーレイネットワークの多くでは、Finger Tableに登録するノードの基準がSuccessorやPredecessorの基準(ID空間上の距離)ではないので、SuccessorとPredecessorの管理コードとは別に、新たにFinger Tableを管理するためのコードを書かなくてはならない。Chordが「SuccessorとPredecessorのついでにFinger Tableも管理する」というコードになるのに対して、それ以外の構造化オーバーレイネットワークでは「SuccessorとPredecessorを管理しながら、それとは別にFinger Tableも管理する」というコードになるわけです。

プログラムコードがシンプルになるからといって技術的に優れていると言い切れるわけではないですが、実装しやすいというのは技術が普及する上では重要かもしれません。

ちなみに、動作確認用のフレームワークも作っていて、Chordが必要とする計算資源の量(図2)とか、Chordが構築しているオーバーレイネットワークの構造(図3)とかも確認したりしています。

Control Panel

図2:管理画面

Chord's Network

図3:ネットワーク画面

カテゴリー: 研究活動 タグ: , , , パーマリンク