Rust の Web Framework、 actix_webTechEmpower のベンチマークでは、すごいパフォーマンスを示しています。

しかし、業務で使おうと思ったときに、本当のところどうなの?というのは気になるところです。
特に私の所属するアドテク界隈では、ミリ秒単位のパフォーマンス・チューニングが求められます。
実際、当初actix_webで要求レイテンシを満たせませんでした。
しかし、同僚の非常に有用なアドバイスにより打開することができたため、ブログにて公開しようと思った次第です。

パフォーマンスの測定及びチューニングは、下記のケースで行いました。

  • 固定文字列を返すだけ
  • 100msスリープしてから固定文字列を返す
  • 外部サーバにgRPC通信し結果を返す

※ 実は上記以外のケースでもベンチマークを取っております。結果とソースコードはGithubにて公開しました。
https://github.com/x1-/actix_web_benchmark
結果だけ知りたい方はこちらをご覧になられた方が良いかもしれません。

2018.11.01 追記
actix_web は HTTPコネクションが正しく閉じない問題が未だ解決しておりません(TT)
Connection not closed correctly #439
昨日(10/31)、 @legokichi さんから TCP FIN が正しくされていないのでは?とご指摘が入っています。

[続きをもっと見る…]

GCPに限らず、Cloud のマネージド・サービスを使おうと思うと、そのクライアント・ライブラリが提供されているか言語を選択することが重要になってきます。
もちろん、クライアント・ライブラリが提供されていなくても、接続仕様が公開されていれば自力実装しても良いです。
が、普通に考えればサービスを提供するベンダーが提供しているものの方が信頼度が高そうなのは言うまでもありません。

Google の CloudサービスであるGCPのマネージド・サービスのクライアントですと、Go, Java, JavaScript(Node.js), Python, Ruby においてはクライアント・ライブラリが提供されています。
また、APIs のクライアント・ライブラリでは、上記にプラスして .NET, PHP, Objective-C, Dart などが提供されています。

想像通りですが、Rustなんて影も形もありません。
そこで敢えてRustでGCPマネージド・サービスに挑もうとするとすると茨の道に見えたのですが、やってみたら意外とあっさりできてしまったのでこのブログに書くことにしました。

[続きをもっと見る…]