1.7 ロールバックインシデントレポート
2016年11月3日、Wade Anderson(@waderyan_)
昨夜11月2日水曜日、Visual Studio Code の 1.7 リリースを 1.6.1 にロールバックしました。1.7 にアップグレードしていた場合、1.6.1 に更新するように促されたはずです。今朝、私たちは緩和策を実装して新しいリリースを作成したため、現在は VS Code 1.7.1 を使用しているはずです。どのバージョンを使用しているかわからない場合は、[バージョン情報](https://vscode.dokyumento.jp/docs/supporting/faq#_how-do-i-find-what-version-of-vs-code-i-am-using)を [バージョン情報] ダイアログで確認できます。
これらの更新によってご迷惑をおかけしたことをお詫び申し上げます。発生した事象と、VS Code を快適にご利用いただくために弊社が講じている措置について説明させていただきます。
自動型取得 (Automatic Type Acquisition)
VS Code 1.7 で、「自動型取得 (Automatic Type Acquisition)」(ATA)という機能をリリースしました。ATA の目的は、JavaScript の IntelliSense エクスペリエンスを向上させることです。
VS Code は TypeScript 言語サービスを使用して JavaScript の IntelliSense を提供します。TypeScript 言語サービスは、型宣言ファイル(型付けファイルとも呼ばれます)と呼ばれる特殊なファイルを使用します。これらは @types スコープで npm に公開されています。以前は、`package.json` の依存関係の IntelliSense を有効にするには、型宣言ファイルを手動でインストールする必要がありました。これは簡単な作業ではないため、TypeScript チームと協力して ATA を開発しました。
ATA が有効になっている TypeScript 言語サービスは、`package.json` ファイルを監視し、すべての依存関係の型宣言ファイルをファイルシステムのキャッシュに自動的にインストールします。また、既知のクライアント側ライブラリへの参照を見つけた場合も同様に行います。
この機能を Insiders ビルドで2週間有効にした後、ユーザーにとって有用であることが証明されたと感じ、VS Code 1.7 ですべてのユーザーに ATA を提供することを決定しました。
何が起きたのか?
11月2日午後1時57分(太平洋標準時)頃 VS Code 1.7 をリリースしました。チューリッヒのチームは就寝し、レドモンドのチームは 1.8 の計画を開始しました。
11月2日午後4時12分(太平洋標準時)頃 npm から連絡がありました。クライアントが `@types` スコープ下の存在しないパッケージにアクセスしようとしたため、レジストリ活動が急増していることを確認していました。ピーク時には、これらのリクエストは全トラフィックの約10%を占め(興味深い事実:VS Code ユーザーは、npm がインドから受けるリクエストとほぼ同じ量のリクエストを送信していました)、一時的にサービスが圧倒されました。
npm の開発運用チームは、意図しない DDoS を緩和するために迅速に行動し、問題は VS Code 1.7 のリリースに起因すると診断しました。主な問題は、以下のアルゴリズムによって引き起こされた、存在しないパッケージへのリクエストの殺到でした
- TypeScript 言語サーバーは、`package.json` にリストされているモジュールをそのアプリケーションキャッシュと照合します。
- アプリケーションキャッシュにない各モジュールについて、TypeScript 言語サーバーは npm に `@types/{module}` をリクエストします。
- 存在するモジュールはアプリケーションキャッシュに追加されます。
- 新しい型宣言ファイルが `@types` スコープに追加されることを想定し、存在しないモジュールはプロジェクトまたはフォルダーが開かれるたびにリクエストされ、npm は 404 で応答します。
`@types` スコープに存在しないモジュールの数を考えると、大量の 404 が一時的に npm の可用性に影響を与えました。
11月2日午後5時45分(太平洋標準時)頃 適切な状況を把握し、npm の要請により、1.7 のリリースを取り下げ、ユーザーを VS Code 1.6.1 に戻しました。ウェブサイトに判明した事実を更新し、次の最適な手順を分析するために全力を尽くしました。
今後の展望
VS Code 1.7.1 のインストールが促されたはずです。このリリースでは ATA は無効になっていますが、その他の 1.7 の機能はすべて利用可能です。今後数日の間に、TypeScript チームと協力して ATA の満足のいく修正(昨夜、この PR で作業が開始されました)に取り組み、この更新が利用可能になったらお知らせします。
Wade Anderson, VS Codeチームメンバー
@waderyan_