りつくろいす

英語が苦手です

サークル内ISHOCONに参加しました

ISHOCONとは

ISHOCONとは Iikanjina SHOwwin CONtest の略で、ISUCONと同じように与えられたアプリケーションの高速化を競うコンテスト(?)です。

github.com

今回はサークル内のOBのdyumaさんとbgpat方々に主催、運営をしていただき開催することができました。 ありがとうございます!!

参加記

参加時に何をしていたかメモをしていたのですが、途中で確認したらindexを張ったところが全て抜けていました… そのため、内容が薄いものとなってしまいますがお許しください🙇‍♂️

自分はISUCON自体参加したことがなく、パフォーマンスチューニングとは?という状態だったので、 色々と調べながら動かしていました。

開催日時

GW中の好きな時間に参加できるとのことで、開催は4/29~5/9までの間でした。各自時間のある時に自分の環境で高速化をするという形です。 自分は4/29と5/6、5/8辺りで作業をしていました。

4/29

とりあえずサーバーを起動してみて初期状態でベンチマークを回してみました。使う言語はgoです。 回した結果は261点でした。ここから、点数を上げていく必要があります。 何をすればわからなかったのでとりあえずmpstat -P ALLでコア数を見てみました。見たところ4コアらしいです。

あと、サーバー起動中にwrite: broken pipeのエラーが起きていて、これが何か悪さしてるのかなとも思ったのですが、とりあえず放置しました。

5/6

index貼り貼りの時間でした。 以下のリンクを共有してもらったので、見ながら作業。

www.slideshare.net

資料通りスロークエリログに全SQLを記録し、Percona Toolkitで解析してみると、 indexページでコメントを持ってくるところが重そうでかつ、資料の37ページにあるソートの条件に当てはまっていたので まずここにindexを貼りました。また、SELECTですべてのフィールドの値を持ってきていたので、これを必要なものだけ持ってくるようにしました。

また、typeがALLかindexになっていてrowが大きいという条件に当てはまるSQLもあったので、それぞれindexを貼りました。確かcountをするところだったと思います。 他にも貼れそうなindexを貼ると23000点を超えました! この日はこれで満足して終了しました。

5/8

indexをあらかた貼り終わったので、違う方向から攻めてみることにしました。 kataribeってやつを使えばいいらしいことをDiscordのサーバーでチラ見したので、これでアクセスログの解析をしました。

github.com

アクセスログを解析してみると、imageへのアクセスが死ぬほど多かったので、 こういう時はnginxで静的ファイルとして配信してキャッシュすればいいというのを見かけたのでこれを行いました。 つまり、Cache-Control "public, immutable";をjpgとcssに対してつけてあげました。 これで回してみると24000点ぐらいになりました。

思った以上に伸びなくて、再度kataribeを回して解析してみましたが、これ以上どうすればいいのかわからなかったので、 これでギブアップとしました。😭

最終順位

終結果は以下のような感じになりました。自分(ritsuxis)は24000点ぐらいで7/10位でした。対数表示で一見わかりにくいですが、 上位は30万点を超えて40万点ぐらいまで伸びてます(すごい…)

f:id:seiritsu:20210520145615p:plain
ISHOCN最終順位

感想

初めて挑戦したにしてはできたほうかなと思いました。 indexを貼るってどういうことかわかっていませんでしたが、適切に貼るだけでめっちゃ速くなったのでびっくりしました。

indexを貼る以外にもgoのコード内に原因があったり、配信の設定を変更したりいろいろとできることがあるらしいので、 また時間があるときに他の人のwriteupを見ながら実装できたらいいなと思っています。

他の人の参加記

fonoさん: 出身サークルのISUCONに雑に参加した話

Noiriさん: サークルで開催されたISUCONに参加した - yrfw

dyumaさん: サークルでISUCONを開催したので、参加した話 - Goryudyuma’s blog