こんにちは、サイバーエージェント内定者の板谷、佐藤、野見山です。

本日は先日行いました ISUCON7 の本選に内定者でチームを組み参加してきましたのでそのレポートを行います。

ISUCON(Iikanjini Speed Up CONtest) とはお題のWebサービスに対してレギュレーションの中でチューニングを行い、高速化を行うコンテストで、
今年で7回目の開催でオンライン予選は2日間で約400チームが参加している大会です。

 

本選ではLINEさんの新宿オフィスで行われ、10時から8時間の競技時間でどれだけのチューニングが行えるかという形で行われました。


今回参加したメンバーは板谷、佐藤、野見山の3名でチーム Akumi's Lab を組み以下のような役割を組みました。

  • 板谷 - プログラム担当
  • 佐藤 - ミドルウェア・プログラム担当
  • 野見山 - インフラ・ミドルウェア・プログラム担当

お題について

今回の本選のお題は Cookie Clicker をオンラインプレイできるようにしましたという形のゲームで、
ISUCONにちなんでイスの数を増やすゲームがお題になっていました。
サーバは4台構成となっていて、競技開始時には 3台 Webサーバ、1台データベース(以下 DB)サーバという構成になっていました。
 
競技中はチーム内で相談しつつプログラムの改修やネットワーク構成の見直しなどの行っており、
改修を試してはベンチマークテストを回すことを何回も繰り返していき、スコアが付いたり付かなかったりしていました。
 
 
競技中にはLINEさんからコーヒーとクッキーの提供があり、
競技の合間に休憩しつつ、考えるために必要な糖分をチャージしていました!

競技でやったことについて

行ったこととしては3つの事を行い進めていきました。
  • Redis の投入
Redis を投入した時にどういう用途で使っていたかについては次の用途に使っていました。
・ Websocket の接続先を部屋別に保持 (Websocket サーバを固定にしたため終盤に廃止)
・ トランザクション処理を行う部分をDBを使わず Redis 側で全て対応しようとした
この2つの施策はパフォーマンスの低下やベンチマークテストの事後チェックの際に受け取った値とこうあるべき値が1つだけずれており、
考えていた施策は全て失敗してしまった感じがしていました。
競技終了後の slack で
と吐露してました・・・
  • DBやnginx周りのチューニング
ここでは、DB周りはログファイルやバッファの大きさの調整や、nginx の静的ファイルのキャッシュを行えるように調整することや
websocket が切断されにくくするように keep-alive を導入することを行っていました。
  • プログラムの周りの最適化
プログラム周りでは、ここクエリを発行しなくてもプログラム側で対応することが出来そうな部分に対して改修を進めていくことを行っていました。
あわせて Redis を導入していましたので Redis と連携するように改修も進めていました。

 

 

最終的な構成はいろいろと試行錯誤した結果、
4台のサーバを 2台 Webサーバ、 1台 Websocket サーバ、 1台 DBサーバの構成に落ち着きました。

DBに対する負荷を考えると、DBサーバにWeb機能を兼任させるのはさすがに無理だと判断して、DBサーバは単独での運用になりました。
また、Websocket に関してもWeb機能+Websocket だとパフォーマンスに影響与えるかなと思い、単独での運用にしていました。

結果

結果は参加30チーム中23位という結果になりましたが、
無事にスコアが付いたということもあり、課題も多いですが初参加でいい結果を残せることが出来たと思います。
(実はこのベストスコアは競技開始時に初期状態でのスコアを知りたいと思い測ったもので、その値がそのままベストスコアになっちゃいました・・・)
もし、次回もこのメンバーで参加できるとすれば、今年の課題を解消しつつ取り組むことが出来ればいいなと思いました!!