isucon
isucon8

ISUCON9 に出る自分に言いたいこと(ISUCON8 敗退記録)

まず何より ISUCON 初心者で、実は予定もあるような感じだけど出てみたいといった自分と一緒に参加してくれた @overlast氏, @sugyan氏 ありがとうございました。あと運営の皆様お疲れさまでした。

今年は余裕の予選敗退だったけど、来年は(も)優勝目指して参加や!

(テンパらなければ予選はいけるで君)

ISUCON 2019 に出る自分へ

  • とりあえず ISUCON 2018 のタイムライン的なものを読み返して悔しかった感半分行けてないところを思い出すの半分したらいいんじゃないかな。
  • これはチーム戦です。去年は実感が無かったとおもいますが、そういうことです。
  • 環境はほぼ完璧に構築しておくべし。個人的な敗因の半分ぐらいはこれ。特に言語が決まっているなら、前年の環境がチェックアウトしてコマンド一発で動くかどうかは意識しておくべきだった。
  • 他の準備項目(細かい所含めて)
    • git repo作る
    • みんなの公開鍵は集めておく?
      • すぎゃん氏が git から抜いてきてくれててすごかった
  • 集中できる場所はないと駄目ですね。まぁ去年は言い訳半分スケジュール半分でこんな感じで面白かったけど。勝ちに行くとよいでしょう。https://twitter.com/LINE_DEV/status/1040847262690078721
  • ansible 変に使って時間を使ってしまったかも。単純なコマンド集をどんどん集めていくとそれだけでよかった。3台並列にログインして git pull; sudo systemctl restart torb.perl 的な。
  • プロファイルの仕方も慣れておくべし。ltsv の見方、ツール使うとたぶんいいし、あらかじめ考えておけば。。
  • mysql も見るところなんとかなれば
    • サブクエリは当然だけど
    • FOR UPDATE がやばい
  • 自分は比較的nginx ログ芸が得意なので覚えておくといいでしょう。普段の業務でつかってるアレです。
  • ネットワークは
    • ltsv の集計でボトルネックになってるかどうかは判る、ぐらいかなぁ
  • マシンの使い方、人ごとに別のマシンで try&error しまくるとかもよかったかもなぁ。
  • ルールとか雰囲気的な学び
    • 余分なフィールド増えても駄目なの!? って気付くのにけっこうかかってしまったので良くない。↓に続く
    • Fail した理由は結構詳細に出る。つまり十分なテストが書かれているわけでもっと Go BOLD に行けたのでは。これが(コーディングが遅いことを除けば)残りの半分ぐらいかなぁ。
    • 環境構築に罠は基本的に無いから信じて色々つっこめば良かった。仕事だと、このビルドは本当に安定なのか・・・? みたいな所からはいらないといけないことも多いので。
  • alp は入れておこう。っていうか採点ルールをみて Excel 芸発揮できたな。。
  • MBP 13 はきつい。。。

ISUCON 2018 のタイムライン的なもの

午前中

  • 当日の朝ぐらいに ISUCON 用のリポジトリ作りますか。みたいな事言われて実際それは作ってたので共有したんだけど、事前準備がそれぐらいになってしまった。
  • 気付いたら 10:00 で、東京と奈良を LINE 電話で繋いでの ISUCON が始まった。
  • へー、サーバーが 3台用意されて、コンソールからべんちーまーくできて、そういうことか完全に理解した(ry、って初めてなったのかこのタイミング。
  • すぎゃんしが公開鍵ログインできるようにまとめてくれたりしてる裏で、自分は作成したキーを各マシンに配って git pull/git push できるようにしてたりしたらなんとなく午前中が終わっていた。
  • スコアはデフォルト 1,500 ぐらい。 (?)
  • すぎゃんしがトップページの最適化を、overlast 氏がインフラ構築(1台の nginx で受けて、2台に流す)、自分が MySQL のクエリとインデックスを見ようって話になった。(けどコミットログみたら行数の少なさに引く
  • このあたりですぎゃーん氏が『perl の hashmap って。。。。どう作るんだっけ?』みたいな事を言って、電話の向こうで効いてた overlast 氏が {key => "value"} を slack で送ってくれて緊張がほぐれて良い感じになる。

12:00~

  • ここらへんで別のイベントの設営手伝ったりもしつつ(まぁ、これが本業なので)、クエリを見てどーしょうも無いところではなく、一個シートの空き数を count しとくかということで ISUCON やデプロイへの慣れも踏まえてやった。(これはやりきれた)
    • が、このあたりは事前に問題トレースしておけばもうチョット重いところから手を付けられたのでは説はある
  • 余分なフィールド返すと落ちるっていうのに気付くのもこのぐらい(?)。カラム追加しただけで落ちるのそういうことかと。
    • でも対応策として、ちゃんと select * を分割して書いたらよかったのは間違いない
  • IS NULL してる部分もあって、あーこれ INDEX 効かないから直したいなぁみたいな所もあったけど結局手は付けられず。
  • 最終的には Event が一番の勝負所だったんですよねぇ。。。気が落ち着いたら読もう。

16:00~

  • このあたりから結構質問とかも出て、すぎゃん氏とそれぞれ質問対応とかしてたりしながら、個人的には諦めたくは無かったが時間は無常にフィニッシュ。

最終スコア4,000弱。。いやー難しい。