Slack、1月の大規模障害の原因を説明。「AWS Transit Gateway」がトラフィックの急上昇に対応できず、AWSはアルゴリズムを見直すと

2021年2月10日

Slackは、日本時間1月4日の深夜から1月5日かけて発生した大規模障害についての詳細説明をブログ「Slack’s Outage on January 4th 2021」で行いました。

fig

AWSのネットワーク基盤の一部が飽和していた

1月4日、サービス内部のエラー率上昇によって始まったSlackの障害は、太平洋標準時の午前6時ごろからはSlackのWeb層の負荷が高まり、パケットロスを発生しはじめるなど徐々に深刻化。7時頃にはついにサービス停止にまで発展してしまいます。

負荷の解消のためにWeb層をスケールアウトさせるなどの対処を行い、なんとかサービスが復旧し始めたころに、AWSから障害の引き金となった現象についての報告が次のようになされたとのこと。

Slack’s Outage on January 4th 2021」から引用します。

By the time Slack had recovered, engineers at AWS had found the trigger for our problems: Part of our AWS networking infrastructure had indeed become saturated and was dropping packets.

Slackが復旧する頃には、AWSのエンジニアたちが障害を引き起こした事象を発見していた。AWSのネットワーク基盤の一部が飽和しており、パケットをドロップしていたのだ。

SlackはAWSの上で構築されています。しかもAWS上で複数のVPC(Virtual Private Clouds)を用いており、それぞれのVPCはAWSのマネージドサービスであるAWS Transit Gatewayを通じて相互に接続されていました。

Slackを構成するVPCを相互に接続するAWS Transit Gatewayが飽和していたというのです。

AWSのエンジニアがマニュアル操作で対応

AWSのエンジニアはこれに関するアラートを受け取り、手動操作でキャパシティを増やして対応しました。

Our own serving systems scale quickly to meet these kinds of peaks in demand (and have always done so successfully after the holidays in previous years). However, our TGWs did not scale fast enough. During the incident, AWS engineers were alerted to our packet drops by their own internal monitoring, and increased our TGW capacity manually. By 10:40am PST that change had rolled out across all Availability Zones and our network returned to normal, as did our error rates and latency.

私たち自身のサービスはピークに合わせて迅速にスケールしていた(これまでも連休後の対応はいつもうまくいっていた)。しかし、私たちが利用していたAWS Transit Gatewayが十分にスケールしてくれなかったのだ。
この事象が起きたときに、AWSのエンジニアはこのパケットドロップに関するアラートを内部モニタリングシステムから受け取とり、手動でキャパシティを増やした。太平洋標準時10時40分までにこの変更がすべてのアベイラビリティゾーンに適用され、ネットワークは通常の状態に戻り、エラーレートとレイテンシも戻った。

AWS Transit Gatewayのアルゴリズムを見直す

AWSは今回のインシデントを受けて、AWS Transit Gatewayのアルゴリズムを見直すとのこと。

AWS assures us that they are reviewing the TGW scaling algorithms for large packet-per-second increases as part of their post-incident process. We’ve also set ourselves a reminder (a Slack reminder, of course) to request a preemptive upscaling of our TGWs at the end of the next holiday season.

AWSは、秒あたりのパケットが急激に増加する際のAWS Transit Gatewayのスケーリングアルゴリズムの見直しを、インシデント発生後のプロセスの一環として行っていると確約した。また、私たちが次のホリデーシーズンの終わりにはAWS Transit Gatewayのアップスケーリングをあらかじめリクエストするようにリマインダー(もちろんSlackのリマインダー)を設定した。

Slackの今回の障害は、Slack自身ではコントロールできないAWSのマネージドサービスにおける問題がきっかけでした。これは(規模は違えども)一般のAWSユーザーにおいても何らかの形で起こりうることでしょう。

そうなればユーザー側にできることはそれほど多くありません。できるだけ迅速に問題を発見し解決を図るため、きめこまかなシステムのモニタリングと問題の切り分けなどが重要になるのではないでしょうか。

あわせて読みたい

AWS クラウド クラウド障害 Slack




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本