Skype障害 公式レポートを翻訳しました

おやくそく:
翻訳はyife が行いました。
yife は Skype と無関係のいちユーザですので、自分がよく知らない部分について誤訳があるかもしれません。
また、気づかないうちに原文が修正されているかもしれません。
気がつけば時間のあるときに反映しますが、疑わしいときは原文を参照してください


CIO update: Post-mortem on the Skype outage
CIOは語る:大規模障害のレポート


先週、Skypeネットワークに発生した大規模障害へのフォローアップとして、なにが原因だったのか、将来的にそれをどうやって回避するのかをここに記すことにする。Skypeネットワークに詳しくない人は、まずこの説明を読んでSkypeP2P(ピア・ツー・ピア)ネットワーク技術に基づいていることを理解してほしい。先週、Skype P2Pネットワークが不安定になり、重大な障害が発生した。この障害は2010年12月22日16時(グリニッジ標準時)から23日の16時ごろまで、おおよそ24時間続いた。

障害の原因は何だったのか?

12月22日の水曜日、オフラインチャット(Offline Instant Messaging)を担当するサーバー群が過負荷になった。その結果、一部のSkypeクライアントは、オフラインチャットからの反応が鈍くなった。特に、WindowsSkypeの特定のバージョン(バージョン 5.0.0152)では、高負荷サーバからの遅延応答を正しく処理することができず、クラッシュすることがあった。

これはWindowsの特定のバージョンだけの問題だった。以前のバージョン、つまり4.0系列を使っていたユーザや、Skype for Macユーザ、Skype for iPhoneユーザ、Skype on your TVユーザ、あるいはエンタープライズ向けSkype ConnectやSkype Managerなどのユーザにも関係のない話だった。少なくとも、問題のごく初期の時期には。

しかし、全世界のSkypeユーザのうち50%のユーザがその問題のバージョンを使用していて、そのうち約40%がクラッシュした。クラッシュしたユーザはSkypeスーパーノードのかなりの部分を担当していて、スーパーノード全体の約25-30%を担当していた。

たった20%のスカイプクライアントがダウンしただけで、これほどまでに大きな障害が発生したのか?

もちろん、スカイプのスタッフは迅速に過負荷になったサーバを切り離し、過剰なパケット負荷を破棄した。しかしその時には、すでにかなりの数のスーパーノードがダウンしていた。スーパーノードとなったクライアントは、ふつうのクライアントとは違って、P2Pネットワークで重要な役割を果たしている。それは例えるなら電話帳のようなもので、あなたが誰かに通話したりチャットしたりしようとすると、スーパーノードが相手の場所を教えてくれる。
一度スーパーノードがダウンすると、そのクライアントが再起動した後でも、ふたたびスーパーノードとして利用可能になるにはかなりの時間がかかる。その結果として、Skypeネットワークは通常の20-30%ほど少ないスーパーノードで運用せざるを得なくなった。そして、残されたスーパーノードには耐えきれないほどの負荷がかかってしまった。

他の70-80%のスーパーノードだけでは不十分だったのか?

一部のスーパーノードがダウンした結果、残されたスーパーノードには想定以上の負荷がかかることになった。まず、クラッシュしたWindowsクライアントをみなが再起動したため、P2Pネットワークに対して一斉に接続要求が飛び交いはじめた。おまけに、最初の障害が発生したのがグリニッジ標準時で18時というのも良くなかった。この時間は、全世界でもっともSkypeネットワークが使用される時間なのだ。これらが組み合わさった結果として、スーパーノードは通常の100倍近い要求をこなさなければならないことになった。

スーパーノードには、こういった爆発的な要求の増加からスーパーノード自身を保護する機能が備わっている。運用パラメータが通常の範囲を逸脱すると、スーパーノードをホスティングしているネットワークに迷惑をかけないために、一時的にスーパーノード機能を停止するのだ。だから、一度に100倍近い要求を受け取ったスーパーノードは、保護機能が働いて、スーパーノードとしての役割を放棄したはずだ。そして、残されたスーパーノードにはさらに多くの要求が送られることになり...数時間後、完全な、全世界的な障害が発生した。

残念なことだ。サーバの過負荷、Windows版クライアントのバグ、スーパーノードの現象...複数の要因が絡み合うことで発生したこの障害は、おおよそ24時間続くことになった。

どうやってSkypeスーパーノードを復旧させたのか?

Skypeを正常に戻すために、Skypeエンジニアリングチームおよび運用チームは、数百のSkypeクライアントをスーパーノード専用に改造して起動し、P2Pネットワークに接続した。僕らの間では、「メガ・スーパーノード」と呼んでいる。メガ・スーパーノードには、一時的にスーパーノードを肩代わりして、Skypeネットワークを正常に復旧させるのに十分なリソースが備わっていた。

水曜の夜(太平洋標準時)には、わずか15-20%のスカイプユーザのみが復旧している状態で、スーパーノードは大量に送りつけられる要求に喘いでいた。そこで、僕たちはメガ・スーパーノードをさらに増やすことにした。水曜の夜のあいだにおおよそP2Pネットワークは回復し、23日の早朝(太平洋標準時)ほとんどのユーザは正常にSkypeに接続できるようになった。

この障害をできるだけ早くなんとかするために、いつもはグループビデオ通話を担当しているサーバを、メガ・スーパーノードに転用した。借りてきたサーバは木曜日の夜から金曜日の朝までの間に元に戻すから、クリスマスまでにはいつも通りビデオ通話ができるはずだ。

数万ものスーパーノードがP2Pネットワークを支えてくれたおかげで、スーパーノードに送られる要求の量はだんだん落ち着いてきている。金曜日にはほとんどのメガ・スーパーノードを撤退させるけど、クリスマスと新年の通信を安定させるために、一部は残しておくつもりだ。

問題の再発を防ぐために、Skypeチームは何をしたらいいだろう。

僕たちは、信頼性がどれほど重要な機能か、よく理解している。新しい機能を追加するだけじゃなく、Skypeネットワークのセキュリティや通話品質を高めるために、これからも努力するつもりだ。

まず、Windows版クライアントのバグを修正するために、修正パッチを配布した。これは自動更新でも適用される。それから、将来的にバグが見つかっても迅速に直せるように、自動更新機能を強化することにした。これで、バグが原因の障害を減らすことができると思う。

次に、この障害はたくさんの大切なことを教えてくれた。どうやって障害を探知するのか、障害を回避する方法、障害後に素早く復旧する方法。手順を見直して、よりよいやり方を考えていくつもりだ。

それから、Windows バージョン5.0はリリース前に数ヶ月の時間と数十万人の人にテストしてもらったにもかかわらず、今回の障害を見抜けなかった。これからはテストの方法も見直して、P2Pネットワーク全体に関わるようなバグを発見できるようにする。

最後に、Skypeが成長するに従って、基幹システムを見直していくことにする。容量と信頼性の両方に、常に投資していくつもりだ。1年前に始まった増資プログラムのおかげで経済的には余裕があるし、2011年中にはエンタープライズ向け課金システムも稼働し始めるはずだ。毎日数百万人の人が利用しているサービスを支えるために、継続して基幹システムに投資していく。


僕たちは、ユーザのみんなのサポートに心から感謝している。みんながどれほどSkypeを必要としてくれているかも知っている。この障害の間に、どれほどたくさんの通信を届けられずに、みんなをがっかりさせてしまったのか、知っている。
僕たちは大切な教訓を学んだ。この教訓を、ソフトウェアの改良、信頼性、将来発生するかもしれない障害からの回復、ユーザのみんなとのコミュニケーションのために役立てたいと思う。
本当にありがとう。