ISUCON8本戦に参加してきた
先日ISUCON8本戦に参加してきました.
ISUCON本戦〜 pic.twitter.com/lDWcQMlDGh
— altescy (@altescy) 2018年10月20日
kstmというチームで,学生枠での出場でした. チームメンバーは僕とugwisとkobの3人.
昨年も同じメンバーで"人間にはチーム名を決めるのが難しい"というチーム名で参加していたのですが,このときは予選敗退となりました. なので今年は念願のISUCON本戦出場となったわけです.
さて,そんなISUCON8での結果はというと...
fail😭 pic.twitter.com/hn2T792Zd0
— altescy (@altescy) 2018年10月20日
残念ながら結果を残すことはできませんでしたが,とっても楽しいISUCONでした!
タイムライン
10:11
実装言語は予選と同じでGo言語を選択. 何もいじらずベンチマークにかけ,スコアは 493.
10:55
ログ集計のための設定を行う. 僕はmysql周り,ugwisはnginxにkataribe導入,kobはnetdata.
ログが取れるようになったことを確認してもう一回ベンチ.
11:25
ログをもとに実装を眺めてるとLIMIT 1
が抜けてるクエリ発見.
ここをなおすとスコアが大きく上がって4,557.
ここから先,ボトルネックの箇所がわかってもどうなおすか悩む...
13:52
シェア機能を使えばアクティブユーザーが伸びてスコアが上がるのでは,ということになり res["enable_share"] = true
にしてスコア計測.
しかし負荷に耐えきれずfail.
ログインに5回連続失敗したとき403
を返すようにすればアクティブユーザーの増加にある程度効いてくると考え,実装に取り掛かる.
kobにredisサーバーを導入してもらってアプリの実装を行う.
15:53
403
を返せるようになったけどそれだけだとやっぱり負荷が大きくfailしてしまう.
ugwisのアイデアでシェア機能の有効化をランダムにしてアクティブユーザーの増加を制御するとスコアが上がって7,724.
17:08
アプリケーションサーバを複数台構成にするべく各自設定をがんばる. ugwisはリバースプロキシを設定,kobは各サーバーのインフラ整備.
そして今回最高スコアの10,081を記録.
その後,/initialize
でredisがクリアされないのでは,という問題が出たりして急いで修正なんかを行っていたところで時間切れになって終了.
経験や知識,実力の不足を実感したな...
ただあれこれ作業してる間は楽しかったし,モチベーションも上がった気がするのでほんと本戦参加できてよかったなって感じです.
来年も参加できたらいいなー
あひーっ(語彙力) pic.twitter.com/beUQROFmle
— altescy (@altescy) 2018年10月20日