github outage

GitHubの長時間停止からシステム更新の多い成長期スタートアップが学ぶこと

次の記事

日本最大のメッセージングアプリLineに子ども用のLine Kidsが加わる–製品多様化が加速

github-logo

ネットワーキング装置へのソフトウェアの不手際なアップデートによって、GitHubの過去最大級の停止が先週末に生じた。過去数週間では、この人気の高いソーシャルなプログラミングプラットホームの顧客がこのような大きな混乱を経験するのは、これで二度目である。

Githubの Mark Imbriacoブログの記事で説明しているところによると、12月22日の停止は、GitHubのネットワークベンダ(名前非公表)のすすめでアグリゲーションスイッチ(ポート分配用スイッチ集合体)のソフトウェアをアップデートしているときに起きた。そのアップデートは、この前11月に同社が経験した大規模停止へ導いた問題の、対策のはずだった。

さらにその後ファイルサーバにも障害が及び、問題は悪化した。そのほかの問題もからまって、同社はサービスをメンテナンスモードにせざるを得なくなった。サービスの混乱は約19時間続いた。その全時間停止していたわけではないが、長いレイテンシ(待たされ時間)やアクセスの喪失が長時間続いた。

データセンターのネットワークはさまざまなスイッチを使ってデータの流路を作っていることが多い。GitHubではアクセススイッチを使ってサーバに接続している。そしてそれらのスイッチが一対のアグリゲートスイッチに接続し、後者はMLAGと呼ばれる技術を使ってアクセススイッチからは一つのスイッチのように見えるようになり、それにより、リンクアグリゲーションや, スパニングツリーなど、単一のマスターデバイスを想定しているレイヤ2(OSIデータリンク層)のプロトコルに対応している。

ペア(一対)であることにより、エラーに対する冗長性が確保される。つまり、つねにバックアップがある、ということだ。しかしアップグレード時にタイミングエラーが生じ、その二つのスイッチが混乱した。大量の不正規動作が生じ、サービスは混乱に陥った。

Imbriacoは、こう説明している:

そして、そこから事態の悪化が始まった。スイッチの内の一つで、その上のエージェントが停止すると、ピアはタイムアウトまでの5秒間で再接続を試みる。それが成功せず、しかし両者のあいだのリンクは生きているなら、ほかのスイッチは今でも動いているがその状態が正しくない、と想定する。この状況では共有リソースを安全に獲得することはできないから、リンクアグリゲーションやスパニングツリーや、そのほかのレイヤ2プロトコルの目的のためのスタンドアロンのスイッチとして振る舞うという、デフォルト行動に戻る。

ネットワークスイッチの混乱によりファイルサーバもおかしくなった。複数の大きなサービスが動いているときの停止では、典型的にそんなことが起きる。混乱の中でマシンたちはコントロールの取得を試み、それによって問題がさらに悪化し、顧客の仕事の障害も長時間続く。

GitHubの停止は、サービスを安定的にスケールアウトする方法を探究している成長期のスタートアップやエンタプライズショップにとって教訓になる。しかしそれはまた、大規模な停止が起きたときにどんな不可避なことが起きるか、という貴重な知識もくれる。システムが不正な情報をリレーし始め、やがてその影響は雪崩(なだれ)のように顧客たちと彼らの重要な仕事に襲いかかる。

[原文へ]
(翻訳:iwatani(a.k.a. hiwa))