2006年09月23日

NTTさんの大規模障害

いまさらですが、落ち着いたようですので、このタイミングでエントリーします。



●経緯
・NTTさん発表資料 「ひかり電話」の通話状況について
・9/19 NTT東日本のひかり電話,連休明けの通話量増でつながりにくい状態
・9/19 NTT東のひかり電話でトラブル,通話集中でつながりにくく
・9/20 NTT東のひかり電話がまたつながりにくく,システム再起動のため
・9/21 【続報】NTT東がひかり電話の規制を解除,明日22日の規制の可能性は否定せず
・09/22 【続報】NTT東のひかり電話,「22日午前現在は安定中」,障害原因は不明のまま



●一般的な原因と対策
・一般的な原因

・SIPプロトコルのINVITE(通話開始)は、応答が得られるまで、0.5秒、1秒、2秒・・・と32秒まで、7回再送を行います。(そのあと、あきらめます。)
・「つながりにくくなる」とは「処理が遅くなる」であり、それは「0.5秒以内に応答できなくなる」ということを示していて、一回のINVITEが、(つながりにくさが増加してくごとに)2,3回とどんどんと指数関数的に増えていくのです。
・さらに「つながりにくく(処理が遅くなる)」なると、「INVITEの再送回数も増える」ため、どんどんと負のスパイラル(輻輳状態)に落ちていきます。
・最後に、サーバが処理しきれなくなり、ダウンします。

というところが、基本的なパターンです。(他で落ちているパターンですと、「通話開始(INVITE)」ではなく、「登録(REGSITER)」というパターンがあります。こちらの方が、落ちるパターンとしては、一般的です。(なぜ、一般的かは後述します。))

・一般的な対策

・サーバの数を増やす→物量作戦(w
・限界になる前に、Transactionレベルで「エラーを返す」→クライアントトランザクションを作らなくてよいので処理が軽くなる。
・再送を開始する秒数を増やす。→0.5秒ではなく、2秒にするなど。
・最大再総回数を減らす。→32秒までではなく、8秒までにするなど。
(再送値は、RFC的には「MUST」ではなく、基準値として提示されているだけ。)

というところです。

・一般的なシナリオ
現実的に、起こる一般的なシナリオは、

・停電後の復旧

です。この場合、電力の回復と同時に、
・登録処理(REGISTER)が、一斉にSIPサーバに押し寄せるため

上記のようなパターンに陥ります。

こちらのパターンのキモは、

・ユーザの操作ではなく、IP電話機が自動で行う点

にあります。すなわち、通話開始(INVITE)であれば、いずれ発信者(人間)が諦めてくれますが、自動で行う登録(REGISTER)は、IP電話機(機械)が諦めてくれないので、深刻な状態に陥ります。



●NTTさんの場合の原因と対策
・NTTさんの場合の原因

・連休明けで通話が通常よりも多かった(約3倍)
・それにともない、ソフトのバグを顕在化した

と、言っていっております。

・NTTさんの場合の対策
対策として、「発着信規制」で、サーバにかかる負荷を軽減させたと言うことのようです。
なぜ、そういえるかというと、「発着信規制」なので、

・ある閾値を超えた発信開始(INVITE)に対して、Transactionレベルで「エラーを返す」

という動作になるかと思います。
そうすると、サーバ側では、
・INVITEの認証をしなくてよい
・Transactionレベルで「エラーを返す」場合は、クライアントトランザクションが生成されないため処理が軽い

と、処理が劇的と言うくらい軽くなります。

以上をまとめると、

・発信開始(INVITE)に対する、再送スパイラル(輻輳)が起きた
・そのトリガーが、通常の3倍の発信開始(INVITE)により、バグが顕在化したため

というところのようです。

そのバグの勝手な予想としては、通話がトリガーと言うことであったので、

・INVITEとCANCELのクロス処理にバグがあったのではないか?

というところです。
CANCELが、キモいのは、下記のような制限や動作が定義されているためです。
・応答を受け取っていない場合、CANCELを送信してはいけない
・2xx応答以上を受け取っている場合は、CANCELは無効となる
・CANCELは、HopByHopと呼ばれる動作をする

これらの動作により、本来、32秒後に停止するはずのINVITEのタイマーが、リセットされ続けて、輻輳状態に陥ってしまったという可能性もあるのではないかと思います。

追記(2006/09/25)

原因の詳細がわかったということです。ただ、読んでも具体的な内容はわかりませんね。「メモリのゴミ」とかいってますが、何のことだかわからないですし。
ですが、これで一応決着ということのようです。

・9/25 【続報】NTT東のひかり電話,トラブル原因の詳細が判明
・9/25 ひかり電話はなぜ止まったのか?

Creative Commons License
This weblog is licensed under a Creative Commons License.