ISUCON8予選、イイカンジになりませんでした@沖縄
経緯など
さぼさんid:saboyutakaを始めとする昨年のISUCON沖縄勢の方々に続く形で始まった今年のISUCON(就活)プロジェクトが終わりを迎えました。
僕らのチームSushiSobaRamenは5月から毎週木曜日に3時間ほどの勉強会を開いてきました。
全くの初心者からWebの仕組みを理解して、過去問演習のための環境構築をして、初歩的なチューニングをできるようになるまではとても長い道のりでした。
初めは何をしていいのか本当に全く分からなかったです。
さぼさんが作ってくれていた「ISUCON初動やることリスト」や「ISUCONパフォーマンス・チューニング」に沿って、約半年学んできました。
卒業研究が忙しくて、勉強会に参加する気が起きなかったこともありましたが予選に絶対に出ると強めに決めていたので何とかやってこれました。
チームを組んでくれた2人ありがとう。
ISUCONの感想
当日やったこと
アプリ担当だったので、構成を確認したあとはブラウザから今回のお題アプリTorb(チケット予約システム)を触りつつRuby実装のコードを読んでいました。
ミドルウェアは想定していたnginxではなくh2oで、データ・ベースもMySQL5系ではなくMariaDB5.5という過去問や模擬との違いに戸惑いつつもセオリー通りに計測してボトルネックを解消していこうとしていました。
しかし、実際に僕が出来たことはほんの僅かなことだけでした。
/geteventや/geteventsや/adminが重いのは分かっていましたが。
ローカル環境の構築に手間取ってしまい、結局色々諦めました。そのせいで、rack-lineprofilerで計測していく作戦も失敗。
DBにインデックスを貼ってもベンチマーカーを走らせるたびに削除されてしまったり、pumaの設定ファイルを書いてみたもののあまり効果がなかったりという感じでした。
id:isoflabonがインフラ担当として、3台構成を色々と試行錯誤してくれていました。torb1だけで動いていてmtorb2とtorb3は初めは何もしていないサーバーです。
これを、
・torb1: デフォルトの状態(Webapp+DB, h2o)
・torb2:
・torb3:
↓↓↓↓↓↓↓↓↓↓↓
・torb1: デフォルトの状態(Webapp+DB, h2o)
・torb2: Webapp+nginx
・torb3: DB
このようにしようとしていたようです。
ログやブラウザから確認した限りでは、問題なく動いていたのですがURLが変わってしまっていてベンチマーカーから怒られるのを解決できなかったみたいです。
練習というか勉強会では一度も複数台構成をやったことがなかったのに、本番で何とかこなしていたid:isoflabonはさすがでした。
後日わかったこと
あとでなんかかく
次の初心者チャレンジャーへのアドバイス
頑張って少しでもデキる人にチームに入ってもらいましょう
当たり前ですが、環境構築や勉強の過程でいくつもの困難に出会います。プログラミング、Web初心者だけではかなり厳しいです。
コードリーディングを優先しましょう
僕らはコードリーディングは各自でやっていて、Web全体の仕組みやパフォーマンスチューニングやインフラ関係のことに割と時間を使っていました。
正直これは失敗でした。
本番で3人のうち2人がアプリ担当をするのは定石なので、一旦過去問でローカルの環境(dockerとかVagrantfile使えば簡単です)と本番環境を作れたら、ガンガンコードを読んで、プログラミングでチューニングする方法を試していくべきです。
公開されているブログやリポジトリから勉強しましょう
こんな感じで、リポジトリを公開している強いチームのコードも読んで勉強に役立てましょう。
www.wantedly.com