NTT Perfomance Tuning Challengeに参加した
こんにちは,2/6(土)にオンラインで開催されたイベントに参加してきました.
懇親会ようにお酒とおつまみをいっぱい送っていただきました.ありがとうございます!
イベント内容はいわゆるISUCONってやつですね.今回もISUCON10予選と同じく @tosa_nowさんと @sanpo_shihoさんと参加してきました.
さんぽしさんの振り返りブログ →
NTT Performance Tuning Challengeに参加したこの日、人類は思い出した。再起動試験の存在を。奴らに最終スコアが支配されている恐怖を。
役割分担は前回と同じく以下のようにしました.
まし → DB(インデックスや非効率なクエリの書き換え) -> app
とさ → app
さんぽし → インフラ(複数台構成やパラメータチューニング)
やったこと(時系列)
ApacheをNginxに置き換えてくれた
僕たちはNginxの方がタレを用意していたりと慣れています.気づいたらさんぽしさんが置き換えてくれてました.
Indexを貼る
pt-query-digestの結果を見て上から順にインデックスをぺたぺたしました.
create index event_id on reservations (event_id);
create index event_user on reservations (event_id,user_id);
create index event on timeslots(event_id);
とりあえずこの3つに貼りました.そんなに複雑なクエリはなかったんですが,最適なインデックスを貼れたかはわかりません..
JWTが遅かったのを直してくれた
pprofとalpの結果を見る限りJWT周りが一番遅いようでした.気づいたら軽くなってました.ちなみにその時のPRがこれです.
jwt直したPR
DBから画像を引っこ抜く
DBに画像がbase64形式で保存されていました.気づいたらさんぽしさんととささんによって静的ファイルに書き出され,Nginxで配信されるようになっていました.
ページングを改善する
LimitとOffsetを用いたページングが3カ所ほどありました.なのでシーク法を用いて改善しました.どう改善するかは以前僕が書いたブログを見てもらえると...
複数台構成
DBの負荷が高かったので早めにappとDBを切り分けようと言う話になりました.右往左往したんですが結局app2台のDB1台になったはず...
/loginがボトルネックになりつつあったんですが,パスワードの暗号化アルゴリズムを変更するのはisucon9の予選で問題になったこともあり避けました.その代わりにapp1台を/login専用にしました.
キャッシュを作りまくる
DBにアクセスせずに管理できそうなものがいくつかあったのでとささんと一緒にキャッシュをオンメモリで管理する事にしました.redis入れる時間がなさそうだったのでGoの変数で持ちました.
画像周りが不安定に
さっきまで動いていたのに突然Failするようになりました.後日考えたことも含めて話しますが,画像のidがランダムだったようで前回のベンチで生成された画像を削除しなかったのでidが被った際におかしくなったようです.最初に画像を生成しておき,initializeでcopyするなりしておけばよかったですね...
再起動試験対策
Failするのを解決するのに必死で再起動試験対策を全くしていませんでした.突貫工事でとささんがDBの接続を待つようにしてくれました.
for {
dbx, err = sqlx.Open("mysql", fmt.Sprintf(
"%s:%[email protected](%s:%s)/%s?charset=utf8mb4&parseTime=true&loc=Local",
user,
password,
host,
port,
dbname,
))
if err == nil {
break
}
time.Sleep(1 * time.Second)
}
この後知ることですが,errがnilかどうかを確認するだけじゃなくPingを出して返ってくるかをチェックする必要があるようでした...
アプリ起動時にDB起動を待つ

結果
僕たちIチームは再起動試験に通らず0点でした...最高点は2位だったのでかなり悔しいです
感想
前回のISUCONに比べて順調にスコアを伸ばせたので成長を実感しました.「推測するな,計測せよ」は知っていても実際に行えているかの違いだったと思います.
何と言っても「毎回」パフォーマンスチューニングコンテストに出るとサーバーを壊していた僕が「壊さなかった」のが成長だと思います()
次は再起動試験対策も万全に行ってISUCON11優勝します!!!!
今回のイベントを用意してくださったNTTの皆さん,ありがとうございました!!!
タグ
Loading...