Dubbo序列化机制!
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 实现的序列化。