ISUCON9予選に参加して惨敗した

昨年/一昨年と同じメンバー(@noda_sin, @T28_tatsuya)でISUCON9予選に参加しました.今年のチーム名は帰属意識/Zero -Don't stay company-になりました.これは前職時代の最後の方は帰属意識が全くなかったため,最近転職したチームリーダーが決めました.予選の方は途中までは順調でしたが,16時あたりからおもちゃが壊れてfailが続き,最終スコアは2年連続の0となりました.

  

f:id:stoshiya:20190913163726p:plain

 

 

事前準備

週末に弊社へ集まってもらい去年の予選の環境を作ってから,対策を練ったりしました.週末に会社施設を使わせもらえないかと確認したら即快諾くださった役員と,迅速に対応してくださった人事部長,情報システム部長に感謝です.

 

1日目(予選2週間前)

この日は私と@noda_sinの二人で集合し,11時頃から作業開始.まずはAWS環境にベンチマークとアプリ3台の計4台のEC2インスタンスを作って環境を整えました.そういえば去年の予選のリポジトリはどこに入れたっけとGitHubリポジトリを覗いたが見当たらず,前職のAWSアカウントのGitLabの中に格納していたことを思い出しました.幸いにしてssh秘密鍵は更新されていなかったため,データ一通りサルベージできました.昨年はCentOS7ベースでしたが今年はUbuntuだったので,計測対象の3台はUbuntuにしました.去年のミドルウェアやインフラはh2oとMariaDBでしたが,入れ替える前提で,最初からnginxとMySQLをインストールしました.

 

2日目(予選1週間前)

この日は3人全員が集合し,予選を見越して10時から作業開始.毎回恒例の作業を分担して実施.datadogを使ったプロファイリング環境を試してみたり,ボトルネックとなるSQLのデータをredisへ移したりしてみました.私は昨年の講評や予選突破したチームのノウハウを調べたりしました.この時点で今年は善戦できそうな手応えはあったのですが…

 

予選当日

土曜日の10時スタート時点で今年の環境とレギュレーションを分担して取り掛かりました.毎年インフラは異なっていて,今年はアリババクラウドでした.この辺りは特に影響ありませんでしたが,初めての試みとしては仮想マシンを運営側ではなく各チームが起動するということ.参加チーム数が600なので,競技用のインフラを用意するだけでも大きな負担となってしまうので,一理あります.一昨年は予選の開始時間が3時間ほどスリップしましたし… まぁWebの管理コンソールからクリックするだけでしょうからとタカをくくっていましたが,1回目に起動した仮想マシンSSH接続できない.仮想マシン作り直そうとしても権限か何かの問題で起動が完了しない.参加者のサポートチャットでも同様のトラブルで混乱していました.結局1時間経ったところで,この問題が解消.インフラの最低限の準備をして,参照実装をnode.jsに切り替えて1回目のベンチを走らせたのが11時半でした.

 

ここから戦略を相談.今回の参照実装は椅子(ISU)専門のメルカリっぽいものです.今年も仮想マシンは3台まで起動できます.競技用ベンチマークは対象のパブリックIPアドレスを1つだけしか登録できないので,Webアプリは2〜3台で動かし,nginxで分散させることにしました.1台構成を前提として設定された箇所を修正しましたが,ベンチマーカーからアップロードされたファイルの共有が必要なことがわかり,2台でNFSのクライアントとサーバを設定.この時点(15時15分)でスコアが2倍強になりました.予選を総合4位で突破したISUCON7と割と近い構成のような流れかもと,チームの士気は一気に高揚しました.

 

しかし,この後に3台目の仮想マシンで進めていたredisインストールが完了しないことが判明.一旦仮想マシンを破棄して作り直し,ミドルウェア諸々を再セットアップ.さらにWebアプリを3台構成にしようとしたり,redisでキャッシュするための修正を入れたところで,ベンチマークが全く通らなくなる状態に陥ってしまいました.このままリカバリーできずにスコア0で終了.

 

振り返り

WebアプリやMySQLにdatadogのエージェントを入れてのボトルネック調査は非常によかった.各SQL文が何回呼び出されていて,どの程度の時間を消費しているのかが一目瞭然になる.あとで調べたらNew Relicでも近いことができそうだが,ベンチマークが走っている間だけの指定がWeb画面内の時系列グラフをドラッグするだけなので,操作性という点でもdatadogは素晴らしかった.

 

ただボトルネックとなる箇所が特定され対策してもベンチマークが通らなくなってしまってから,最後まで修復できなかったのは本当に痛かった.あとでもう一度環境を作って振り返りした方がいいだろう.

 

最後に,ISUCONを運営してくださる皆様,参加チームの方々,本当にお疲れ様でした.来年も開催されるのであれば是非とも参加したいし,出るからには勝てるように日々の業務内外で精進してゆきたいと改めて思いました.ありがとうございました.