isucon7学生枠で予選通過してしまった

はじめに

@nakario_jp と @aokabit との3人で組んだチーム名 百万円ドリブン で スコア48,950、全体順位76位、学生9位で予選を通過してしまいました。

通過できたのはメンバー二人のおかげです。 Golangのプロ @nakario_jp がGoをチューニングし、 @aokabit先生がmysqlとnginxをチューニングしていたなか、 僕はよしなに環境構築とかベンチ周辺やログ取った後は踊っているみたいな分担だったので…。

社会人と学生でかなりの力の強さの違いを実感しました。 しかし我々のようなisuconに触れる前までサーバーサイドチューニングをしたことがなかった 初心者でも学生枠なら通過出来る可能性が本当にあったんだなあということで、 これからisuconをやってみたいと思う学生のために、備忘録的に記事を書こうと思います。

したこと

isucon講習会に参加した

isucon.net とりあえずメンバー全員右も左も分からなかったので講習会に参加することにしました。 完全抽選制で僕だけ受かったので知見を得に行ってきました。 このイベントはisuconのやり方を完全に教えてくれる上に、 交通費・懇親会費まで全て支給してくれる最高のイベントなので是非行きましょう。 sshの仕方が分からない人すらもサポートしていたのでどんな初心者でも迷わず行きましょう。

ついでに東京に行けたので東京で @joisino とキンプラを見ました。

twitter.com ちょうどこの日から応援上映の4DX版が公開されたということで一緒に見たのですが、 応援上映に加え4DXで没入感が半端なく、脳の処理速度を超える体験が出来たので最高でした。 isucon講習会に行った後は是非応援上映も行きましょう。

isucon3,4,5 + pixiv社内isucon を練習した

やはり過去問は大事です。 幸いなことに各種 ansible、各種 ami、各種 VagrantFile が整備されているので簡単に行なえます。

isucon3,4

全員が個別のVagrant環境で練習しました。 本家のmasterブランチのものは上手く動作しなかったので別の人のforkしたものを使用しました。 プロビジョニングにはやばい時間がかかることが分かってよかったです。 初めてということで学ぶことがいっぱいで、ボーダーたけーとか言ってました。

isucon5

AWSを使ってみました(isucon5 は実はGCPだったのですが…)。 適当にコミュニティAMIを探したら、isucon5q-ubuntu16.04 みたいな名前のそれっぽいのがあったので やってみたところisucon5はubuntu15.04だったのが原因で上手く動作しないみたいな事が発覚して騙されてしまいました。

仕方がないのでubuntu15.04のインスタンスを立て、一からプロビジョニングをするということをしていたところ、 10時半練習開始のはずが気づいたら16時みたいなことになっていました…。 やはりプロビジョニングには時間がかかりますね…。

サークルの部室でこれをやっていたところ、別の部員に「こんなに環境構築に時間が掛かるなんてこのチームは雑魚では…」みたいに 思われていたようであちゃーという感じでした。

この回は、ファイル権限とか気にせずに管理出来るようにしようぜと

sudo chmod -R 777 / 

を打ってしまったところで全てが終了してしまったのが印象に残っています。

(具体的に言うと sudoコマンドが777になり、sudoの危機管理機能が働いてsudoを打てなくなり、全てが終わります。)

pixivisucon

isucon6は講習会でやっていたので、pixiv社内isuconを練習としてやりました。 今回は公式amiが提供されており、すぐにAWSで開始することが出来ました。 このisuconはpixivらしく画像の配信がネックになっている問題という設定でした。 そういう意味では今回のisucon7もこれと似た問題設定だったので直近にpixivisuconを出来たのは かなり勝因に寄与していると思います。

この回は、git管理のメンバーの意思疎通が取れておらず、 あるメンバーは3層に分けた管理(最奥のウェブアプリのみremoteあり)を想定していたのに、 あるメンバーは1層管理(remoteあり)を想定しており、 気づいたら3層のうち2層が同じremoteを指しているという状況になっていたのが印象的でした。 (具体的に言うと、.gitのobjectファイルがおかしくなり、力技で解決は出来るのでなんとかなったりはします。)

├─ .git/
│  ├─ .git/  ───┐ 
│  │  ├─ .git/  ───:: 同じ remote 
│  │  ├─ ...

まとめ

  • 過去問をやったことで本番でいい感じに出来た
  • goのプロがいたのでgoのオンメモリチューニングなどが爆速に出来た
  • sudo chmod -R 777 /深層.gitなどを事前に経験したので本番で失敗しなかった

最後にはチームメンバーでサイゼで叫びました