ISUCON7の予選に出た
isucon7の予選に出ました。
チームメンバーは、会社の同期のメンバーと参加。 isucon5, 6ときたのでこれで3回目。
採用したのはGolang. 今回は最終スコアは47,418。ベストスコアは75571。 304の壁は乗り越えられず帯域問題を解決できませんでした。 悔しいけど、これが実力なのねーという感じ。
反省会です #isucon pic.twitter.com/Kcah6eigg5
— Tsubasa (@chocopie116) 2017年10月22日
ラーメンの量もまた多く、ラーメンの厳しさも味わいました #isucon pic.twitter.com/PIrZjt7FCz
— Tsubasa (@chocopie116) 2017年10月22日
やったこと
テーブルスキーマ整理してる段階で、あ、これバイナリだわみたいなことに気づいた。 DBのところの転送無駄じゃね?ってことでスクリプトでサクッとlocalに画像ファイルを書き出して全台配ったりした(この時1台で配ってたらよかったのかな) その後チームメンバーがベンチを回してボトルネックがインターネットからの通信があるところの帯域という問題がわかった。 シコシコN+1をなくしたり、/initializeみたら、userテーブルは更新なかったので全部メモリにのっけたり等のアプリケーションコードの改善をやってました。
よかったこと
isucon5の時は死にたくなったけど、まぁ少しは貢献できた。
- AWS環境にアプリケーション構築した(開発環境)
- どんな問題がきても変わらない開始直後〜方針決めの素振りをきちんとした
- アプリgit管理するとか、DBバックアップするとか、各種ミドルウェアのconfの設定するとか
- テーブル構成把握するとか
- チームで何がボトルネックか全員落ち着いて行動できた。
- 推測するな、計測せよ
- ボトルネックを意識して、解くべき問題について考えた
- ボトルネックの解決策について話し合いながら進められた
- 複数の選択肢を意識しながらチームで会話して進めることができた
- alp(web serverのアクセスログ 統計ツール)
- pathを簡単にまとめられるのよかった。(/icons/xxxx を全て /iconsにするとか)
- goreplay (https://github.com/buger/goreplay)
- VCRという概念があって、http requestを保存・再現することができるもの(ビデオデッキの録画・再生みたいなもの)
- ベンチマーカーのリクエストを保存しておいて、再現するみたいなことが簡単にできる
- ベンチマーカーみたいにレスポンスの挙動は確認できないけどまぁ十分。
- 普通に仕事でも使えるなとおもった
- 開発サーバーでdocker-compose upすると、MySQLの複数versionとredisが立ち上がるようにしておいた
- レギュレーション超意識して読み込んだ
- 事前レギュレーションからは複数台構成をよみとけた。
- 本番レギュレーションもチーム全員で音読した。
- intellijつかってさくっとコードかけてよかった。
- やべわかんねって手を止めずに、手を動かしつづけながら、思考し続けながらある程度動けたこと
ダメだったこと
- golangのコードかくスピードもっと早くしたい
- アプリ改善で詰まりそうな時はペアプロとかしたけど、並行で作業できるようにしたい
- アクセスログや、pprof、pt-digest等でアプリケーションのボトルネックは見れるけど、サーバー単位でのボトルネック見るのとかはまだ全然ダメ。
- 帯域のつまりを解決するために304返すためのアイディアをもっていなかった。
次頑張りたいこと
- cacheに関連するリクエスト・レスポンスヘッダ周りは一度整理しておきたい
- ISUCONでgolang熱があがったのでもうちょっとプロダクトでgolang使っていきたい
- アプリケーション任せろみたいな頼りがいと自分の中での引き出しはもっと増やしたい
- redis便利なので使っていきたい(正直GETとSETしか使ってないw)
なんだかんだ成長はしているんだおるけど、ISUCONや業界のエンジニアの成長の凄さをいつも感じた
僕は、ついてゆけるだろうか 君のいない世界のスピードに
みたいな気持ちになった(BLEACH)
改めて運営の皆様ありがとうございました。 2日で1000台以上のプロビジョニング ベンチマーカーの圧倒的快適さ 予選から複数台構成(色々考える事が多くて楽しかった) 細部に至るまで圧倒的な準備を感じました。これぞイベント運営というのをみさせていただきました。