最近のgRPCでベンチマークをとってみた(C++のみ)
gRPCの速度ってどのくらいなんだろ、と思っていたところ、mattnさんの以下の記事を発見しました。早速、githubからcloneさせていただいて試したのですが、やはり1年ほど前の記事であるため、ヘッダファイルやらメソッドなどに変更が入っていてそのままでは通りませんでした。
ということで、とりあえずmakeが通るようにして測ってみました。(とりあえず、というのはSSLの有効化が出来ておらず、TCPでの接続になっているからです)
https://github.com/nori0428/grpc-example-cpp
さて、これでベンチマークをとったところ、
MBP: 2.53GHz Core2Duo, Yosemite(v10.10.5) Mem: 4GBの環境で、
$ time seq 1000 | xargs -n 1 ./client mattn
real 0m9.839s
user 0m3.208s
sys 0m3.520s
$ time seq 1000 | xargs -n 1 ./client
real 0m5.806s
user 0m1.914s
sys 0m1.362s
こんな感じでございました。IDLからRPCコードの自動生成が楽でいいですね。
と以上で終わりなんですが、ここは弊社作msgpack-rpc互換ライブラリの性能と比べたくなるじゃないですか。ということで、
https://github.com/nori0428/lrpc-example-cpp
ほぼ同じことするサンプルを作ってみました。なお、めんどくさくてstd::make_sharedとか使ってるので、c++11有効な環境でお試しくださいませ。
結果ですが、
$ time seq 1000 | xargs -n 1 ./client mattn
real 0m7.659s
user 0m2.346s
sys 0m2.522s
$ time seq 100 | xargs -n 1 ./client
real 0m1.754s
user 0m0.778s
sys 0m0.435s
transportはHTTP/2ではなくWebSocketですし、ListPersonの方はstreamの読み方等がちょっと違った感じなのであれですが、速度的に勝てたのはmsgpackさまさま、という気持ちです。このlinear-cppでは他にもいろいろ余計なことしてるので、他のmsgpack-rpcライブラリではもっと速度が出るんじゃないかな、と思います。
ではでは、皆様よいお年を。