チーム「いんふらえんじにあー as Code」で参加して初日3位で本戦出場決定しました! 何年ぶりかの本戦!嬉しい!
メンバーはいつもの @matsuu @ishikawa84g @netmarkjp の3人で、 役割分担はこれまたいつも通りこんな感じでした。
- @matsuu バリバリ実装する前衛
- @ishikawa84g レギュレーションやコードやログやDiscordを見る情報官
- @netmarkjp 司令塔
最終スコアは26,000ちょい。今回はUbuntuだったのでSELinuxは使わず、 AppArmorのエラーが出てたのでAppArmorの調整をしました。
我々はメンバーは同じでもチーム名は毎回変えていました(都合によりメンバーが違う年もありました)。 実は今回のチーム名にある「いんふらえんじにあー」はISUCON1で賞金を獲得した時のチーム名でした。 縁起がいいですね。
事前準備で↓のメモを作成しておき、本番はしっかりやりました。
当日最初にやることリスト
- レギュレーションを改めてよく読む
- 当日ガイドをよく読む
- アプリを理解する
- ユーザからみた仕様
- 画面を見て概要を把握する
- システム仕様
- エンドポイント一覧を作る
- 構造体 / メソッドにコメントを書く(GoDoc / PyDoc)
- 処理の概要
- フィールドの意味
- DBのテーブルを把握
mysqldump --no-data
- 計測環境を作ってベンチを流してみる
- ツール準備
- kataribe
- mysqltuner
- pt-query-digest
- top
- dstat
- ログ出力設定
- Nginxのrequest_time
- MySQLのslow query log
- アクセス傾向を見て納得する
- どう作り変えるといいか考える
なにをどう実装したかは @matsuu が書いてくれると思うので、 わたしは自分が意識したことを2つ紹介します。
意識したこと1: 事前準備
Alibaba Cloudでインスタンスを起動して過去問を解きました( @matsuu が )。 Timezoneを確認したり、 localhostがIPv6をListenしていないからRedisをインストールしても自動起動しなかったりという挙動をあらかじめ把握することができました。
情報共有のSlack、情報蓄積のScrapbox、作業環境セットアップのAnsible Playbookやsshrcを準備しておいたので大変スムーズでした。 このあたりの段取りは慣れたものですが、 いろいろ試してみたいので、できるだけ毎年違うツールを使うようにしています。 (うろおぼえだけど、去年は情報蓄積はNotion、作業環境セットアップはItamaeだったと思います)
あとは練習しました。 自分のメインのスキルセットはPythonとGoで、 今回はGoでいこうと事前に決めていました。 ただコードを読むのはPythonのほうが楽な場合もあるので、ISUCON中はPython実装とGo実装を両方読んでました。
また直前にやった社内ISUCONも、とてもいい練習になりました。
意識したこと2: 稼働/工数の采配
ISUCONは短い時間でいろいろやりきらないといけないので、 稼働/工数をかけるポイントとタイミングの取捨選択は気をつけています。
- 諦めるポイント(この実装方法はもうやめよう)
- 諦めないポイント(このエンドポイントの攻略は不可避だからここはこだわろう)
- 休むポイント(食事 / おやつ / トイレ)
- 必須イベント(最初に焦らずコードとレギュレーションを読み込む / 時間の余裕をもって再起動試験する)
結果として今回はうまくハマりまして、 @matsuu の手の速さと、 @ishikawa84g の情報収集力のおかげでとてもスムーズでした。
今回は特にアプリが大きく複雑で、外部APIの仕様をきちんと把握しておく必要がありましたが、 @ishikawa84g がコードとドキュメントを読み込んで・実際に画面を動かして確認してくれたおかげで、 ステータスの遷移をきちんと把握できていたので、 自信を持ってキャッシュ実装をすすめることができました。
まとめ
今回のアプリ / ベンチだと、 地道に切り分けて改善していくと16000くらいかなと思います。
我々の場合は、そこで立ち止まってアクセスログやプロファイリング結果や負荷の傾向をよく見たことで、
/users/transactions.json
内の外部APIとのやりとりがジャンプアップのポイントだと気づけました。
気づけたときに外部APIのdocumentedな挙動がすぐに把握できたので、
スムーズにチューニングして26000までスコアを伸ばせました。
詰まったときに基本に立ち返るのが大事だなと改めて感じました。
本戦に備えて準備して、体調を整えてがんばります。
See also
- #isucon チーム「ウー馬場ーイー222」でISUCON13本選に参加し30位になりました
- 「SRE≠インフラなんだけどもう誤解されちゃってるから、DevOps新実装としてSite Production Engineeringはいかがでしょう?」でJAWS DAYS 2022に登壇しました #jawsdays #jawsug
- #isucon チーム「シン・ウー馬場ーイー2」でISUCON12本選に進出し12位になりました
- #isucon チーム「シン・ウー馬場ーイー2」でISUCON12予選に参加し2位で予選突破しました
- 「非ITの事業会社にSREと言わずにSREを持ち込んだ」SRE NEXT 2022で登壇しました #srenext