ISUCON8 予選に参加して敗退しました
ISUCON8 オンライン予選 2日目に @hilotter、@Konboi と流れ弾で参加し予選敗退しました。
運営の皆様、ありがとうございました。今年もとても楽しかったです。
チームメンバーのブログ⌗
作業ログ⌗
あまりチャットにログが残っていなかったので覚えている範囲で実施したことを書きます。
私はインフラ担当ですので、アプリケーション周りの話しは二人がブログを書いてくれると思います。
- 参考実装の Perl でベンチマークを実行
- Go 実装に切り替えてベンチマークを実行
- Capistrano で全台に Chef 実行
- h2o を OpenResty に置き換える
- チューニングしていく中で慣れている nginx のほうが良いだろうと思って置き換えましたが、結局それほど難しいことをしなかったので h2o のままで問題なかったです
- MariaDB を MySQL に置き換える
- チームメイトの二人が docker-compose でローカル環境を作っていて、MySQL のほうが都合が良かったので
- MySQL 公式の yum repo を追加して yum install しただけで置き換え完了
- 正確には
SHOW VARIABLES
をしたらエラーが出たのでmysql upgrade
も必要でしたが、動作するだけなら yum install での置き換えで問題なさそうに見えました
- 正確には
- Prepared Statements を無効にする Pull Request を作成
- Capistrano でデプロイできるように準備
- Go を使っていたので Go 製のデプロイツールを試したのですが、Capistrano のほうが使いやすかったです(特に ssh 周り。あと私がある程度 Capistrano を使ったことがあったため)
- 複数台構成の準備
- 全台で Go のアプリケーションを動かすように対応
- init.sh に -h をつける
- 再起動しても問題ないことを試す
- (確か、ここままで 15 時前くらい)
- getEvent のクエリを書き換えられそうだったので実装に着手
- Konboi がいろいろ修正してこれが不要になったので、この時間でサーバ構成の最適化やスコアを安定させる方法を検証していれば予選突破できたかも… というくらいの僅差で本選出場を逃したのでただただ悔しいです
- kswapd0 が CPU を使っていたので、全台の swap を無効化
- MySQL の buffer pool size の調整
「ISUCON8 オンライン予選 全ての順位とスコア」に全チームのスコアが掲載されていますが、本選出場まであと 800 点くらいでした。ISUCON7 予選では Cache-Control
に public をつけていなくて全然スコアが出せなかったので、それと比較すると善戦できていたのは成長を感じられて良かったかなと思います。
あらためて運営の皆様に感謝を申し上げるとともに、一緒に参加してくれた二人にも感謝申し上げます。
来年も開催されるようでしたら参加します!
宣伝とお願い⌗
例年 ISUCON 参加ブログを拝見していると alp を使ってくださっている方がいらっしゃるようでとてもうれしいです。ありがとうございます。
その alp についてですが、近々 v0.4 でコードを修正しやすいようにリファクタリングをしたあとに、いろいろすっ飛ばして v1.0 をリリースします。
v0.4 のあとに v1.0 をリリースする理由は、オプションに非互換な修正(主にオプション名の変更)を入れたいのと、LTSV 以外も扱えるようにするためです(オプション名をテキトーにつけすぎたのがずっと気になっていました)。
v1.0 リリース時に欲しい機能や既存オプションでこれはいらないという機能がありましたら本ブログのコメントまたは Twitter @tkuchiki 宛、GitHub の issue に書いていただけますと幸いです。