isucon5 (事前準備2)

投稿日:

isucon5 に向けて、isucon4 のお題で予行練習。

isuconの説明は、以下のsiteでどうぞ。

http://isucon.net

簡単にいうと、インフラ&プログラマ運動会。


あらかじめ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 予選で、下記のまちがいを反省した。

  1. isucon5の予選問題は、がっつり系。運営の本気の一部を見た。仕様理解大事!だけど、思ったより時間かかった。

  2. sql の改善なんていらない。redisに載せればいいし!と思ってたけど、データモデル複雑でsqlもないと無理!

  3. mysqldumpslow すてき!頼りになる!