TL:DR;
- isucon10決勝でfailしました
- 僕の注意不足です
- つらい
なにがあったのさ
デーモンファイルにRestartSec=10sとかを入れないまま、問題が発覚しない形で再起動試験をしてしまったのでサービスが死んでた。具体的には、golangのサーバーがredisがロードし終わる前にconnection貼りに行ってて死んだ。
なにしてたの
- 10:00 sshとかの環境整えてansibleでbootstrap- git configしたりいつものツールを突っ込む
 
- 11:00 プロファイル取って様子を見る・デプロイ環境の若干の用意- 方針を決めてチームメンバーに改修をよろしくした
 
- 12:00 query改善- generated columnとか使ってクエリをいい感じにしてた
- 生の点と減点を引いたスコアをSTORED
- indexも多少貼った
- team_idとかにうまく貼られてなかったのを改善
- あとは見つけ次第クエリの改善(? = TRUEとか。)
 
- 14:00 redis導入- jobQueueを実装したかった
- anqouに託した後断念している
 
- 15:00 いろいろなパラメーターのチューニング- mysqlの設定値とか
- interpolateParamsとか
- envoyのLimitNOFILEとか(envoyなんもわからんかったけどファインプレーだった様子)
- /etc/security/limit.confとか
 
- 16:00 sessionを外(redis)に出す、envoyをいい感じに複数台構成- ぱっぱと出来たのはよかったけど…
- ここのせいで再起動試験落ちの結果になってしまった
- 本当に鬱
 
- 17:00 indexを追う- チームメンバーがキャッシュを導入してくれてたおかげでmysqlの負荷がだいぶ減っていた
- それでも変なクエリを書き換えたりindexきかせていた
- 変なOR文にmergedIndexした
 
- 17:30 再起動試験- 1台ずつ順番にやってしまった
- 依存関係のあるサーバーは同時に起動すべきだった
- つらい
- つらい
- つらい
 
おえて
チームメンバーには本当に申し訳ない気持ちでいっぱいです。多分再起動試験通ってたら3位圏内だったので本当につらい。しばらくチームメンバーにはまともに顔向けできないです。ごめんなさい。なお、**daemonの定義ファイルは最初にちゃんと覗くようにしましょう。**
そして私が事前にメモ書きしていたことの中に、
再起動試験をする
– `sudo reboot`
メモ書きより
— 最悪起動しないときのために、1台ずつ再起動する
— 可能なら3台同時再起動なども行うべき?
とありました。3台同時再起動すべきでしたね。とんでもない鬱。すいませんでした。
辛い気持ちのまま書きなぐってるので書きなぐりです。具体的なことがなくてごめんなさい…
暗い話はさておき
それでも楽しい思いをさせてもらいました。運営のみなさまありがとうございました。
