ソモサン

私rohkiによる活動や読書の記録をつらつらと書くページです

(追記あり) AWS Lambda が正式に Rust 対応したので KinesisFirehose にくっつけて性能計測した #rustlang #rust_jp

これは Rustその2 Advent Calendar 2018 の 2 日目の記事ということにしました。

結果(2018/12/3 更新)

f:id:rohki:20181204083205p:plain

github.com

ありがたい 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 を越えました!すごい!!

成果物

github.com

これまでのあらすじ

rohki.hatenablog.com rohki.hatenablog.com

初めて Kinesis Firehose で計測してから 1 年弱、 Golang で計測してから 10 ヶ月弱…

aws.amazon.com

ついに正式対応ですよ! なんかもっとすごかったけど!! ということで、ここまできたら計測せねばということでやりました。

実装

去年に作ったやつを適当にちょちょっと書き換えたら動きました。時間は 2 時間ぐらい?
この辺は数をこなしたおかげかと思っとります。

せっかく linux 環境作ったし、そのまま build したやつ動くかなーとやってみた結果、llibc のバージョンで怒られました…。

静的リンクすればいいんんだろう、ということで 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 更新)

f:id:rohki:20181204083205p:plain

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 もらえた。ありがたい…