RPC序列化方式优缺点

Posted 少羽大怪兽

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RPC序列化方式优缺点相关的知识,希望对你有一定的参考价值。

RPC协议作用

  RPC协议是基于TCP、UDP等底层协议传输,在应用层用于协定服务方与调用方如何通信的规范。通过统一的协议,可以让服务方与调用方可以正确解析互相发送的数据。

RPC序列化选择的维度

  1. 性能及效率:指讲一个对象序列化所花费的时间;
  2. 空间开销:指的是序列化一个对象所占用的空间。因为RPC中需要在序列化后进行通信,将对象在网络中传输,所以同样会影响带宽及包传输速率;
  3. 安全性:如果安全性存在问题,则容易被攻击入侵;
  4. 通用性和兼容性:是否支持跨语言、跨平台,以及支持的序列化对象的程度。例如有些协议对一些数据类型不支持等问题;

各种序列化方式的对比

  优点 缺点
JAVA原生 兼容性较好 性能较差,序列化后对象较大,不支持跨语言
JSON 可读性好,支持跨语言 性能及空间开销较大
Hessian 性能及空间开销小,效率高,较多语言支持 兼容性不太好(Linked 系列,LinkedHashMap、LinkedHashSet 等,但是可以通过扩展 CollectionDeserializer 类修复;Locale 类,可以通过扩展 ContextSerializerFactory 类修复;Byte/Short 反序列化的时候变成 Integer)
Protobuf 性能及空间开销小,效率高。通过IDL支持跨语言类型,效率高

单语言时需要定义IDL,如单纯java语言,可使用ProtoStuff。

不支持 null;ProtoStuff 不支持单纯的 Map、List 集合对象,需要包在对象里面。

 

以上是关于RPC序列化方式优缺点的主要内容,如果未能解决你的问题,请参考以下文章

从RPC开始序列化

RPC里面的序列化反序列化以及拆包粘包

布道微服务_05RPC远程服务调用的实现

Go通关22:如何通过 RPC 来实现跨平台服务!

RPC之对象序列化/反序列化

类继承导致 RPC 调用 msgpack 序列化问题分析