isucon

ISUCON5に初参加してきた

More than 3 years have passed since last update.

ISUCON5参戦記

ISUCON5にバナナマンズとして初参加しました。


ISUCONとは

お題となるWebサービスを決められたレギュレーションの中で限界まで高速化を図るチューニングバトル、それがISUCONです。過去の実績も所属している会社も全く関係ない、結果が全てのガチンコバトルです。

http://isucon.net/archives/44132090.html



参加の経緯

同僚に今年もISUCONありますよ出ませんか?と声をかけてもらったのに後押しされて、今までどうせ自分がでても恥をかくだけと二の足を踏んでいたISUCONに参加を決めました。結局声をかけてくれた同僚とは別のチームで参加。


結果

Rubyで挑んで最高スコア1864と残念な結果でした。

来年の自分のためにも試行錯誤の足あとを残しておきます。


チーム

メンバーは同じく声掛けで出る気になった社内の2年目と3年目の若手とおっさん(私)というチーム構成。

普段は全員Webアプリケーションエンジニア(Ruby,PHP)でインフラの経験があるのが自分だけという状況だったので、自分がインフラ・ミドルウェア周りを担当することに。


事前準備


  • 同僚のインフラエンジニアによるISUCONで使う技術講座

  • 過去問解く(vagant-isucon++)

  • GCPに触れておく

  • 過去の参加者情報やISUCONの勝ち方などを読み漁る

  • my.cnfやnginx.conf、プロファイリング類の使い方を秘伝のタレとして準備

インフラ・ミドルウェアの知識が乏しいため、誘ってくれた同僚(インフラエンジニア)に当日の役割分担のアドバイスやチューニングのための計測ツールの紹介(kataribept-query-digestdstatなど)をしてもらいました。

当日はほぼこれらの力がなかったらなんにもできなかったというくらい頼りっぱなしでした。

参考記事

- ISUCONの勝ち方

- ISUCON 夏期講習 2015 を開催しました

- ざっくりと #isucon 2013年予選問題の解き方教えます


ざっくり当日の流れ

時間
やったこと

~11:30
インスタンス起動、鍵の設置、Git管理、ベンチ起動

~13:00
プロファイリング、ソース読み、レギュレーション確認、役割分担

~18:40
アプリケーション改善→設定変更→ベンチ実行→プロファイリング

~19:00
再起動テストして提出


当日やったこと


  • 9時には全員集合している驚異的(?)な集まりの良さ

  • RedBullを人数分用意し先輩としての威厳を示す

  • GCPのインスタンス立ち上げとssh鍵の配置

  • Bitbucketにソースを置いて管理とデプロイできるように

  • プロファイリングおじさん(katribe, pt­query­digest)

  • nginxのワーカープロセス数を1→4に

  • unicornのワーカープロセスを1→4に

  • nginxでTCPからUNIXドメインソケットに

  • nginxで静的ファイルを配信

  • MySQLの設定をいくつか変更

この内効果があったのはunicornのプロセス数を上げたくらいで他は誤差の範囲でしかスコアに貢献できませんでした。途中Rubyのプロセス再起動忘れたりと2人には申し訳ない。。。


はまったところ


  • 運営から公開されたGCPのイメージのURLがhttpsから始まるものでインスタンスの設定ができない!


    • パスを読み替えて解決(落ち着け)



  • GCPで指定されたインスタンスタイプが選択できない!


    • フリートライアル中は選択できず。事前にもらったクーポン適用で解決



  • systemd全然わからん


    • ググって起動・停止方法見つけて解決



  • /etc/my.cnfに設定を追加しても反映されない!


    • /etc/mysql/mysql.conf.d/mysql.confが本体だった!に気づいて解決



  • インデックスが貼り終わらない


    • 諦めた。(後から知ったが今回のレギュレーションだとGCPのストレージが遅いらしい)




教訓


  • 普段からパフォーマンス改善のためのツールや設定に慣れておく

  • プロファイリングの結果をチーム全員が読めるようにしておく


感想

初回ベンチが65だった時はどうなることかと思ったけど、どうにもならなかった。(初期スコア比では約30倍!)

後半はアプリケーション側の改修に参加する予定だったのに、ツールやミドルウェアの設定・MySQLのインデックスが20分たっても終わらないなどで手間取っていたらあっというまに時間が過ぎ去り、まったくアプリケーションに手を出せなかったのが悔やまれる。

インフラ・ミドルウェア担当として参加だったので、ISUCONの準備を通じてリソース監視やログ解析系のツールやミドルウェアの設定調べたり学べたことは収穫だった。

でも負け惜しみではなく楽しかった!やっぱり見る側よりも参加する側の方が何倍も楽しいし悔しい。

社外のエンジニアと同じルールでガチンコで競えるというのは貴重な場。自分との差を知る良い機会でした。

運営の方々には感謝しかない。

またでるぞ!