gRPC-webを使ってJSONとgRPCどっちが速いのか検証してみた


概要

  • タイトルは本当はREST API vs gRPCが正しい
    • REST APIでサーバー/クライアント通信する時にjsonでやり取りすることが多いと思うのでこのタイトルにした
  • あまり情報がない中公式のexampleを参考にし、gRPC-webも取り入れて動くプロジェクトを作った
  • 比較方法は同じデータをクライアントからサーバーに任意の回数「シリアライズ->リクエスト->レスポンス」の時間を比較
    • シリアライズされたデータで速度検証してもあまり意味がないと判断したため

作ったリポジトリ -> https://github.com/jigengineer/json-vs-protocol-buffers

結果

比較は、それぞれ1000回試行するのにかかった時間を計測。

n JSON gRPC
1 3.614 sec 4.247 sec.
2 3.586 sec. 4.637 sec.
3 3.608 sec. 4.57 sec.
4 3.656 sec. 4.836 sec.
5 4.316 sec. 4.278 sec.
6 3.55 sec. 4.387 sec.
7 3.483 sec. 4.303 sec.
8 3.567 sec. 4.468 sec.
9 3.603 sec. 4.481 sec.
10 3.575 sec. 4.402 sec.
ave. 3.656 sec. 4.461 sec.

圧倒的にJSONの方が高速である。

あとがき

この比較だと、シリアライズにかかる時間が大きいのか、ネットワークロードが重いのかがまだわからないことと、gRPC自体も複雑で、いろんな通信方式があるようなので、gRPCの方が遅いという結論づけはできません。

明確なのは、「シリアライズ+リクエストしてレスポンスをもらう」一連の流れを連続して複数回行う場合、JSONの方が速かったということです。

ちなみにもう少し言うと、gRPCについてそこまで詳しくないので、公式リポジトリのexampleを参考にして動く状態に持ってきたので、パフォーマンスを最適化したりとかはしていないですし、どのような状況でパフォーマンスが最高になるのかもよく知りません。

一応比較に用いたプログラムはこちらに置いてあるので、参考にしてみてください。