ISUCON7予選、学生枠で挑みました。
こんにちは。nchaaaです。
(突然「nchaaa」という名前を使っていますが、ISUCONで使っていた名前です)
10月22日、「仕事ください」としてISUCON7に参戦しました。
結論から言います。
惨敗でした。
何もできなかった。
とっくに血も涙も捨てていたつもりでしたが、あそこまで何もできなかったことに対しては、正直、言葉では表現できない何かがあります。
完全にぼくの采配ミスです。
メンバーのdiskと福地には本当申し訳ない気持ちでいっぱいです。
前置きはこのぐらいにして、ブログを書くところまでがISUCONなので、8時間を振り返っていきたいと思います。
はじめに
まずはじめに、主催・運営のLINEさんと941さん、出題チームのKLabさん、サーバ提供のさくらインターネットさん、お疲れ様でした。そしてありがとうございました。
今回色々なトラブルがあって、ISUCONの運営って本当に大変なんだなと感じました。
また、エンジニアコミュニティの素晴らしさについても肌身をもって感じることができました。
そして、ぼくら「仕事ください」に作業場所を提供してくださったTopothesiaさん、台風にもかかわらず店舗をあけていただき本当にありがとうございます。
競技開始
今回、サーバーのSSH接続はパスワード認証でした。
普段は公開鍵認証でsshしていたので、チーム内で多少の混乱はありました。
2回ログインをミスると10分間のban喰らう設定です。
サーバは3台構成。
2つがweb、1つがDBでした。
CPUが1コアだったので、webサーバの負荷分散っていう意図は予想していましたが、サーバを壊すかもしれないというビビリから1つで勝負することに。
(今思えば完全に判断ミスですね)
使用言語はRuby、Rackサーバはpumaでした。
過去のISUCONでもunicornが使われていたので、多少戸惑いが。
ここからぼくがインフラ、diskと福地がアプリケーションに分かれてやっとチューニングに入ります。
チューニング前にやったこと
まずはぼくが
・インフラ周りの整備
・必要なパッケージやツール、監視環境の準備
・各ログの配置
・confファイルのバックアップ作成
・その他諸々など
をやっている間に、diskと福地が
・アプリケーションコードの熟読と解析
・ブラウザでの挙動チェック
・ローカル環境の構築
を行います。
「仕事ください」チームは、いつもこの後に2人が把握したアプリケーションの仕様や構成をぼくと共有します。
一通り終わったところで試しにbench走行。
Rubyは初期スコア6000~6500くらいです。
benchはレベルに応じて負荷が徐々に上昇するような設定でした。
チューニング開始
本格的にチューニングに入ったのは15時前くらいだったと思います。
ローカル環境で動かしている2人のプロファイラと照らし合わせながら、nginxのaccess.logをalpで解析してボトルネックを特定。
N+1問題の解決は2人に指示し、ぼくはインフラを触ります。
〜〜ここから魔の6時間〜〜
あれやこれやと試しても全くスコアがあがらずCPUも上がってこない。
変更点一切なしで、続けて2回bench走らせるとスコアが3000~4000点くらい上下する始末。
何かがおかしいと思って原因探っていると、あらもうお外は真っ暗に。
20時くらいでしたwww
※ここら辺はほとんど記憶がありません.....
重大なミスに気づく
結局ぼくもインフラの問題が解決できなかったので、アプリケーションに入ることに。
気になるクエリがいくつかあったので、DBの中身を見てみると頭が真っ白に。
DBに画像ファイルがつっこんでありました。
pixivさんのprivate-isuでやったあれです。
ファイル書き出し問題。
すぐにぼくのprivate-isuのコードを共有して、「コピペでいいから」って2人に投げました。
が、時すでに遅し。
最終スコアは、初期スコアよりも下がって4500点くらいでした。
試しに、最後まで振り回されたpumaのプロセスをkillしてもなぜか生き返ってる。
puma不死身説。
このとき3人とも投げやりになって発狂していましたww
反省
今回の1番の敗因は、ぼくがインフラに執着しすぎたこと。
それによってアプリケーションにほとんどタッチできなかったこと。
DBの中身の確認があまりにも遅すぎたこと。
これに尽きると思います。
もちろん、チーム内でのコミュニケーション不足もあった。
画像がDBに突っ込まれてるのに気づいてた2人も、相当テンパっていたので無理ないかもしれない。
特に、20時以降にコードだけ渡されてファイル書き出し問題任された2人は辛かったろうな。
完全に采配ミスですね。
こうして不完全燃焼に終わったISUCON7予選でした。
そして人権も失いました。
ISUCONを通じて今思うこと
まずはお師匠さんである、さぼさん。
何もないところから「エンジニアで就職したい!」って相談した半年前。
macを買うところから始まった、このISUCON就活プロジェクト。
正直、師匠がさぼさんじゃなかったらここまでやれてないと思います。
ただただ、不甲斐ない結果でごめんなさい。
本戦出場という目標は達成できなかったけど、一応半年間でそれなりに成長できたのかなとは実感しています。
本当にありがとうございました。
そして「仕事ください」のメンバー。
「人権を失うかもしれないよ?」
そう言ってでも乗っかってくれたマサ、福地、diskには本当に感謝してます。
各々モチベーションの維持とか、バイトで忙しいとか色々あったけど、このメンバーで半年間やってきて楽しかったし、またいつの日か「仕事ください」を再結成してISUCONに挑みたいと、個人的には思っています。
半年間お疲れ様でした。
応援してくださった方々。
何かのイベントやインターンに行っては、
「ISUCONに出ます!!」
そんな無謀な宣言をしてでも応援してくれた方が、ありがたいことに多くいました。
ですが、今回こんな情けない結果になってしまい本当に申し訳ないです。
最後にぼく個人のお話。
(※あくまで個人的な意見です)
エンジニアになるための題材として、「ISUCON」というものは非常に良いと思っている。
web、app、DBの全部を勉強しなければならない上に、webの世界や仕組みなどの低レイヤーの部分も体系的に学べるので。
特に学生は、ISUCONに参加しない理由がないと思っています。
そしてここ沖縄で、「ISUCON就活」なるものが、エンジニアを目指す学生に対して広く認知されてほしい。
ギークハウス沖縄、CODEBASEができてから環境は整いつつあると思うので、ぜひ後輩にはチャレンジしてほしい。
今後
安案件でもアシスタントでもいいので、まずはエンジニアとしてがっつりお金を稼ごうと思います。
学校の方はSOTSURON(卒論)のみとなりましたので、最後の学生生活を存分に楽しんでいきます。
願わくば、GOUCON(合コン)とか。
就活の方は、実はまだ続行中です。どなたか雇ってください。
元職人でもあるので力はあります。
最後に
非常に拙いブログでしたが、半年間読んでくれた方々、ありがとうございました。
ISUCONは終わってしまいましたが、このブログを通してまた何か発信していきたい所存ではあります。
特にエンジニアを目指す学生・後輩にとって、何かしら役立てられるようなものにしていきたい。
そのためにも、自身がさらにレベルアップしてまたここに帰ってきます。
ではでは、今日はこの辺で。