BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース クラウド固有の複雑さ: VS Online停止の振り返り

クラウド固有の複雑さ: VS Online停止の振り返り

原文(投稿日:2014/08/28)へのリンク

8月14日、Visual Studio Online (VSO)は14:00 UTC (10:00 EST)から19:30 UTC (15:30 EST)までの5.5時間の停止を経験した。根本的な原因の解消にはさらに4日を要し、次の日曜日(8月17日)に終息した。

正確な原因はまだ特定できていないが、MicrosoftのBrian Harry氏によると、不必要なトラフィックが生成されたため、少なくともライセンスチェックの一部が不適切に使用不能になり、停止が発生した。混乱を加速させたの(および考えられる原因)は、“…レイテンシの急上昇とService Busメッセージの配信失敗”である。

Service Busを介して通信するShared Platform Services (SPS)のコアデータベースは、データベースの更新で過負荷になった。それは、非常に圧倒して、リクエストをキューし始め、最終的に呼び出し元のブロックにつながった。SPSは、認証とライセンスの検証の両方に使われているため、システムから簡単に取り除くわけにはいかなかった。Harry氏は、安定性を得るためにライセンスチェックを見合わせ、ライセンス要求から認証要求を分離する十分な粒度にするのが賢明であると見ている。

現時点でHarry氏は停止は、個々では比較的無害だが、組み合わさることで連鎖的に問題が組み上がるいくつかのバグによって発生したと考えている。Harry氏は主な原因となる4つのバグを特定した:

  1. TFSからSPSの呼び出しで、ネガティブフィードバックループでSPSからTFSへより多くのメッセージを生成して、誤ってTFSプロパティを更新していた
  2. 401処理のバグは余計なキャッシュフラッシュを生成していた
  3. Azureポータル拡張サービスのバグが401エラーを5秒ごとにリトライしていた(バグ#2の影響で増大)
  4. 無効化イベントが複数回再送されていた

2つの二次的なバグが、キャッシュ無効化と追加のSQL要求を生成する不要なプロパティ更新による問題に寄与した。

Harry氏は上記の特定のバグは、不必要な抽象化が原因でチームが直面した概念的な問題であると感じている。過度に抽象化に頼ることで、開発者はプロジェクト全体のアーキテクチャを見失ってしまい、その結果、彼らの変更がシステムの他の部分に影響を与えることを予見することができなかった。 あるビルドから次へのリソース消費の変更を検出する自動化されたリグレッションテストの欠如と、プアなコードが持つインパクトを十分に意識することなくシステムに入れるてしまうトラップが組み合わされてしまった。Harry氏は、テスト環境とコントロールされた本番状況の両方でチームのテストを強化していく必要性を強調した。

Harry氏は、チームがプロセスにCircuit Breaker Patternを追加しているとフォローアップコメントに追加した。 コメント投稿者であるJohn Smith氏はMSDNで説明されているCircuit Breaker PatternだけでなくNetflixによって開発され、オープンソース化されているHystrixプロジェクトにもリンクを張った。

この記事に星をつける

おすすめ度
スタイル

BT