情報科学屋さんを目指す人のメモ(FC2ブログ版)

何かのやり方や、問題の解決方法をどんどんメモするブログ。そんな大学院生の活動「キャッシュ」に誰かがヒットしてくれることを祈って。

ブログ内検索

スポンサーサイト このエントリーを含むはてなブックマーク

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告 | 編集
このエントリーをはてなブックマークに追加 Clip to Evernote

Overlay Weaver で新しいルーティングアルゴリズムを作る方法(1/3) このエントリーを含むはてなブックマーク

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版 サービス詳細から基盤技術まで

DHT | コメント:0 | トラックバック:0 | 編集
このエントリーをはてなブックマークに追加 Clip to Evernote

この記事のコメント

コメントの投稿 エントリの新旧に関わらず、極力18時間中に返信します。














この記事のトラックバック

トラックバックURL:
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。