P2Pという言葉を考える
はじめに
P2Pはクライアントサーバ(C/S)との比較で語られることが多いが、 C/Sには語義的曖昧性があり、文脈によって意味が違うのでややこしくなっている。 あるときは「C/Sはもう古い。これからはP2Pだ」と、 C/SとP2Pが別物のように語られ、 あるときは「P2Pのノードはクライアントにもサーバにもなる」と、 P2PがC/Sの一種のようにも語られる。
ここではC/Sの語義を大雑把に3つに分け、 それぞれと対比させてP2Pを考えてみる。
この文章はP2Pの次に来るものの補足であり、 P2P の用語:ピアとノードの違いは?と あーなるほどね。これじゃ話が噛み合わなくなるわけだを もとにしている。
「いわゆるC/S」とP2P
これは多くの人がイメージするサーバ像に近いのではないだろうか。
以下P2P の用語:ピアとノードの違いは?からの引用
クライアント/サーバー方式のシステムには中心となるサーバーが存在します。 サーバーはデータの配信、蓄積、 それから検索といったサービスを一手に引き受けて、 クライアントに提供しています。 つまりサーバーとは文字通り、サービスを提供するコンピュータのことであり、 クライアントは「サービスの依頼人。要求者」なのです。
全ての要素を満たすわけではないだろうが、こういう傾向がある。
- システムの中心にはサーバがあり、 多数のクライアントがサービスを受ける。
- 専用の機材や回線が用意されている。
- 故障やトラブルで停止するのは避けなければならない。
「いわゆるC/S」とP2Pを比較すると、こんな感じか。
- システムに参加するコンピュータが(ほぼ)対等の関係にある。
- 参加するコンピュータは普通のPCであり、 同じPCで文章も書くしゲームもする。
- 一部のコンピュータが不調でも影響がないように設計しなければならない。
「自宅サーバ的C/S」とP2P
P2Pの説明に「1つのノードがクライアントにもサーバにもなる」という言い方をする。
以下P2P の用語:ピアとノードの違いは?からの引用
一方 P2P では、サービスを提供する側、受ける側という役割は決まっておらず、 主にシステムを構成しているのはお互いに対等な関係のピアです。 各ピアは状況に応じて、データを提供することもあれば、取得することもあります。 つまり各ピアの役割は固定的ではなく、 状況に応じてサーバーの役目もクライアントの役目も両方果たします。
では、1つのPCでWebサーバを動かしながら、 別のウェブサイトを見ていたとしたら、それはP2Pなのか、 という頓知のような問いがある。 ここではその状態のことを「自宅サーバ的C/S」と呼び、P2Pとの比較を考える。
「自宅サーバ的C/S」とP2Pの違いは実装にある。 Webサーバとブラウザは別のソフトウェアだが、 P2Pソフトは分離することが難しい。 決して分離できないわけではないから、最終的には主観的な判断になるが。
以前はこのことを指して「P2Pはプロトコルである」と表現した。 「バッドノウハウとグッドラッパー」と表現した方が適切かもしれない。
「辞書的的C/S」とP2P
C/Sは辞書的には単に役割の分担でしかない。 100万人を50台のサーバで捌こうが、 1人のためのかな漢字変換サーバだろうがC/Sである。
以下Cプログラミング診断室/奇っ怪な条件/クライアント・サーバモデルからの引用
もっと分かりやすく言えば、 「一人でやっていた仕事を二人でやるのが、 クライアント(王様)/サーバ(召使)モデル」です。
(中略)
2者は別々のソフトになるので、 互いに別のコンピュータで動かすこともできます。
「辞書的なC/S」と比較すると、P2Pも「辞書的なC/S」の一種であるといえる。
まとめ
- C/Sには多義性があるが、それぞれにP2Pと比較した。
- 「C/Sはもう古い。これからはP2Pだ」という表現は 「いわゆるC/S」を指している。
- 「使いやすいサーバソフトはP2Pを駆逐する」という表現は 「自宅サーバ的C/S」を指している。
- 「P2Pのノードはクライアントにもサーバにもなる」という表現は 「辞書的なC/S」を指している。