ISUCON7 本戦参加 (2017/11/25)
Created on 2017-11-29
チーム名「ひでおとゆかいななかま」のメンバーとしてISUCON7本戦に参加。
結果は30チーム中11位。学生枠だと3位かな? 予選の記録はこっち。
ISUCONケーキ。
レゴブロック。一通りオンメモリキャッシュを実装したら、次はBIGINTが鍵を握っていたようだ。
やったこと
- MySQL → Redis
- ルーム単位での負荷分散
構成
主催者から与えられたサーバはCPU:2コア, RAM:2GiBのサーバ4台。
初期状態ではアプリケーションサーバ3台とDBサーバ1台という構成になっていた。
app0231: app1
app0232: app2
app0233: app3
app0234: mysql
変更の構成はこんな感じ。
mysqlへのクエリ数削減と永続化のために、redisを追加。
app4は、WebSocketの接続先サーバの負荷分散も行うようにした。
app0231: app1, redis1
app0232: app2, redis2
app0233: app3, redis3
app0234: app4, redis4, mysql ← ポータルでベンチマーク対象に指定したサーバ
課題・反省
- デプロイの(半)自動化。
手動デプロイだと1回のデプロイに何分もかかっていた。
- テストを書く。 毎度のことであるが、デバッグに時間を食いすぎた。
ブラックボックステストでもいいので、なんか用意したほうが良さそう。
- ライブラリ選定は全員の合意を取る。
redisの不慣れなライブラリを使ったために、無駄な時間を使ってしまった。
- メンバーのgolang力が不足。 メンバーがpythonista, rubyist,
javaerてな感じなので仕方ない。
- ちゃんと計測する。
メソッドの所要時間は最初に計測したが、変更後の処理時間を計測してなかった。
ほとんど直感でチューニング。
- initializeが何故か落ちた。その原因が追求ができなかった。
個人的な反省点
- 作業環境の動作確認を事前にしておく。
環境変数
XDG_SESSION_ID
かDISPLAY
をunsetしないと~/.vnc/xstartup
でコケるトラップにハマったの何度目だろう。
- 作業環境をローカルに用意する。
試合中の最初の方はWiFiがちょくちょく切断された。VNC勢なので辛かった。
- 有線マウスを持ってく。会場ではBluetoothマウスが安定しなかった。
- 家を出るときにディスプレイの電源を消す。12時間以上つきっぱなしだったみたい。
次回参加するときには用意したい
- タブレットを使用して、glancesを常時表示。
- Webブラウザから簡単にデプロイできるようにする。
スクリプトやデプロイツールを使うと、メンバーの開発環境がバラバラなので辛いことが起きそうだから。