Overlay Weaver は、オーバレイ構築ツールキットで、いろいろ便利な機能がたくさんあります。特に、エミュレータ上で動いたアルゴリズムのコードがそのまま実環境で利用できることがとても便利だと思います。その他、詳細はリンク先へ。
今回は、﹁Chord﹂や﹁Kademlia﹂のようなDHTルーティングアルゴリズムをOverlay Weaver上に実装する方法、特に重要なポイントを紹介しますかなりの分量になる予感
参考文献
参考文献は、Overlay Weaverの公式ページ中にある﹁開発者向けガイド﹂です。もちろん、今回はそこに書かれていないことを書きます。
参考文献2
困ったときは、既存の﹁Chord﹂や﹁Kademlia﹂の実装を参考にしてください。おそらく、Chordが一番分かりやすいと思いますが、﹁Linear Walker﹂という﹁ChordのSuccessor List Only版﹂が作成され、それを継承してChordが書かれていることには注意が必要です。また、以下の説明も、Chordよりに書きます。
●Chord‥ow.routing.chordパッケージ
●LinearWalker:ow.routing.linearwalkerパッケージ
●Kademlia:ow.routing.kademliaパッケージ
新規作成必須ファイル
まず、今回新規に作成するアルゴリズムの名前を仮に﹁MyChord﹂とします。そのとき、最低限新規に作成すべきファイルは次の通りです。
●ow.routing.mychordパッケージ
●ow.routing.mychord.MyChord.java
●ow.routing.mychord.MyChordConfiguration.java
●ow.routing.mychord.MyChordProvider.java
以上の3つのファイルは必ず新規で用意する必要があります。逆に言えば、この3ファイル(.java)さえ作れば新しいアルゴリズムが作成できます。
ここからは、それら一つ一つを見ていきます。とりあえず、簡単なところから。
MyChordConfiguration.java
これは、アルゴリズムの設定を行うクラスを定義するファイルです。必ずRoutingAlgorithmConfigurationを継承している必要があります。
たとえば、routingTableSizeという設定(フィールド)を設けたい場合、Overlay Weaverの書き方に準ずれば次のようになります。
public class MyChordConfiguration extends RoutingAlgorithmConfiguration{
public final static int DEFAULT_ROUTING_TABLE_SIZE = 160;
protected MyChordConfiguration() {}
private int routingTableSize = DEFAULT_ROUTING_TABLE_SIZE;
public int getRoutingTableSize() {
return this.routingTableSize;
}
public int setRoutingTableSize(int size) {
int old = this.getRoutingTableSize();
this.routingTableSize = size;
return old;
}
}
MyChordProvider.java
これは、アルゴリズムオブジェクトを生成するためのクラスで、外部からアルゴリズムオブジェクトを生成する場合は必ずこのクラスが利用されます。その機能的に、ただただ決まり切ったことを書いておけば大丈夫です。ただし、必ずRoutingAlgorithmProviderクラスをimplementsしてください。
たとえば、次のようになります。
public class MyChordProvider implements RoutingAlgorithmProvider{
private final static String ALGORITHM_NAME = "MyChord";
@Override
public RoutingAlgorithmConfiguration getDefaultConfiguration() {
return new MyChordConfiguration();
}
@Override
public String getName() {
return ALGORITHM_NAME;
}
@Override
public RoutingAlgorithm initializeAlgorithmInstance(
RoutingAlgorithmConfiguration conf, RoutingService routingSvc)
throws InvalidAlgorithmParameterException {
return new MyChord(conf, routingSvc);
}
}
ここで、アルゴリズム本体に相当するMyChordオブジェクトを作成していることが分かります。次は、いよいよそのアルゴリズム本体の書き方です。
MyChord.java
MyChordクラスは、アルゴリズム本体であり、必ずAbstractRoutingAlgorithmを継承します。
あとは、AbstractRoutingAlgorithmに用意されている大量のメソッドをすべて実装すればOKです。ここでは、一つ一つすべてのメソッドを解説していきます。
つづく
次の記事﹁Overlay Weaver で新しいルーティングアルゴリズムを作る方法(2/3)﹂へつづく。
雲の世界の向こうをつかむ クラウドの技術
クラウドを実現する技術
クラウド大全 第2版 サービス詳細から基盤技術まで