(追記あり) AWS Lambda が正式に Rust 対応したので KinesisFirehose にくっつけて性能計測した #rustlang #rust_jp
これは Rustその2 Advent Calendar 2018 の 2 日目の記事ということにしました。
結果(2018/12/3 更新)
ありがたい PR のおかげで更新できました! tatsuya6502 さんありがとうございます!
246k record を 57.6 秒で処理したので、4,270 record/sec でなんと 4,000 の大台突破です。
修正内容は僕がサボったところを指摘いただいた感じでした。むしろすみません。
Runtime | record/s |
---|---|
Python | 142.8 |
Rust(on Python 2.7) | 2348.6 |
Golang | 3910.0 |
Rust(on Custom Runtime) v1 | 3967.2 |
Rust(on Custom Runtime) v2 | 4270.0 |
ということで、4,000 を越えました!すごい!!
成果物
これまでのあらすじ
rohki.hatenablog.com rohki.hatenablog.com
初めて Kinesis Firehose で計測してから 1 年弱、 Golang で計測してから 10 ヶ月弱…
ついに正式対応ですよ! なんかもっとすごかったけど!! ということで、ここまできたら計測せねばということでやりました。
実装
去年に作ったやつを適当にちょちょっと書き換えたら動きました。時間は 2 時間ぐらい?
この辺は数をこなしたおかげかと思っとります。
ほぼ一緒とも言う
— rohki (@r_ohki) 2018年12月2日
せっかく linux 環境作ったし、そのまま build したやつ動くかなーとやってみた結果、llibc のバージョンで怒られました…。
そして glibc すか…
— rohki (@r_ohki) 2018年12月2日
静的リンクすればいいんんだろう、ということで musl 版を以下を使って作りました。 rohki.hatenablog.com
コマンドは以下です。
cross build --target x86_64-unknown-linux-musl --release
計測環境
- Runtime: Custom Runtime
- メモリ: 128 MB
いつも通りの下限性能です。
これまでと同じどおり、Kinesis Data Generator で Apache Log っぽいものを投入して、時間あたりでどれだけ処理できるかをみます。
結果(再掲)(2018/12/3 更新)
246k record を 57.6 秒で処理しました。
Runtime | record/s |
---|---|
Python | 142.8 |
Rust(on Python 2.7) | 2348.6 |
Golang | 3910.0 |
Rust(on Custom Runtime) v1 | 3967.2 |
Rust(on Custom Runtime) v2 | 4270.0 |
と、いっても最大風速の性能がならんだ、というところです。
感覚的には 3800 から 3700 が平均性能といったところでしょうか。それでも十分速いです。
今回は速度も安定してました。毎回 4,200 record/s を安定して出していたので、予測しやすくなってます。
んで、実戦投入できる?
熱意と覚悟、Lambda のコスト削減に並々ならぬ事情があれば。
Lambda の仕様を考慮した build まわりのややこしさがどうしたって足を引っ張ります。
OpenSSL の反省を踏まえて今回の GLIBC はさくっと対応できましたが、Lambda の仕様と対応策の検討が追いつかないとひたすらハマる落とし穴でした。
動いてますがなんか見落としがありそう…やるのであれば場所を選んで少しずつって所かと思います。
さいご
ついに正式対応。感慨深い…
書いてさらしたら PR もらえた。ありがたい…