かつのりの日記2

わんくまでは珍しいJavaを中心とした日記です

目次

Blog 利用状況

書庫

日記カテゴリ

いろいろリンク

分散ハッシュテーブルが気になる

最近分散ハッシュテーブルというのが気になります。簡単に言うとネットワーク上に分散されたハッシュテーブルです。

Googleのファイルシステムなどでも実装されている技術で、大規模なデータの取り扱いに向いています。まともに使える分散ハッシュテーブルを実装するには、以下の機能を実装する必要があります。

  • 管理サーバ不要なピュアP2P
  • ノード離脱時のデータのレプリケーション
  • ノード参加時のデータ分散・受入
  • 高速なデータ検索
  • 高速なデータ取得
  • ストップレスでのノードの参加・離脱

これらをきちんと実装すると、こんなことが出来ます。

  • ノードが故障してもストップレスでノードの交換
  • ノードが故障してもデータを維持
  • ストップレスでノードの追加
  • 分散ハッシュテーブルをファイルシステムとするラッパーによって巨大なファイル郡の取り扱い

ノードといっているのはサーバです。サーバが故障しても、レプリカを再度生き残っているノードで分散化することで、ストップレスで運用が可能になります。ノードが追加されたときも、追加されたノードが他のノードのデータやデータのレプリカを受け入れる事によって、各ノードの平均データ数が減り、結果として保存可能な容量が増えるわけです。スケーラビリティが要求されるウェブサイトでは必須の要件です。

この技術があれば、エンタープライズな世界においても、安価なサーバで信頼の置けるデータストアとして運用できます。Googleでも毎日かなりなサーバが壊れているみたいです。台数が多いので平均故障間隔が実感できるレベルだと思いますが、「壊れても問題ない、だから安価なサーバでよい。」というポリシーには心が惹かれます。データの規模によってサーバを増やせばいいので、初期投資も非常に少なく済むのが特徴です。

どうやって実装するかは、少しずつ紹介していきます。

投稿日時 : 2007年12月12日 0:29

Feedback

# re: 分散ハッシュテーブルが気になる 2007/12/12 1:11 凪瀬

EJBとかだとネーミングサーバがクリティカルな部分になりますよね?
クリティカルな場所なしにできるんだろうか…。
一番クリティカルなのはルータあたりの機器ということになるとは思うけど。

「Winnyの技術」読むとやっていることはシンプルなんですよね。アイツは。
サーバレスなP2Pでサーバ群のようなものを作ろうとしたらやっぱり最初の一歩のサーバをどこから得るかがクリアできないよなぁ…。
ねっとげーのサーバをP2P実装にしたいとか考えることがよくありますw

# re: 分散ハッシュテーブルが気になる 2007/12/12 8:43 かつのり

ホストの解決をするのが確かに一番難しいんですね。
ノードが参加するときに、どのDHTネットワークに参加するのかを、
できれば自律的に解決できると素晴らしいです。

たぶん、Winnyの初期ノードリストと呼ばれるものが、
最低限クライアントにもサーバにも必要になりますね。

# re: 分散ハッシュテーブルが気になる 2007/12/12 11:04 凪瀬

初期ノードは静的サーバと合わせることで
ある程度管理することは可能ですけどね。
winnyのようなサービスならいざ知らず、

実務で使おうと思ったら、静的サーバから接続先を得る方法論になりそう。
でも、それって先に例にあげたEJBのネーミングサーバのようなものですから
ここが死ぬと背後が生きていても繋げなくなっちゃう。

# re: 分散ハッシュテーブルが気になる 2007/12/12 20:17 Piz&Yumina

DHTは部分検索も難しいですよね。
形態素解析するという手もありますが、何か効率が悪いような気が・・・。

#どう解決しようか悩んでいたり。

タイトル
名前
Url
コメント