この記事はトレタ Advent Calendar 2017の24日目の記事です。
サーバサイドエンジニアの中村です。 トレタのようなSaasを提供する企業に関わらず、サービスを提供する会社において障害対応フローを決めておくことは非常に重要です。
今回の記事では、トレタで障害が発生してしまったときにどのようなフローで対応し、全国の飲食店の方々への影響を最小限にしているかをまとめてみたいと思います。
トレタにおける障害とは?
お客様の業務影響があるものを指します。例を挙げると以下のような事象です。
- トレタにつながらない
- ウェブ予約ができない
- メールが送信できない/受信できない
- FAXが送信できない
- SMSが送信できない
アプリからAPIサーバにつながらないなどの重大な障害のときに、飲食店の最低限オペレーションを可能にするためにオフライン時にもアプリ側で予約情報を見れるようになっています。
障害検知の方法
以下の3パターンがあります。どのパターンにおいてもエンジニアが最初に調査し、障害かどうかを判断します。
監視サービスからslackへの通知
トレタでは以下の監視サービスを使っています
これらの監視サービスが異常を検知したら特定のslack channelに通知します。 また、トレタにアクセスできないなどの重大な異常を検知したら pagerduty からエンジニアに連絡がいくようになっています。
エンジニア以外の社員が障害に気づき、緊急でエンジニアを呼ぶ場合にはslackからpagerduty経由で連絡が行くような仕組みも作っています。
お客様からの問い合わせ
お客様からカスタマーサポートチームへのお問合わせの中で、バグと思われる挙動のお問合わせが来た場合はすぐにエンジニアが調査を行います。
調査の結果、障害だと判断された場合は障害対応フローに移ります。
社員がトレタの各種プロダクトを触っている際に気づく
自分たちで発見するパターンです。すぐにエンジニアに連絡し調査を行います。
障害対応フロー
トレタでは何度かの障害対応の経験を経て、障害対応フローを改善してきました。 現在は以下のフローになっています。
障害発生の事実確認
上述の障害検知からエンジニアに連絡が入り、調査を開始します。
エンジニアの調査と平行し、カスタマーサポートチームでも似たような現象のお問い合わせが来ていないかを調査します。
社内共有
エンジニアによって障害だと判定された場合はslackで社内全員に連絡をします。 このタイミングで報告するのは以下のような内容です。
- 障害の内容
- 例: Web予約が使えない、SMSが送信できない
- 障害時間
- 影響範囲
- 店舗数や日本の店舗か、海外の店舗かやWeb予約したユーザに影響があるかなど
- 影響するプロダクト
- トレタはiPadアプリの他にも店舗向けのWebアプリやユーザ向けのWeb予約、他幾つものオプションサービスを提供しています。プロダクト名を書くことで他のプロダクトには影響ないことを連絡します
- 例: iPadアプリ、Web予約など
- 復旧対応内容
- 誰が何時にhotfixをProduction Deployするか?
社内共有後にエンジニアはhotfixの準備を行います。並行してカスタマーサポートチームは該当店舗への連絡の準備、影響範囲によってはAPI連携を行っている外部の企業様の担当の方へも連絡を行います。
飲食店へご連絡する
障害の復旧が遅れる場合は、障害発生の第1報を飲食店・お客様に現在復旧対応中の旨をご連絡します。障害対応が既に完了している場合は、その旨をご連絡します。
連絡方法は
- トレタのサービスサイトに障害情報を掲載
- トレタアプリのお知らせ欄に掲載
- トレタにログインしているアカウントのメールアドレスにメールで送信
- カスタマーサポートチーム・担当セールスから直接電話でご連絡する
のような方法で早急にご連絡します。
復旧作業
- アプリケーションコードの修正の場合はhotfix deploy
- データの不整合の場合は本番オペレーションにてデータの不整合を復旧
- アクセス急増などによるパフォーマンス低下の場合はインフラの増強作業
を行います。無事復旧したら再度社内共有を行い、飲食店にご連絡を行います。
再発防止対策
トレタでは社内情報共有にesaを利用しています。その中の 障害情報
カテゴリに障害情報を記録しています。記録する内容は、
- 現象
- 復旧対応
- 障害時間
- 原因
- 影響範囲
- 再発防止策
を全て詳細に書いています。また、障害復旧の翌週の全社員が集まるホームルームでも障害報告を行い、再発防止に努めています。
まとめ
トレタではSaaSを提供する企業として障害を発生させないために日々全力を尽くしています。しかし、万が一障害が発生したときのために、対応フローを明確に決めておくことで、実際に障害が発生したときのお客様への影響を最小限にする工夫をしています。
今回はトレタの障害対応事例をまとめましたが、私個人としても、各企業の障害対応のフローに興味があるので、この記事を読んだ方々に自分の企業ではこんな風に対応しているというのを共有していただけたらと思います。