[P2P]WikipediaのP2P適用について
新年明けましておめでとうございます。1月にはVoIP Conferenceを開くなど今年も各種イベントを開催予定ですので今年も是非ご期待下さい。
さて本年最初のエントリーはP2Pについてです。
□WikipediaとP2P
Wikipediaはご存知の方も多いと思うが、世界の有志によって作成されている大規模なインターネット上の百科事典である。最近ではWikipediaの知名度も上がりアクセスも急増している。それに伴いサーバや回線の増強が必要とされている。もちろん増強に対しては資金が必要でWikipediaでは寄付のページを開設している。
サーバ=クライアント方式では負荷が集中した際にはサーバ等の増強が必要である。そこでP2Pの出番である。ユーザあるいはボランティアがWikipedia用のP2Pソフトをインストールし、負荷を分散させてしまおうということが今回の目的である。アクセス数が多くてもユーザ数あるいはボランティア数が多くなれば低コストで充分に対処できる。
なお今後P2P上のWikipediaをP2Pediaと呼ぶことにする。P2PediaはDHT(分散ハッシュテーブル)を使えれば構築できるだろう。もちろん分散ストレージの技術も必須となる。
□案1:P2Pネットワーク参加者のみP2Pediaを提供
一つの案は、ユーザが必ずP2Pネットワークに参加する事である。ユーザ数が増えればそれに応じてP2Pソフトインストール数が増えアクセス増加に充分耐えうるはずだ。しかしこれには欠点がある。一般ユーザがP2Pediaを利用する上で専用P2Pソフトをインストールするには大きな抵抗あるからだ。
□案2:ボランティアがP2Pネットワーク参加し、一般ユーザはブラウザでP2Pediaにアクセスする
そこで一般ユーザは引き続きブラウザでP2Pediaにアクセスすることが考えられる。P2Pediaを支援したいボランティアの人は専用P2Pソフトをインストールする。専用P2Pソフトアクティブ数を増強する目的として、P2Pedia項目の追記・修正・削除をできるには専用P2Pソフトをインストールする必要があると条件をつけると良いだろう。
案2の実行案として、専用P2Pソフトは一般ユーザにP2Pediaを表示させるためにWebサーバをいれることを想定している。実行案についてもう少し詳しく考えてみよう。今、「P2P」というP2Pedia項目が表示されているとする。ここで「P2P」項目のページには「DHT」や「Winny」などの項目のリンクが張られているとする。
□解決したい課題:専用P2Pソフトはどのようにリンク処理を実行するばよいだろうか?
案A:項目のWebページソースを読み、リンク部分のハッシュ値を計算する。その後該当ハッシュ値を格納しているIPアドレスを検索し、該当リンク部分のWebページを書き換える
項目を一般ユーザに表示する前にWebページソースを解析する。このときリンク部分が「Winny」と書かれていたとしよう。するとハッシュ関数Hash()においてHash(Winny)を計算する。ハッシュ値を使って「Winny」の項目を格納しているノードのIPアドレス等を専用P2Pソフトを用いてDHTネットワーク(P2Pネットワークの一種)に質問する。帰ってきたIPアドレス(10.1.1.1としよう)を使ってリンク情報を修正する。
例えば、<a href="localhost">Winny</a>というソースを<a href="10.1.1.1">Winny</a>と書き換える。
案Aの場合、一般ユーザにWebページを表示させる前に、リンク先のページを格納しているノードをP2Pネットワークで検索する必要がある。そのため、Webページを表示する際に時間がかかる場合がある。
案B:リダイレクトを利用する
HTTPの機能としてリダイレクトがある。リダイレクトとは、簡単に言うブラウザとサーバが連携することにより、リンク先とは本来違うサイトにリンクが飛ぶ機能である。
HTTPリダイレクト
リダイレクトを利用する事で、リンク先のページを格納しているノードをP2Pネットワークで確認しないままWebページを一般ユーザに表示することができる。ただし一般ユーザがリンク先がアクセスした場合は該当サーバ、つまり専用P2PソフトはDHTネットワークでリンク先Webページが格納しているノードを検索し、その後リダイレクト処理を行う。
案Aと案Bを比較すると、Web表示時間が高速な案Bの方が望ましいだろう。
今回はP2Pネットワークを利用してWebサーバの負荷分散を行うことを検討した。
このような技術を使えばP2Pをうまく使いながらWebサーバ以外のサーバの負荷分散を行う事が可能になるだろう。
| 固定リンク
「P2P」カテゴリの記事
- WebRTCを実現するためにSTUNだけでなくTURNも必要な理由(2015.01.08)
- [P2P]P2Pストリーミングのサーベイ文書について(2014.11.09)
- Winnyの開発者、金子 勇氏の急逝を悼んで(2013.07.07)
- 「分散ハッシュシステムでのNAT超えの考察」に対する質問について(2012.12.16)
- [P2P]Websocketでブラウザ間P2P通信は実現できるか?(その2)(2011.11.20)
この記事へのコメントは終了しました。
コメント