こんばんは、糟屋もふです。本日は、Virtual ISUCON Liveのプレイヤーとして参加しました。 興奮冷めやらぬ中ではありますが、ブログを書くまでがISUCONということで、振り返りと今後改善できることの2つにわけて話します。
今日の振り返り
概要と総評
本企画に関われた全ての関係者の皆様、ご来場や声援をいただいた皆様、そしてチームメンバーの晴栄リコさんとこみっとちゃんさん。この企画に関わった全ての時間を有意義に、楽しく過ごせたのは、皆様のおかげです。本当にありがとうございました!
当日だけでなく、ISUCON 11の事前講習をベースに、実際に手を動かして学ぶ機会も用意いただきました。ISUCONは何をやるべきか、改善に取り組む前に必要なものは何か、改善するには何を見るべきか、様々なことを、休日問わず教えていただきました。どれくらい成長したかというと、もふさんはgitの操作すら怪しく、rootでgitを実行して.gitの権限を修正するのすら困っていたりしていた人です。今でも、少し前との自分との差にビックリします。
そして、個人的に一番大事だと思っていたこと。この企画を通して、 ISUCONは楽しい という感情は皆様に共有できたでしょうか。私は、すごく楽しかったです!その姿は、こちらの公式配信にて確認できますので、是非見ていただけるとありがたいです。
(※順不同)
- 運営の皆様
- チームメンバー
運営から、既にエントリが投稿されておりますので、こちらをまずご参照ください。
チームメンバーの晴栄リコさん、こみっとちゃんからも、本日の記事が投稿されています。本記事と、併せて是非見てくださいっ!
結果
最終スコアは10587でした。最初は6635だったので、大体2倍弱の改善。なんやかんや結果が出てうれしかったです!
(尚、この辺りからですます調で書くことに限界を感じたので、である調で失礼いたします)
やったこと
- 11:33 gitに全て追加 initial commit · KasuyaMofu/vtuber-isucon10f@e156785 · GitHub
- 11:50 初期ベンチが手間取る(initializeしたらできるようになった)
- 12:04 関係ありそうなconfなどを追加 add web config · KasuyaMofu/vtuber-isucon10f@623835c · GitHub
- nginxではなくenvoyであることにきづく
- ~12:32~ envoyをどうにかしようとするがどうにもならずヘルプ
- 13:14 吐き方を教えて貰う
- (ここから先はお助けボタン無しで30分前までやる)
- 13:22 sqlのdumpを吐く add dump · KasuyaMofu/vtuber-isucon10f@a4fcc4d · GitHub
- 13:56 isucon@%のgrantがtable名を入れるポカミス mysql · Issue #7 · KasuyaMofu/vtuber-isucon10f · GitHub
- この辺からPRをどんどんデプロイしてベンチするやつ スコアログ · Issue #1 · KasuyaMofu/vtuber-isucon10f · GitHub
- 二人に教えて貰いながらenvで向き先変えてビルド→ベンチの繰り返しで3台の構成を整えていく
- 15:02 この辺がenvoyの構成ごちゃごちゃしてたやつ isu1 isu2 roundrobin · KasuyaMofu/vtuber-isucon10f@8f8e06b · GitHub
- 15:58 アドバイスをもらうadvice · Issue #16 · KasuyaMofu/vtuber-isucon10f · GitHub
- ギリギリまでやる
- 16:25ごろ
- 再起動試験をし始める
- 16:29
- 最後のPRをマージ、ビルドまでしてサーバを手放す。
サーバスペック・最終的な構成
- isu1: CPU 2, MEM 2GB application, redis
- isu2: CPU 1, MEM 4GB application
- isu3 CPU 4, MEM 2GB mysql
https://github.com/KasuyaMofu/vtuber-isucon10f/issues/13
用意していたこと
GitHub - KasuyaMofu/hidennotare: for isucon
事前に用意していたスクリプトなどはここに書いている。Markdownとして書いているので、ファイルに落とし込めたらgit cloneして移動したらよかったかもしれない。最低限、以下のものさえあれば、後は大抵GitHubで操作が完結するので良き。
- hidennotare/02-middleware.md at main · KasuyaMofu/hidennotare · GitHub
- hidennotare/11-deploy.md at main · KasuyaMofu/hidennotare · GitHub
- remoteリポジトリのbranch名呼ぶだけで準備完了してくれるくん
- ベンチ前/ベンチ後に色々実行するくん
- Goプログラムのビルド、
systemctl
でサービスを下げ上げして確実に反映させる
- Goプログラムのビルド、
- GitHubにファイルのcatしてコメントを投げるくん
github cli使ったらめっちゃ楽。にざっと置いたやつをそのままgithubに投げるだけ
`gh issue comment 1 -b "`ssh isu1 cat /tmp/alp-out`"`
振り返り
環境確認
振り返りながら、最低限必要だった情報はこんな感じかな。特に lsof -i
は sudo
しないとwell-knownポートが出てこないのを失念してボタン押してた。わちゃわちゃしてた。
また、CPUとメモリの構成については、ベンチスコアが各サーバで違っていたので、そこから推察することもできた。数字を信じよ。
cat /proc/cpuinfo | grep process free -h uname -a sudo lsof -i mysql --version systemctl status <unit>
envoy
今日一番の改善ポイント。マニュアルは事前に読みこんでいたつもりだったが、gRPCが出てた時点でenvoyの可能性に気づけたはずだった。80や443を受けるサービスはapacheとnginx以外ほぼ触ったことないに等しいので、予選までにはenvoyも大丈夫と言いたい。
isucon10-final/xsucon.md at master · isucon/isucon10-final · GitHub
メトリクス収集
今回、古典的なtopしか見ていなかったのは記憶に新しいと思う。負荷が何によって引き起こされていて、何が原因なのかを特定するには、最低限の情報が必要なので、ツールの導入は必須。alpによるエンドポイントのSUMで全て丸め込んだパフォーマンスを見ることはできるが、それよりももっと詳しい情報があるべきだった。
netdataやprometheusを準備しよう。pprof
はコードの変更も加わるので元々入れずに行くことは事前合意してたので、これは次にできるようになるといいな。
最後に
ISUCON、今まで私は参加したことなくて知識だけのものだったので、941さんからこの企画をしよう!と声を掛けられたとき、二人のメンバーを集めていたは「私にできるのかな」という不安しかありませんでしたが、今は自信を持って言えます。
ISUCONは楽しいので皆やろう!!!