言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

「創発」と P2P

今、創発 :isbn:4797321075 を読んでるので、それと上の問題を絡めて書きます。この「創発」という本は、小さな構造が沢山集まると大きな構造が生まれる場合があるが、その大きな構造はどこから生まれるのだろうかという話です。

例えばアリンコの行動を見てると、アリンコは自分の周りの匂いにだけ反応した限定した動きをしているだけなのに、全体として社会を作っている。特に、アリンコの寿命は一年足らずなのに、何十年か続くアリンコの巣は一つの生命のように青年期や成熟期、老年期があって、活動のしかたが違うというあたりが面白いです。

P2P プログラムというのはサーバを持たない関係上、ネットワークを維持可能な情報を全てのノードが持って、協調して動かないといけないわけですが、実際にプログラムにはネットワーク全体の動きを書くわけではないのです。ネットワーク全体の動きを想像しながら一つのノードの動きを決めていくという、いわばアリンコとは逆の設計をするのです。

これは特殊なように見えますが、インターネット自体が巨大な P2P のように分散管理をしているわけで、ルーティングの仕組みとか考えた人は偉いなあ。たとえウェブがクラサバでも、そのサーバにたどり着くまでには勝手に動くノードを彷徨って行くわけですから。

そういったプログラム達を綺麗に作る為に、レイヤが使われています。一匹のアリンコが巣の形を知らないように、ネットワークのそれぞれのレイヤは独立している。ここで、P2P プログラムについても、どんなメッセージをどこに送るかとそんな事じゃなくて、全体として振舞う形を俯瞰して記述できるような、そんな言葉が欲しいなあと思うわけです。