でこてっくろぐ ねお

でこてっくろぐ(http://dekokun.github.io/)から進化しました。でこらいふろぐ(http://dekolife.hatenablog.com/)の姉妹版。デコテックログ(deko tech log)である

ISUCON に Rust で参加して予選敗退

以下エントリでも書いた通り、今年はRustで参加した。1130点くらいだった。

dekotech.dekokun.info

社内で "Rustで爆死したい人" と募ったら、id:Krouton, id:stefafafan 2名の仲間が集ってくれた。 私とKroutonは趣味でRustを書いていたけどRustでWebサービスは一切書いたことがない、stefafafanはRustが初めて、という布陣。

感想

  • すごく楽しかった。来年もRustで出たい
  • Rustのcompile速度をなんとかせねば

事前準備

当初はRustで参考実装が出るとは思っていなかったので、とにかく準備が大切だということで毎週3人で集まっては次にやることを決めて、1週間そこで出た宿題をやって、また集まるということを繰り返していた。

また、3人で休日1日潰してリハーサルを行った。 準備の詳細は以下チームメイトのエントリにある通り stefafafan.hatenablog.com

当日やったこと

  • ローカルPCで動くものを準備していて、それをコピペしつつ当日1時間くらい時間をかけたがうまくローカルでブラウザから動作確認できず不発だった
    • 今みたら docker-compose の port の bind の設定が間違ってた
    • 初回compileにめちゃくちゃ時間がかかるのでtry & errorがやりづらかった
  • popularityでsortしつつwhereで絞り込んで25件取得している部分は実はwhereでほとんど絞り込めてないのではないかという仮説のもと、まずpopularityでsortして上から100件を取得し、そこからアプリケーションでfilterして25件に満たなかったらwhere句も付けるようにフォールバックしたら点数上がった
  • テーブルが2つかないしpt-query-digest見てもそれぞれのtableの負荷が高いクエリが同じくらいの数あるしテーブル間でjoinもしとらんなということでDBをサーバ毎に分割した
    • initializeで、他のサーバのinitializeを叩いてDBの初期化をするようにした
  • 最後にメモリキャッシュしようとしたがうまくいかなかった
    • diff Cache estates のキャッシュ by dekokun · Pull Request #17 · dekokun/ISUCON-2020-qualify · GitHub
    • そもそもどの範囲でデータが共有されるのかよく分かってない。多分私達の実装ではthread毎にキャッシュ構造体をcopyしているので、CSV入稿でキャッシュを飛ばしている部分、1thread分しかキャッシュが飛ばない気がした
    • この変更はデプロイしたがエラーが起きるようになって諦めた、人類に、30分でキャッシュ実装を自前で持つのは早すぎると思われた。次回は大人しくserialize/deserializeしつつRedisを活用するということをしたい

ISUCON後にやったこと

  • 3人で振り返りをした
    • KPTで振り返った
  • 本番で不発だったDockerでのローカル開発環境が動くようにした
    • 以下、いい気付きもあった

疑問

  • Rustでcompile速度を上げたかったら、crate分割がいいんかなぁ。。。
    • Rustのcompileに数分かかり、デプロイが結構きつかった

その他良かったこと

  • チームの最初のキックオフでISUCONの意気込みの一つに "アウトプット" を掲げて参加した結果、stefafafanがブログを書いたり、Rustの勉強会のLT発表を申し込んだりして非常に良かった
    • RustのLT会 Shinjuku.rs #12 @オンライン - connpass に皆も参加だ!
    • キックオフのときの意気込みは以下の通り。Kroutonもブログを書いたら(書くって言ってた)、3つの意気込みのうち2つが達成されたということになるので、まずまずなのではないか
      • 初期実装がなくてもRustを貫徹する。Rustを信じろ!
      • 予選突破
      • アウトプット

チームメイトの書いたエントリがめっちゃ味があってよかった。

krazy.tokinia.me

これまでのISUCONの記録

2013年

PHPで予選突破し決勝進出。 dekokun.github.io

dekokun.github.io

2014年

PHPで予選突破し決勝進出 dekokun.github.io

予選のエントリはなかった。

2015年

PHPで予選落ち dekotech.dekokun.info

2016年, 2017年, 2018年, 2019年

ISUCONに毎年参加してるのだがエントリがない… 確かPerlとかGolangとか使いつつ予選落ち

2020年

dekotech.dekokun.info