Meet at Idobata

21世紀の開発者のためのグループチャット Idobata の開発ブログです。

Idobata の 9/26 - 27 にかけてのサービス接続障害についてのご報告

こんにちは! Idobata 開発チームの hibariya です。 いつも Idobata をご利用いただき、ありがとうございます。

先週末 9/26 (土) から 9/27 (日) にかけて、Idobata では一時的にサービスに接続できなくなる障害が断続的に発生していました。 ユーザーのみなさまには大変ご迷惑をおかけしましたことを、深くお詫び申し上げます。

サービス接続障害が発生していた時期には ISUCON5 のオンライン予選が開催されていました。 Idobata は ISUCON5 の主催者と参加者との連絡用チャットとしてご利用いただいておりましたが、このたび十分なサービスを提供できませんでした。 参加者・関係者の方々にはご不便をおかけしていしまい、申し訳ありませんでした。

今回の反省を今後に生かしていくために、障害の経緯と今後の対策について、簡単にではありますがご説明いたします。

何があったか

9/26 (土)

  • 9:00 頃からサーバの負荷が増加し始め、9:30 頃に Idobata へアクセスしづらくなる。
  • 10:00 頃に現象を確認し、Web サーバのインスタンスを追加する作業を開始。
  • 10:30 頃にインスタンスの起動プロセスにエラーを確認。Engine Yard のサポートと連絡をとり、11:30 頃に追加完了。
  • 午後、API でアクセスが集中していた箇所を改善する対応を行なう。
  • 負荷の集中を軽減するため、2日目の Room へ事前に join していただけるよう ISUCON5 オンライン予選の主催者の方へ連絡。ご快諾いただく。

9/27 (日)

  • 9:30 頃に再び負荷が増加し始める。さらにインスタンスを追加。
  • 13:50 DB へのコネクション数が上限に達しつつあり、設定を変更するため10分ほどサービスを停止。
  • 18:00 から再びアクセスしづらい状況となる。
  • 18:30 頃から復旧。

何が原因だったか

今回の直接的な原因は次の通りです。

  • オンラインメンバーの多い Room への API アクセスが想定以上の負荷となり、さらにそこへアクセスが集中してしまった。
  • 結果的に API 全体へのすべてのリクエストに長い待ち時間が発生してしまった。

今回の対応

9/26 (土) のサービス接続障害を確認後、Web サーバインスタンスの追加を行ないました。 あわせて、不要なクエリ発行を抑え、集中しているアクセスを時間的に分散させる処理を追加しました。

それでも根本的な問題の解決には至らず、Room への join やアクセスが集中するタイミングでは稼働が不安定になる状態が続きました。

翌27日も ISUCON5 のオンライン予選2日目が開催されることから、引き続き Room への join が集中することが予想されたため、参加者の方々が事前に join できるよう ISUCON5 主催者の方へアナウンスをお願いしました。勝手なお願いも関わらず快く了承して頂きました。

今後の対策

今回のサービス接続障害の原因となった API へアクセスが集中しないよう、設計を改善します。 また、大規模なイベントでの利用が想定される場合には事前に備えます。

おわりに

2015年の夏以降、Idobata 開発チームは「より使い心地の良いサービス」を第一の目標として、主にパフォーマンスの改善に取り組み始めていました。その矢先にこのような事態になってしまったことを、重く受け止めています。

ふり返ってみたところ、当日は最善を尽くした対応とは言えませんでした。問題をその場で修正できなかったとしても、例えば一時的にその箇所を無効にすることでより重要な機能を提供することができたかもしれません。不慣れな対応で悔いの残る結果となりました。

ISUCON5 運営の @941 様には、当日お忙しいなかにもかかわらず快く相談に応じていただきました。この場をお借りして御礼申し上げます。 サービスが不安定な中、インターネット上でたくさんの激励のお言葉をいただき、ありがとうございました。 多くの方が思い通りにサービスを利用できなかったことと思います。申し訳ありませんでした。

本件ならびに Idobata について

何かご不明な点などありましたら、ぜひフィードバックフォームまたは hi@idobata.io までご連絡ください。 Idobata の状況については、今後もブログにて状況をお知らせいたします。 今後とも Idobata をよろしくお願いいたします。