ISUCON11の予選に参加しました。(初参加)アイキャッチ画像は公式Twitterより拝借。
ISUCON自体は前から知っていたものの、業務でのパフォーマンスチューニングの経験がないかつ、インフラ領域の一部しか分からないため、時期が来るとTwitterとかの参加者の感想を、指をくわえて見ているような状態でした。
現職に入社し、同僚が2年ぶりに申し込みをし、参加メンバーを募っていたので、他に人がいないならーと最後に手を上げました。
チーム構成と役割は、2年ぶりの同僚がインフラ&アプリケーション、初参加の同僚がアプリケーション、私がインフラ周りでした。
私は分類的にはインフラエンジニアですが、ISUCONで使うミドルウェア(nginx,mysql)の知識は何となくconfigが触れる程度です。。。
結論から言うと私はその辺のconfigを触ったり、3台構成にし、環境変数周りでハマったりしているうちに時間になりました。
スコアは23000程です。チームメンバーのおかげです🙏
追試に落ちることなく、そこそこの結果が残せたので最初にしては良かったかなと思っています。課題も色々ありますが。
ふりかえりも兼ねて色々書いていきます。
準備
そもそも準備何すればいいんだってところから始まった初参加組ですが、経験者の同僚に大枠の練習方法を教わりつつvagrantで過去問(ISUCON10予選)を解きました。だいたい1ヶ月前から初めて、休日5日(8H)と平日3日(2H)くらい使った気がします。内チームでの練習は1.5Hくらい
vagrantの環境構築も一癖あったりして、準備するだけでも気合が必要でした。
最初の1時間の一通りの流れを試したり、インフラ測定ツールの動作を確認してみたりと脇道に逸れ本質的なミドルウェアの設定を変えていくところの練習は疎かになってしまいました。
特に複数台周りの構成はvagrantの過去問でも少しありますが、最終的に練習しない状態で望みました。。
あれこれできないまま直前になり、最終的に以下に当日用のメモをまとめました。とは言いつつ同僚のメモをコピーした部分が大半を占めるのですが
https://gist.github.com/myumx/9310181644ae0209f68f6ad6c53584a3
やったこと
基本的には先程のメモの通りですが、上げるとこんな感じです。
- mariadb,nginxのログ出力設定
- mysqlで準備したがmariadbで少しテンパった
- mariadbを外からアクセスできるように変更
- 最終的にはAWSのSGは削除
- サーバ3台の内、3台目をDBサーバ、1台目をロードバランサ兼APサーバ、2台目をAPサーバに変更
- それに伴うサービスの無効化
- Redisの導入
- 導入したが時間の関係で使われなかった。
- 何よりぶっつけ本番でインストールしたのでテンパった
- mariadb,nginxの設定変更
- 言うほどできなかったし、ミスったし、効果をあまり測れなかった部分もある
反省
一番は複数台構成にテンパったところかもしれない。メンバー全体的に複数台構成への準備が弱かった。
- 複数台構成にした後、dbのinitializeが正常に呼ばれなくて失敗するケースがある
- ~/.env.sh を編集し忘れる。sql側のシェルは編集したんだけど…
- この辺とindexの有効化が被って原因究明に時間を溶かしてしまった。
インフラ周りとしても準備不足が目立った。収集した情報でパフォーマンスが変わる気がしていても、実際にやったことないと限られた時間で変更に踏み切れない。
- nginx,mariadbの細かいチューニング
- Redisのインストール
ミドルウェア周り分からないと手を出せない領域が多い。少しわかればインフラ担当が手を伸ばしてシュッと改善するところなのかなと
- DBテーブルにblob型で画像が使われている
- 結構ハードル高そう
- Redisのキャッシュ導入
終わりに
公式解答が出た後にチームメンバーでふりかえりをやる予定なので、細かい部分はそこで出るかもしれないですが、一旦は参加してみてこんな感じでした。運営の皆さんお疲れ様でした。ありがとうございます。
インフラエンジニアといえどクラウド中心で、ミドルウェアの設定を触ることが減ってしまい(もともと触ってた期間自体少ないですが)中々歯がゆいところがあるのですが、同僚より「インフラエンジニアとしてアプリケーションがどうパフォーマンスに影響してくるか分かって環境を用意できると良い、ISUCONの問題はパフォーマンスを考える上でのポイントがある」とのとこで、ISUCONをとっかかりにもう一歩パフォーマンス分かるように学習できればなと思っています。
(個人用のgithubアカウント、転職活動のときに載せる内容無いレベルかつ、ずっと放置していたんですが、ここで少しだけ草生えました。今後もオープンにしない状態が続く気がする)