2021年2月26日に発生したサービス障害について

February 25, 2021
執筆者
Twilio
Twilion

incident-20210226-JP

この記事は英語版ブログ記事の抄訳です。

お客様各位、

Twilioでは、皆さまがお客様との間で確立するエンゲージメントを継続的に高度化していくこと、そのような施策を弊社としてご支援することについて、弊社の重要なミッションと捉えております。日本時間2021年2月26日(金)に発生した障害は、このミッションの追求において反省すべき点がございました。今回の障害で、皆さまの事業運営、また弊社プラットフォームを利用したお客様とのコミュニケーションに支障をきたしたことで、多大なるご迷惑をお掛けしたことをお詫び申し上げます。

弊社の掲げる価値の1つに、“お客様が履く靴を自ら履く”という項目があります。サービス断となったすべてのお客様のご事情に思いを寄せるとともに、改めてお詫び申し上げます。また、提供サービスの障害耐性をより高め、信頼性の高いものにすること改めてコミットをいたします。

本記事では、今回障害における発生事象と今後の対応について記載させていただきます。

発生事象

2021年2月26日(金)に、Twilioプラットフォームを構成する内部サービスの1つがサービスの中断が発生し、広範囲のTwilio製品へ影響が及びました。事象は日本時間2月26日(金)の午後10:00に始まり、最終的に2月27日(土)の午前00:30に収束するまで2.5時間を要しました。障害の診断と暫定対処として弊社が想定している目標時間を超えるものでした。

障害影響の及んだ時間帯において、通常よりも長い処理遅延、API呼び出しにおけるエラー、ウェブ管理画面へアクセスできない、SMS等のメッセージが配信されない、などの事象が発生しました。今回のサービス断は、システムによって検出され、検出後1分以内にはサポート担当エンジニアチームに対して通知が行われましたが、ステータスページ上は事象開始後25分が経過した時点まで更新されず、お客様にはご心配をおかけする結果となりました。

根本原因

今回サービス断の根本原因は、“feature-enablement” と呼ばれる重要なサービス(多くのTwilio製品の機能を有効する機能)が高負荷状態となったためです。“feature-enablement” に依存する多のサービスがこれに対処できず、自身のサービス側の障害を引き起こし、これがお客様視点からの障害事象(例: 長い処理遅延時間、API処理エラー)となって表面化しました。

障害対処

暫定対処として、該当サーバの容量を増強、キャッシュ機構を至急追加し、“feature-enablement” サービスに対する負荷軽減を図りましたが、この暫定対処に予想よりも長い時間を要しました。その背景は“feature-enablement” サービスに依存するサービスの多くが再試行を継続的に繰り返したことで、標準的に提供されるサーバ容量の増分が、今回事象の中で増え続けた負荷に対して十分に追随できなかった点が挙げられます。

適用した暫定対処は引き続きシステム内に実装されており、同様事象の再発に対する防御策としての役割を果たします。これと並行して、追加の恒久対処およびプロセス向上を図ります。

今後について

障害発生後の振り返りにおいて、同様事象の再発防止に向けた施策は以下の通りです。

  • サービスがその規模拡張を自動で行う仕組みを、よりアグレッシブに振る舞う(=余裕をもって前倒しで強めに行う)ように変更し、トラフィックの急増に対処するようにします。
  • “feature-enablement” サービスへの依存度を軽減すると共に、同サービスにクライアント側キャッシュ機構を設け、その機構が既定で動作するよう設定します。
  • サービスのリクエストがタイムアウトするまでの時間を短縮すると共に、サービスのAPI構造を規模拡大しやすい形にリファクタリング*します。
  • サービスのフェイルオーバー**機構を再構成し、障害発生時の耐障害性を高めます 。
  • リクエスト処理が一般的に軽減するよう、サーバーのキャッシュ機構に関する方法論についてリファクタリング*を行います。

    (* リファクタリング=内部構造の整理・改善)

    (** フェイルオーバー=障害が発生していないサーバに処理を“横流し”する動作)

並行して、サービス断についてお客様に効果的に状況報告を行えるよう、サービス運用に係るツールや手順を見直しを行います。これには、ステータスサイト“status.twilio.com”を通したお知らせも含まれており、最新の情報を正確にご理解いただけるようプロセス改善を行います。

現在、今回の障害に対するレビュープロセスを引き続き行っており、同様事象が他のサービスで発生した場合に備え、エンジニアリング部門を横断して以下の対処を開始しました。

  • 弊社サービスのプログラムコードを監査し、同様の危険因子がありそうな箇所を特定すると共に、適切な対処を行います。
  • 障害がクライアントサービス側に伝搬する際に、より影響が最小限に留められる共通アーキテクチャ面からのベストプラクティス***を制定します。
  • サービスの配備展開に関するツール、待機中のサポート部門向けのガイドブックについて改善を行い、Twilioプラットフォーム上のサービスすべてについて、そのサーバ容量の増強等の管理手順見直し(例: 手動プロセスの排除)を図ります。これにより、障害回復に要する時間の短縮を図ります。

    (*** ベストプラクティス=これを行うと良いだろうと認められる実践例をまとめ施行すること)

振り返りのプロセスを進める中で追加で特定される改善施策については、その主要なものを皆さまに引き続き情報共有いたします。

おわりに

皆さまがお客様と効果的な顧客エンゲージメントを図れるよう適切なコミュニケーション基盤をご提供することについては、引き続き弊社の重要なミッションと捉えております。今回の障害については誠に遺憾ではございましたが、関連のプロセスを引き続き改善し、事象に呼応するスピードを速め、情報共有の透明性を高め、皆さまの顧客サポートやサービスに対する期待の高さにお応えできるよう襟を正していくための貴重な機会と捉えております。

改めてまして御社および御社のお客様に対してご迷惑をおかけしましたこと、深くお詫び申し上げます。また、引き続きTwilioをご利用いただけますよう、何卒よろしくお願い申し上げます。