Python RPC方法对比:json vs protobuf vs msgpack

发布网友 发布时间:2024-09-27 19:07

我来回答

1个回答

热心网友 时间:2024-09-30 20:32

远程过程调用(RPC)在技术选型上有很多选择,例如FastAPI、gRPC、XML-RPC、msgpack-RPC等。其中,序列化与反序列化是RPC中关键的部分,常用的序列化方法包括xml、json、protobuf和msgpack。本文将基于Python语言,对基于不同序列化方法的RPC实现进行对比分析。

以一个简单的“加和”服务为例:服务提供方接收一个列表参数,将列表中的数字相加后返回结果。首先,计算纯本地调用(无RPC)的耗时,执行10000次,并考虑“低数据量”和“高数据量”两个场景。

json-FastAPI

json作为一种广泛应用的序列化方式,具有良好的可读性,常用于前后端通信。本文选择性能较好的FastAPI进行测试。

server端

通过uvicorn启动服务

client端

执行10000次耗时情况

gRPC

protobuf是一种性能优于json的序列化方式,但其可读性较差,序列化后为二进制不可读。本文选择gRPC进行基于protobuf的RPC调用测试,这也是后端服务之间广泛采用的一种RPC方式。

首先,需要定义一个proto文件,然后编译生成pb2文件和pb2_grpc文件。

server端

client端

执行10000次耗时情况

msgpack-RPC

msgpack同样是一种二进制传输协议,比json更小、更快,整体性能比protobuf更高。它不需要预先定义proto文件,因此没有相应的数据校验,这也可能导致项目维护成本较高。本文选择官方的msgpack-rpc进行基于msgpack的RPC调用测试。

server端

client端

执行10000次耗时情况

整体对比

protobuf相比json快了1倍,msgpack相比protobuf快了10倍!尽管protobuf在可读性方面不如json,msgpack在数据校验方面也不如protobuf,但在前后端通信中,为了可读性,通常采用json;在后端不同服务的相互协作中,采用公共的protobuf(proto);对于完全自己维护的不同子服务的通信,可以尝试使用msgpack。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com