contentWebサービス(AICEVOTE)がバズってサーバーと高校生開発者に起きたことと反省点Webサービス高校生AICEVOTE私たちのサービス”AICEVOTE”がQiitaの記事からバズったので時系列を追ってサーバーに起きたことと開発者の身に降りかかったことを書いていきたいと思います感謝まずはみなさん。私たちのサービスを高く評価してくださり、本当にありがとうございました。全部で10万人の方にサイトを訪問してもらいました。本当に感謝しかないです。たくさんのコメントもいただきました。自分たちがやっているこのAICEVOTEというサービスに自信を持つことができました。本当に嬉しく思うと同時に、驚きを隠せないでいます。ある意味、波乱万丈の一ヶ月となりました。そこで今回の記事では、何件かリクエストもあったため、この僕たちにとって嵐のような数日間を当時の心情も含めながら、回想していきたいと思います。嵐の前の静けさこの日のお昼過ぎに記事を公開しました。記事はこちらになります。年末から、年始に記事を発表しようとは思っていましたが、こんなに早く出すとは、思っていませんでした。今まで、3つほどの記事を書いていましたが、1年間で作り上げた自分たちのサービスを発表する今回の記事は正直とても緊張し、不安でした。ボロクソに言われたらどうしよう。このようなネガティブな気持ちが錯綜し、自分たちが全く知らない世界に足を踏み入れるような心もちでした。拡散しようということになり、twitterとinstagramで記事の共有をしました。安堵と虚しさしかし、この日は少しの反響はあったものの限定的であり、少し安心するとともに、少し残念に思いました。累計ユーザー数:8000人到達うなぎ上りこの日私は、携帯の通知音で起きました。携帯を見るとチームのメンバーや知人から無数の不在着信がきていました。何かおかしいと思ってqiitaを開くと通知が99+になっていました。記事がバズり、サイト訪問者が急増しているというのです。この日の朝までにユーザー数は8000人を超え、サーバーがもう耐えきれない状況になっていました。その間も、qiitaの記事をは見るたびにどんどん伸びており、はてなブックマークのトップにも記事が掲載されました。そのこともあり、ユーザー数はうなぎ上りで増えていきました。この頃ある異変に気付きました。サービスの利用者の増減にCPU負荷も比例するはずなのにCPU負荷は常に増加し続けているのです!そこで、私にWeb関係の知識を教えてくださった先輩にことの事情を説明したところ、いくらAWSの無料プランでも、こんなに早くサーバーは落ちない。サーバーのログを確認してみな。ログを確認しても、知識不足だった私たちはどこがおかしいか見つけることはできませんでした。途方にくれた私たちは、奇怪な行動をしました。それは、サーバーを一回落とし、再起動。私たちはawsの無料利用枠のmicroインスタンスをlimitedの状態で利用していました。利用者が増えてCPUクレジットがなくなりそうになるたびに再起動によって補充されるCPUクレジットに頼るというものでした。年齢制限からgoogleアドセンスの認定も降りないままにサーバーをunlimitedにすることが非常に怖かったからです。私たちはこの時直感でこのサーバー側の処理にに明らかな問題があると悟りました。今思えば、本当に馬鹿でしたね。何より必死だったのです。途中までは、それでなんとか保てていたのですが、限界がきてしまいました。何度再起動しても、CPUクレジットが回復しないのです。体の限界もきていました。無理だと悟った私たちは、明日また、立ち上げようと約束し、眠りにつきました。頼む!サーバー!息してくれ!この日が私は私用があったため、一旦パソコンと離れなくてはなりませんでした。サーバー管理をメンバーに任せ、家を出ましたが、不安で、不安で仕方なかったのを覚えています。私が用事をしている時も、携帯は通知音で悲鳴をあげていました。なんと、サーバーが起動もできないし、落とすこともできないというのです。決定打となったのは、Gigazineさんに記事が掲載されたことです。これには、本当にびっくりしました。嬉しさとともに、サービスを100%の状態で利用していただけないことに深くもどかしさを感じました。同時期に、ねとらぼさんからも記事の依頼を受けており、21時までにサーバーを必ず再起させる必要がありました。私用を早めに切り上げた私は、チームとミーティングをし、AWSのサーバーをlargeにすることに決めました。お金はかかりますが、未来への投資だと思い、思い切って変えました。すると、CPUクレジットはみるみる回復し、サーバーの問題とはおさらば!と思っていましたが、また、前回と同じようにCPU負荷はユーザーの増減に比例せず単調増加し、みるみるうちにCPUクレジットが下がっていき、月にいくらかかる計算になるのか計算不能でした。体も心も限界だった私は、胃腸炎のような症状が出ていて、寝てしましました。重大なミスこの日の深夜、チームのメンバーは徹夜でコードを全て見直し、どこにサーバーの問題があるのかを探しました。そこで何気ない会話から、nodejsのタイマー(setinterval)と非同期通信(socket.io)に問題があるのではないかということになりました。2000);});この場合socketのconnectionが増えるほどnode内でタイマーが新しく生成されてより高頻度に計算されていく仕組みになってしまっていました。これを知らなかったためでした。2000);}こうすることで固有のタイマーで全ての計算処理を可能にしました。非常に初歩的なミスで、今思えばなぜ気付かなかったのかという話ですが、一人しかテストユーザーをいれていなかった開発環境では気付かなかったのと、初期に書いた部分であまり確認しなかったことなどだと思います。この変更によりサーバーの負荷は利用者数に比例するようになりました。気づいてなかったらと思うと寒気がします。累計ユーザー数:60000人サーバー安定へその日は腹痛で目が覚めました。私たちの記事が、ねとらぼさん、スマートニュースさんとyahooニュースさんに掲載されたというのです。それぞれの記事はこちらになります。ねとらぼさん、、yahooニュースさんスマートニュースさん私はそのことを聞いて、またサイトが落ちているだろうと思いましたが、AICEVOTEを見ると正常に動作していたため本当に安心しました。この日からは、徐々にユーザー数も安定していきました。反省点これが大まかな内容になります。私たちは、今回の一件でたくさん失敗し、様々なことを学びました。これから私たちのようなことをする人や将来の自分たちに向けて、反省点をあげました。多くのユーザーを失ってしまいました。サーバーを大きくしてから勝負に挑むべきだったと思います。心の準備をしておけばよかった急激にサービスが伸びた、というのはとても嬉しいことですが、高校生の私たちにとっては心労になりました。自分が書いたサイトが10万人の人に使ってもらっていると思うと、夜も眠れなくなりました。(まだ慣れていません)自分のサービスを世界に公開するのはこういうことなんだと身を持って体感させられました。お金を準備をしておけばよかった私たちはほぼ半強制的にサーバーを強化せざるをえなくなりました。そこで必要となったのはお金です。私たちは、事件が起きる前にコードの問題に気づきましたが、中にはそれに気づかず、何百万円も使ってしまったという話も聞きました。お金の準備はしておいたほうがよかったです。DBが帰って来なかったこれは多分一番反省すべき点です。私たちは、途中で、サーバーが再起不能になり、サーバーを移転するということをしました。その時に、DBを引っ張ってくることができず、今までの努力や、サイトに来て頂いた人の記録が全て飛んでしまいました。現在は旧dbにはアクセス可能なのですが現在のdbとの競合があるのでmergeできていません。次からは、DBにきちんとバックアップをして臨みたいと思います。これから本当にありがたいことに、多くの方が我々のサービスに協力して頂けることになりました。公表できないのですが、近々発表したいと思います。Twitterのフォローお願いします。サービスのレポートや、マーケティングに関してはnoteで発信していきたいと思います。upLoginユーザーは見つかりませんでした。