isucon5 (事前準備2)
isucon5 に向けて、isucon4 のお題で予行練習。
isuconの説明は、以下のsiteでどうぞ。
簡単にいうと、インフラ&プログラマ運動会。
あらかじめisucon4の問題みたり、ヒントみたりしないでがんばった。
まあ、予習とかしない、いいわけだけど。
isucon5の2週間前の週末。
メンバの1人の会社の会議室を借りて、1日予行練習。
朝10:00から、夜18:00までの予定で、本番通りやる。
本番との違いは、お題がisucon4の予選問題だということ。
1. 集合
通常、一番の難関。
時間通りに指定の場所に集まるのが、「不可能」な人が多い中、今回の3人はちゃんと出来るコ。なんの心配もない!
と、思いきや、会議室を借りた会社のメンバが、前日にマシントラブルで深夜作業。
朝10:00開始は間に合ったけど、突発事故の怖さを思い知る。
オンプレミスのお守りは、大変だ。。
2. setup
GCE
isucon4 は、awsだったけど、isuconはGCE(Google Compute Engine)。
全員、初心者。いちおう、当時までにinstanceの上げ下げくらいはやってはいた。
isucon4のレギュレーションでは、vCPUx4のマシンを利用することになっていたが、けちって vCPUx2 & 7.5Gmem のinstance n1-standard-2 で練習することに。
distribution
isucon5は、distributionが、ubuntu。
自分はubuntu大好きなので、いいが他の2人の経験は、redhat系のみ。
大変よくできているdebian系のconfigに慣れてないで大変そうだけど、そこはがんばれ。そのままdebian系に流れてしまえ−。
Andible
パッケージの構成管理は、Andible を採用
http://www.ansible.com
なれないdpkgのパッケージ名に戸惑いつつ、事前にAnsible の設定ファイルを作ってくれた担当Cに感謝しつつ、dstatやtmuxのpackageの追加を要求。
といえ、Ansible のcommandもよくわからない。そこそこ時間をとられて午前中が終了。
3. 課題の理解
課題の理解は大事。仕様もわからずsource codeみちゃだめ。
当たり前のことだけど、大事。
isucon 銀行のweb画面で遊びつつ、仕様の理解に努める。
mysqlのデータベースは、いたってシンプル。
予選は、こんな簡単なアプリなんだ!まちがい1
4. 改良案
ruby 高速化
リテラル文字列の.freeze化、json, redis、erbの高速版ライブラリ利用など、地道に改修。
Cache で Redis
「Redisでしょ!」と、とっととredisに載せるモデルを考えて、担当Aに実装依頼。
スパムIP(ログイン連続10回失敗) と スパムユーザ(ログイン連続3回失敗)
をRedisに載せる。
いまどき、sqlのtuningなんて!まちがい2
my.cnf の設定を王道通りに修正。
テーブルには、indexを追加。
mysqldumpslow などを利用したけど、いらないよね。まちがい3
nginx
nginx の設定を修正。cssのexpire time設定や、worker数などを調整。
5. スコア
結局、夜8時までかかって、目標の1万にできなかった。。。
初期スコア ... 927
最終スコア ... 7,289
帰ってから、isucon4の解説を読んで復習。
http://isucon.net/archives/40724693.html
その後、シルバーウィークでいろいろ手をいれて、17,011にあげた。
vCPU x4のマシンに移して、35,637。やればいろいろできることが、あるもんだ。
6. 反省
担当Bのリーディングで、KEEP & PROBLEM & TRY をホワイトバードにまとめる。
TRYは、以下の通り。
- 状況把握できるように、benchmarkの実施は担当決める
- ログ解析をもっとやろう。
- プロファイラを利用しよう。
- deployをもっと簡単に。
- TODO, DOINGを共有できるように付箋を利用しよう
- 画面、サブディスプレイをもう1台。(予行練習時は1台)
- 最初に改善項目について設計しよう。
7. まちがい
isucon4は、あくまでisucon4。
isucon5も同じだと思ったのは、間違いだった。
以下、isucon5 予選で、下記のまちがいを反省した。
- isucon5の予選問題は、がっつり系。運営の本気の一部を見た。仕様理解大事!だけど、思ったより時間かかった。
- sql の改善なんていらない。redisに載せればいいし!と思ってたけど、データモデル複雑でsqlもないと無理!
- mysqldumpslow すてき!頼りになる!