现在各个公司都有自己的序列化框架,层出不穷,下面是各种序列化反序列化框架的性能比较和技术场景选型。
Java各种序列化性能比较
从上图可得出如下结论:
XML
序列化( Xstream)无论在性能和简洁性上比较差;Thrift
与Protobuf
相比在时空开销方面都有一定的劣势;Protobuf
和Avro
在两方面表现都非常优越。
选型建议:
以上描述的五种序列化和反序列化协议都各自具有相应的特点,适用于不同的场景。
- 对于公司间的系统调用,如果性能要求在 100ms 以上的服务,基于 XML 的 SOAP 协议是
一个值得考虑的方案。 - 基于 Web browser 的 Ajax,以及 Mobile app 与服务端之间的通讯, JSON 协议是首选。对
于性能要求不太高,或者以动态类型语言为主,或者传输数据载荷很小的的运用场景, JSON
也是非常不错的选择。 - 对于调试环境比较恶劣的场景,采用
JSON
或XML
能够极大的提高调试效率,降低系统
开发成本。 - 当对性能和简洁性有极高要求的场景,
Protobuf
,Thrift
,Avro
之间具有一定的竞争关系。 - 对于 T 级别的数据的持久化应用场景,
Protobuf
和Avro
是首要选择。如果持久化后的数据
存储在 Hadoop 子项目里, Avro 会是更好的选择。 - 由于
Avro
的设计理念偏向于动态类型语言,对于动态语言为主的应用场景, Avro 是更好
的选择。 - 对于持久层非 Hadoop 项目,以静态类型语言为主的应用场景, Protobuf 会更符合静态类型
语言工程师的开发习惯。 - 如果需要提供一个完整的 RPC 解决方案, Thrift 是一个好的选择。
- 如果序列化之后需要支持不同的传输层协议,或者需要跨防火墙访问的高性能场景,
Protobuf 可以优先考虑。
转载请注明:印迹. » 各种序列化与反序列化的性能和使用场景