技术层面
序列化空间开销,即序列化结果产生的码流大小,码流过大会对带宽、存储空间造成较大的压力
序列化时间开销,即徐丽华过程消耗的时长,序列化消耗时间过长会拖慢整个服务的响应时间
序列化协议是否支持跨平台、跨语言,公司内部存在异构系统通信需求时,往往要求RPC架构采用的序列化协议支持跨平台、跨语言
可扩展性/兼容性
成熟度及支持的数据结构的丰富性也是一个需要重点考量的方面
其他层面
技术的流行程度,背后是否有大公司技术支撑,是否是一个长期发展的持续进化的技术,是否已经得到业界的充分验证
学习难度和易用性
选型建议
对于公司间的系统调用,性能要求在100ms以上的服务,基于XML的SOAP洗衣是一个值得考虑的方案
基于Web Browser的Ajax,以及Mobile APP与服务器之间的通信,JSON协议是首选。对于性能要求不太高,或者动态类型语言为主,或者传输数据载荷很小的运用场景,JSON也是一个非常不错的选择
对于调试环境比较恶劣的场景,采用JSON或XML能够极大的提高调试效率,降低系统开发成本
对于性能和简洁性有极高要求的场景,Hessian,protobuf,Thrift,Avro之间具有一定的竞争关系。其中Hessian是在性能和稳定性同时考虑下最优的序列化协议
对于T级别的数据持久化应用场景,protobuf和Avro是首要选择。如果持久化后的数据存在Hadoop子项目里,Avro会是更好的选择
由于Avro的设计理念偏向于动态类型语言,对于以动态语言为主的应用场景,Avro是更好的选择
对于持久层非Hadoop项目,以静态类型语言为主的应用场景,protobuf会更符合静态类型语言工程师的开发习惯
对需要提供一个完成的RPC解决方案,Thrift是一个好的选择
对于序列化后需要支持不同的传输层协议,或者需要跨防火墙访问的高性能场景,Protobuf可以优先考虑