Oisix ra daichi Creator's Blog(オイシックス・ラ・大地クリエイターズブログ)

オイシックス・ラ・大地株式会社のエンジニア・デザイナーが執筆している公式ブログです。

ISUCON11 に予選参加して楽しく砕け散りました!!

こんにちは、北原、小林、林です。

2021-08-21(Sat) に開催された、ISUCON11にチーム "おいら大地" で参加して(砕け散って)きたのでレポートします。

はじめに、ISUCON11を通して日常の業務では味わえない素晴らしい体験を得られたことに、運営関係者および企業/個人スポンサーの皆様へ敬意と感謝を送ります。

isucon.net

チーム"おいら大地"としてはISUCONへの参加は去年に続いて2回目になります。*1

今回は以下の布陣で参戦しました。

  • アプリケーション担当:北原
  • SQL・その他担当:小林
  • インフラ担当:林

予選結果

言語はGoを選択して以下の結果となりました。*2

  • 順位:174位*3
  • 最終スコア:26,086
  • 最高スコア:同上*4
  • 初期スコア:3,408
  • Git commit数:106

isucon.net

各参加メンバーのコメント

ここからは各メンバーのコメントです。

アプリケーション担当:北原


ISUCON初参加の北原です。
業務ではJava/Kotlinが多いのですが、Java実装はないのでGoでのトライです。

アプリケーション担当としてはベンチを回してもパフォーマンスが出ない&エラー調査と苦い経験になりました。
あっという間に終了となってしまいましたが、バタバタを8時間エンジョイしました。

バタバタの内訳

  • New Relicのセグメント追加(SQLの出力までできず)
  • コード、データ、New Relicとか見てみる(傾向が変わったと思ったらエラーのベンチを回してた)
  • countのSQL修正(エラーの処理が漏れていて途中で気づく)
  • bulk insertへ変更 & 調査(ベンチの結果が悪く調査に時間を取られる)
  • 小林さんが実装してみたコードのサポート(初見コードのレビューって難しい)


他の方のブログなどを見ると圧倒的にアプリケーションに対する打ち手の数が少なかったと感じました。
もう少しで通りそうという状況にだいぶ時間を使ってしまったというのが反省点ですが、その時間も含めてイベント楽ませてもらいました。

SQL・その他担当:小林

小林です。ISUCONは初参加です。今回、機会に恵まれて参加することができました。

SQL周り中心に、インフラやアプリケーション(Go)以外のところを担当しました。

競技中は、いくつかインデックスを付与することで、スコア上昇に貢献できました。 それ以外は、修正ポイントはイメージはあったものの、スキル不足で時間内に改善するところまでは至りませんでした。

また、モニタリングや計測することが大切だと思うのですが、今回準備不足で十分にできなかったことが反省点のひとつです。

結果は、砕け散りましたが、ISUCONを楽しむことができました!

インフラ担当:林

https://avatars.githubusercontent.com/u/18348089?v=4

SREセクションの林です。 私だけISUCON2回目の参加ということもあり、前回の反省点をリベンジしてやるぞと熱い気持ちで挑みました。 主に行ったことは以下になります。

  • 環境構築(運営が作成してくれた素晴らしいCloudFormationを動かすだけ)
  • 接続用の hosts & ssh_config 作成
  • 各サーバへわかりやすいhostnameを設定
  • 早い段階でGitでのリリースができる状態を作った
  • リリース&ミドルウェアの再起動スクリプトを作成
  • New RelicのAPM以外の導入*5
  • Netdataの導入
  • Nginxのチューニング
  • MariaDBのチューニング
  • サーバー分割時に不要となったミドルの停止
  • alpコマンドでリクエストログの分析
  • 終了直前に各種ログの出力を無効化
  • ベンチ実行中の負荷を見守る
  • 環境チェックシェル実行


特に前回の反省点が活きたのが 早い段階でGitでのリリースができる状態を作った です。 NginxやMySQLのコンフィグ、Goのソース関連、env.sh などをGitリポジトリへ保存し、元の場所にはシムリンクを作成することで git pull さえすればリリースができる状態をつくれました。 これは事前講習の資料にも記載のあった内容ですが、実際にうまくワークしたと感じています。

ただし、MariaDBについては当初 /etc/mysql 直下をリンクで置き換えたところエラーが出てしまったので、サブディレクトリなどに慌てて修正しました。

f:id:morihaya:20210826011059p:plain
isucon11-hayashi01

リリース&ミドルウェアの再起動スクリプトを作成 についても何度も叩くことになったので効果はあったのですが、他の参加者の方だと毎回ログをクリアしたり、分析環境へ送るなどの工夫をされていたのでまだまだ想像力や効率改善のテクニックが足りてないことを実感できました。

ミドルウェアのチューニングや、モニタリングの導入については、ポイントにつながるような効果はあまり上げられませんでした。


途中alpの分析も深掘りがあまりできず、上位に来たリクエストについてとりあえずNginxでPathベースで分割するなども試しましたが良い結果は得られませんでした。 こういった試行錯誤の機会が強いモチベーションで行えるところにIUSCONの楽しさがありました。

終盤で環境チェック用のスクリプトを実行し、慌てて直したのもハラハラして楽しかったです。

f:id:morihaya:20210826015049p:plain
isucon11-hayashi02

DBのチューニングであれば、個人的にはMariaDBより断然PostgreSQLの方が勘所があるのですが、異種間マイグレーションをするには冒険心が足りませんでした...


今回もたくさんの反省点を持ち帰りましたが、それらも含めて素晴らしく楽しい8時間でした。

次回は以下をしたいです。

  • コードをざっくりとでも読みきる
  • alpでの分析が浅すぎたのでもう少し使い慣れておく

まとめ

ISCONに参加して改めて開発に対するモチベーションを高めることができました。
来年の自分たちはもっとできるはず!という気持ちで開発に取り組んでいきたいと思います。


オイシックスでは一緒に開発を行うメンバーを募集しています。
あわせて来年一緒にISCONに参加してくれるメンバーも募集しています!

*1:その時のレポートはこちら

*2:アプリケーション担当の北原がGo言語を得意としていることもあり

*3:失格したチームを除くと 174位/529位

*4:競技時間中の最終スコアは25,356

*5:APMは北原が担当

Oisix ra daichi Creator's Blogはオイシックス・ラ・大地株式会社のエンジニア・デザイナーが執筆している公式ブログです。

オイシックス・ラ・大地株式会社では一緒に働く仲間を募集しています