概要
- タイトルは本当は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を参考にして動く状態に持ってきたので、パフォーマンスを最適化したりとかはしていないですし、どのような状況でパフォーマンスが最高になるのかもよく知りません。
一応比較に用いたプログラムはこちらに置いてあるので、参考にしてみてください。