Dubbo序列化机制!

Apache Avro:

Avro 依赖于用户自定义的 Schema,在进行序列化数据的时候,无须多余的开销,就可以快速完成序列化。

生成的序列化数据也较小,当进行反序列化的时候,需要获取到写入数据时用到的 Schema。

在 Kafka、Hadoop 以及 Dubbo 中都可以使用 Avro 作为序列化方案。

FastJson:

阿里开源的 JSON 解析库,可以解析 JSON 格式的字符串。

它支持将 Java 对象序列化为 JSON 字符串,反过来从 JSON 字符串也可以反序列化为 Java 对象。

FastJson 比 Jackson 快 20% 左右,但是近几年 FastJson 的安全漏洞比较多。

Fst(Fast-Serialization):

100% 兼容 JDK 原生环境,序列化速度大概是JDK 原生序列化的 4~10 倍。

序列化后的数据大小是 JDK 原生序列化大小的 1⁄3 左右。

Kryo:

目前 Twitter、Yahoo、Apache 等都在使用该序列化技术,特别是 Spark、Hive 等大数据领域用得较多。

Kryo 的特点是 API 代码简单,序列化速度快,并且序列化之后得到的数据比较小。

Hessian2:

Hessian2 序列化之后的数据可以进行自描述,不会像 Avro 那样依赖外部的 Schema 描述文件或者接口定义

在 Dubbo 中使用的 Hessian2 序列化并不是原生的 Hessian2 序列化

  • 而是阿里修改过的 Hessian Lite,它是 Dubbo 默认使用的序列化方式

其序列化之后的二进制流大小大约是 Java 序列化的 50%

  • 序列化耗时大约是 Java 序列化的 30%,反序列化耗时大约是 Java 序列化的 20%

Protobuf(Google Protocol Buffers):

相比于常用的 JSON 格式,Protobuf 有更高的转化效率,时间效率和空间效率都是 JSON 的 5 倍左右。

Protobuf 可用于通信协议、数据存储等领域,它本身是语言无关、平台无关、可扩展的序列化结构数据格式。

GRPC 底层就是使用 Protobuf 实现的序列化。