でこてっくろぐ ねお

UbieのSRE。でこらいふろぐ(http://dekolife.hatenablog.com/)の姉妹版。デコテックログ(deko tech log)である

ISUCONに向けてRustでのリハーサルを実施した。採用したRustのライブラリなど

ISUCONでRustで参加する同胞達や、Rustの参考実装を書く人の参考に少しでもなればとこのエントリを書いてます。(いや実際全然わからないのでもっといいの教えて!ってのもあります。はい。)

今年のISUCONはRustで戦います。

なぜなら、私はRustが好きだからです。

しかし、私含めてチームメンバー全員がRustでWebアプリを書いたことがなかったため、毎週ミーティングを行いRustの勉強としてやることを宣言して1週間後に進捗報告をしまたやることを宣伝する、ということを繰り返しています。

ただそれだけではチーム全員で動くISUCONの訓練としては弱いので、ISUCONを模したリハーサルをしてみました。

お題

お題としてはISHOCON2というのを使わせてもらいました。以下理由でISHOCON2を選定しました。 ただ、もちろんRust実装なんてものはないので、リハーサルはそれをRustで実装し直すところからスタートです。

  • ベンチマーカー、webアプリ共にAWSのAMIがあるため、事前準備がほぼ0で始められる
    • 実際、事前準備15分ほどで開始できた
  • 実際にISHOCON2を利用したコンテストが何度か開かれているという安心感
    • ISHOCON2のREADMEに書いてあった
  • 1人で解くことを想定してだと思うが普通のISUCONよりも簡単であり、全部を1からRustに書き換えるうちのチームが最初に取り掛かる題材としては適切な難易度に思える

github.com

Rustで再実装するために使ったライブラリ群

webアプリケーションフレームワーク

DB接続ライブラリ

テンプレートエンジン

  • tera
  • PythonのJinja2からインスパイアされたテンプレートエンジン

当日の進捗

  • 皆、Rustでなんとなくエンドポイントの実装ができるようになった
    • が、全然実装は進まなかった。Rustだけ書いていたわけではない(アクセスログの解析や、ローカル開発環境を整えるのに異常に時間がかかった)が、それにしても全然実装が進まなかった。

これはやばい、とにかくRustの初期実装が必要だ、と思っていたら、以下でRustの参考実装があるらしいということがわかり、なんとか首の皮がつながった感じがありました。参考実装に応募してくれた皆さんには感謝感謝です(実はうちのチームからも1人応募したけど参考実装者には選出されなかった)

isucon.net

ちなみに、参考実装者誰か出てくれないかという一心でrust-jpのslackに書き込んだらそれを見て応募してくださった方もいるようで、本当にありがたいなと思いました。めちゃくちゃ嬉しかったです。maguroさんありがとうございます!

書いたプログラム

以下リポジトリで実装をしていました。 github.com

やった感想

リハーサルの後にチーム全員で振り返りを行いました。Rustに関係ありそうなところをピックアップします。

  • crateのコンパイルに大変時間がかかるので、必要なcrateは事前に列挙して最初からコンパイルしておくと便利
  • Rustのバージョンを変更させるとcrateがコンパイルしなおしになり大変時間がかかるのでRustのバージョンは事前に決めておいて最初からrust-toolchainファイルで固定しよう
  • vscodeのRemote SSHを使ってサーバ上で、rust-analyzerなど使いながら開発するとメモリが3GBほど食われて非力なサーバで複数人が開発すると死ぬ
    • ローカル開発環境を作りました

最後に

Rustの優秀さを知らしめるぞ!