「どうしてもRustでISUCONに参加したい」というあなたに

残念ながら ISUCON6 では Rust の参考実装は提供されないのですが、 「おれ、どうしてもRustでISUCONに参加したいんだよね」という方や 「なんか他のチーム出し抜く最終兵器的なのないかなぁ」という方のために、 Pixivさんの社内ISUCON2016 用のRust参考実装を書いてみました。

https://github.com/hhatto/pixiv-isucon2016-rust

これをベースにすればRustでISUCONに参加することも夢ではないと思います。 ただし、ベンチマーカーでのテストはfailがでないことを確認済みですが、 一部手抜き実装があり他の参考実装の通りの機能要件は満たせていないと思いますので、 その点はご容赦を。

パフォーマンス

t2.microインスタンスでベンチマーカーとアプリを全て動かして測定した結果は以下の通りです。

 go
 --
 {"pass":true,"score":2725,"success":2505,"fail":0,"messages":[]}

 rust
 ----
 {"pass":true,"score":1245,"success":1077,"fail":0,"messages":[]}

なんとGoの半分のパフォーマンスが出ています!!

実装

規模としては空行込みで1000行くらい。 以下のようなフレームワークやライブラリを使っています。

  • WAF
    • Nickel.rs
    • かなりちいさい。ログ出力すらない。いろいろなパーツを組み合わせて使う感じです。
  • MySQLドライバ&コネクタ
  • テンプレートエンジン
    • Tera
    • nickel-tera リクエスト拡張を提供するだけのプラグインは書いた。少しだけ使うの楽になります。
  • セッション
    • nickel-jwt-session
    • 参考実装はmemcacheをバックエンドにしていますが、これはオンメモリ。
  • その他

というような感じです。 ありがとうございました。