STAFF BLOG
スタッフブログ
仕事でやばい失敗をした話②
ブログをご覧の皆さまこんにちは。エンジニアの小川です。
以前に書いた「仕事でやばい失敗をした話①」に予告していた失敗談第2弾を書いていきたいと思います。
某大手SNSプラットフォームをダウンさせた話
これは約10年前のこと。ボクがとある開発会社でケータイアプリ開発等をしていた時の話です。
世の中はまだフィーチャーフォン(いわゆるガラケー)を使っている人が多く、またSNSプラットフォーム(mixiやfacebook、mobageやGreeなど)上で展開するサービスが出だした SNSアプリ 黎明期〜全盛期 の時代。ボクがその時働いていた会社で初めてSNSプラットフォームを使用したWEBアプリの開発の仕事が入ってきたのでした。
しかし社内ではそれまでフィーチャーフォンのネイティブアプリやハード上で動作するアプリを主に開発しており、WEBサイト/アプリ開発経験が全くの0では無かったですが、SNSプラットフォームを使用したWEBアプリ開発は初めてで、社内に一切ノウハウはありませんでした。
とはいえ先に書いた様に、これはまだSNSプラットフォームで展開するサービスといったものが黎明期を少し越えた辺りの頃の事だった為、世の中でもまだほとんどノウハウは無かったのではないでしょうか。
ボクはそのプロジェクトは担当していなかったのですが、アプリがある程度できあがり、後はプラットフォームから課されているサービスのリリース条件であるアクセス負荷条件を満たしているかどうかのテストを残すのみといった時に、開発部長からお呼びがかかります。
部長からは負荷テストツールを渡され、それを使ってサーバに対して負荷試験を行って欲しいといとの事。社内で誰もやったことが無い為使い方が分からず、またリリース期日もギリギリで、1から調べている時間が開発チームに無い為、「よしなにやってくれ」とぶん投げをされたのでした(エンジニアあるある)。
その時のテスト内容は(確か)「100万アクセスを受けてもエラーを起こさず数秒以内にレスポンスを返せるか」というもの。100万アクセスって大変な数なんですけれども、当時そのプラットフォーム上で展開する他サービスでも、登録会員数が100万人超のサービスがざらにあり、またこれらのユーザがアプリ内で連打する様な事も多々ある為、これぐらい耐えられないとサービスとしてやっていけないのでしょうね。
ボクはツールの使い方を調べ、また「リリース条件」の資料にツールの設定例も記載されていた事からそれなりに使える様になりましたので、開発チームにテスト用のURLを送ってもらい、それじゃテストしますねーよろしくーと、そのまま負荷テストを開始します。
テストツールを1回実行すると、WEBアプリに100万回のアクセスを実行します。1度実行したものの、あまり芳しい結果でなかった為、起きている問題等連絡して再度実行。それでもやっぱり問題が起こり、再実行。再実行、再実行、再実行...
そうやって何度も再実行を行っていた時のこと。
試験を行っていた部屋に飛び込んできたのは、こちらの社内に滞在されていた発注元の担当の方。
なんだかわからないままにツールを緊急停止。どうしたんですか?と聞いたら
「今プラットフォーム会社から電話がかかってきて、
『お前の所から1千万以上のアクセスが来てサーバが不安定になった。おかげでSNS全体に影響が出てる。今すぐ止めろ。』
って凄い怒ってる!どういうこと!?」
どういうこと、とボクに聞かれましても...ボクは開発にノータッチでしたのでさっぱり分からず、そもそも中身がどういう仕組みなのかすらその時は知りませんでした。
怒りを通り越して少し呆然とした様子の担当の方を尻目に、開発部長の所へダッシュで向かって話した所、原因が判明。
SNSプラットフォーム上で展開するWEBアプリでは、ユーザ名やID、その他いろいろな情報をプラットフォームのAPIを使用して取得するのですが、これを有効にしたまま負荷テストを行った為、負荷ツールが1回アクセスする毎にプラットフォーム側に数回のアクセスを実行していたのです。
その上でボクは1回の稼働で100万アクセスするテストを10回以上は行っていたものですから、短時間数千万アクセスをプラットフォームの本番サーバに行っていたことになります。これは酷い。
そのからは全てのAPIを実行している部分を無効化して再度負荷テストを行い、それからも色々ありましたが何とか正式リリースにこぎつけたのでした。
後日談
リリースはできましたけれど、その様な具合ですからそれ以外に問題が起こらないわけもなく。
引き続き色々な不具合や問題が発生し、開発担当チームはかなり悪戦苦闘していました。ただ当時一番大変だったのはクライアントから来られていた担当の方だったのではないかと思います。
またその後、落ち着いた担当の方から「君に怒っても仕方が無かった」と直接謝られました(負荷試験の為だけにボクを呼び出した事はご存知だった為)。しかし一番悪いのはどう考えてもこちらの会社でしたので本当に申し訳ない所でした...
それから少しして。
今度はまた別のプラットフォームでの開発、まぁこちらはぶっちゃけると mixi なのですけれども、 mixiプラットフォーム上で提供するWEBアプリ開発の案件の話が出てきまして、その際にこちらの営業の方がmixi の社内の方に「以前にこんな事があって〜」と上の話をしたのだそうです。
そうしたら、そのmixiの担当の方に
「ウチのシステム 落とせるものなら落としてみて下さい(笑)」
と言われたとの事。営業の人と2人で凄すぎません?と言いあっていました。
だからといって「よっしゃ!じゃあ落としたろ!」とは流石にならなかったのですけれど、自分たちの技術にそれだけの自信を持って言える、というのはかなり凄いと思います。ボクなら「・・・ウチには止めてくださいね(切実)」と言っていたかな...
最後に
以上、今回はボクの失敗というより当時の会社全体の失敗の話でした。
しかし今振り返ってみて、あの時ボクに何ができたろうか?と考えてみると、もしあの時SNSアプリ開発の知識が少しでもあれば気付けたかもしれないですし、また与えられた"負荷試験"という目先のタスクのことだけを考えず、その先や周りの事について頭を巡らせていれば変わったかもしれません。
もちろんそれらは全てタラレバではありますが、しかしこの失敗はいい経験になったかと思います。
念の為ですが、この話はサーバが不安定になった最初のSNSプラットフォームが凄くない、という話ではないです。まだ開始もしていないサービスから短時間に数千万もアクセスが来るなんて怒られて当たり前の話です。
その上で やっぱりmixi って凄い (今回の結論)
当前ですがこの記事を読んで「じゃあ自分が落としてやる!」といった行動は絶対にやらない様にお願い致します
なお3回目の「仕事でやばい失敗をした話」は現在予定していません。
もしあったらそれはアクセルユニバースで起こした事になるので、この先もう書くことが無いことを祈ります。