特集
» 2005年05月30日 19時48分 公開

特集:Skypeは企業IP電話を変えるか:PART2 Skype、その通信の仕組み (2/4)

[岩田真一,N+I NETWORK Guide]

●初期接続先としての役割

 P2Pのシステムでは、エンドユーザーのノードがシステムへ参加するのに際して、1つ問題がある。それは最初の接続先となるノードを知ることだ。クライアント/サーバ型システムの場合は、クライアントはあらかじめ知っているサーバへ接続すればよいが、そのような固定サーバのないP2Pでは工夫が必要だ。

 Skypeの場合、一般ノードは内向きパケットを常に受け入れるスーパーノードへ接続することでシステムへ参加する。初期接続するスーパーノード情報の入手方法は、Skypeのバージョンによって異なるようだが、基本的にはSkypeサーバから入手する。または、いくつかのスーパーノードの情報はあらかじめ知っているようだ(「ブートストラップ・スーパーノード」という)。一度システムに参加してしまえばほかのスーパーノードの情報も知ることができるので、それらのスーパーノード情報はローカルに情報をキャッシュ(*3)し、次回からの接続に使われる。

●大きな電話帳「Global Index」

 Skypeにおけるスーパーノードのもう1つの重要な役割は、「電話帳」としての機能だ。電話帳は、電話やチャットをする場合に不可欠である。スーパーノード同士はお互いに協調することによって、巨大な電話帳を形成している。

 詳しくは次項で解説するが、スーパーノード群はGlobal Indexと呼ばれるユーザー(ノード)検索のためのクラスタを形成し、一般ノードからの問い合わせに答えるようになっている(図3)。

図3 図3●スーパーノードの役割 一般ノードの初期接続先やユーザー接続情報の提供など、さまざまな役割を担う

●P2Pによる冗長性

 スーパーノードはSkypeシステム内に複数存在しており、基本的にはどのスーパーノードに接続しても一般ノードは同じサービスが受けられる。たとえば、初期接続先として選択したスーパーノードが何らかの理由でダウンしてしまったとしても、ノードのローカル内にキャッシュされている別のスーパーノードを選択することで、ノードは何ら変わりなく今まで通り使用を続けることができる。

 一方、クライアント/サーバ型システムでは、サーバがダウン(*4)すると接続しているクライアントすべてに影響が出る。ここがP2P型とクライアント/サーバ型のシステムとの大きな違いで、P2Pのフォールトトレランス(*5)性やロバストネスなどと表現される。

ユーザー検索の仕組み

 次に、スーパーノード群が提供する巨大な電話帳「Global Index」の仕組みについて解説しよう。

●P2P通信には相手への接続情報が必要

 Skypeによる音声通話では、ノード(PC)同士が直接通信を行うため、相手ノードへの接続情報が必要になる。Skypeでの通話でも、通常の電話の電話帳にあたる機能がある。ただし、Skypeの全ユーザーをカバーするためには、その規模は膨大でなければならず、かつスピーディな検索が要求される。ここでは、通話開始者がどのように通話相手とその接続情報を発見するのか、その仕組みを探ってみる。

●スーパーノードに対するユーザー検索要求

 ここで再び登場するのが、スーパーノードである。スーパーノードには「最初の接続先」という役割のほかに、巨大な電話帳の形成という重要な機能がある。前述のとおり、一般ノードは、任意に選んだある1つのスーパーノードと接続することによって、システムに参加する。そしてその接続は終始保たれる。したがって、最初の接続先に選ばれたスーパーノードのことを、その一般ノードから見た「プライマリ・スーパーノード」と呼ぶことにする。

 一般ノードにとって、プライマリ・スーパーノードとの接続は、常に維持される唯一の接続である。そしてユーザー検索の要求もプライマリ・スーパーノードに対して発行される。

●Global Indexの動作

 検索要求を受け取ったプライマリ・スーパーノードは、自分がそのユーザーの情報を持っていればすぐに結果を返すが、そうでない場合は別のスーパーノードを一般ノードに紹介する。そして、紹介されたノードにも情報がない場合は、さらに別のスーパーノードが紹介される。ノードは紹介を受けたスーパーノードに対し次々に問い合わせを行い、最終的に目的の情報を得る。

 このように、各スーパーノードはユーザーの情報をあるルールに基づいて分散して持っており、それらがお互いに連携し合うことで、全体として大きな電話帳を形成しているのだ(図4)。この機構はGlobal Indexと呼ばれ、Skypeのすべてのユーザー情報やノード情報をカバーし、かつ高速な検索を実現している(*6)。Global Indexによって、接続しているスーパーノードによらず、すべてのノードが全ユーザー情報を知ることができる。

図4 図4●Global Indexの動作 スーパーノード同士が連携し合って一種のクラスタを形成し、ノードの問い合わせに答える

●ユーザー数に対するスケーラビリティ

 Skypeのシステムがユーザー情報を分散して持っているのは、ユーザー数増加に対するスケーラビリティを保つためだ。現時点のSkypeの登録ユーザー数は約2600万人である。日本だけでも80万人が登録している。

 SkypeのGlobal Indexは、このようなユーザー数増加に対して、また急激なトラフィックの増加に対してもスケーラビリティを発揮している。スーパーノード方式による検索は、ファイル交換ソフトのKaZaAで共有されている全ファイルの検索でも使われているため、現時点のSkypeユーザー数程度ではびくともしないといったところだろう。

Skype通話の実際

 さて、Global Indexから通話相手の接続情報を入手し、通話の準備が整った。それでは、P2Pによる実際の通話がどのように行われているのかを見ていこう。


*3 最大100個のスーパーノード情報がキャッシュされる。

*4 実際にはフォールバック・サーバを設置することで冗長化するのが通常だが、スケーラビリティを保証するものではない。

*5 システムに障害が発生したときに、被害を最小限に抑えて正常な稼働を継続できる能力のこと。耐障害性、故障許容力などと訳されることもある。


*6 明示的なユーザー情報の検索では、過去72時間以内にログインしたユーザーの検索のみが保証されている。

Copyright(C) 2010 SOFTBANK Creative Inc. All Right Reserved.

注目のテーマ