JSON、Protobuf、Thrift、MessagePack 对比和开发指南
admin
2023-03-08 17:21:00
0

主流序列化协议优缺点和网站推荐

JSON
优点

1 简单易用开发成本低
2 跨语言
3 轻量级数据交换
4 非冗长性(对比xml标签简单括号闭环)

缺点

1 体积大,影响高并发
2 无版本检查,自己做兼容
3 片段的创建和验证过程比一般的XML复杂
4 缺乏命名空间导致信息混合

总结:最简单最通用的应用协议,使用广泛,开发效率高,性能相对较低,维护成本较高。

Protobuf

Protobuf是一种以有效并可扩展的格式编码结构化数据的方式。

优点

1 跨语言,可自定义数据结构。
2 字段被编号,新添加的字段不影响老结构。解决了向后兼容问题。
3 自动化生成代码,简单易用。
4 二进制消息,效率高,性能高。
5 Netty等框架集成了该协议,提供了编×××提高开发效率。

缺点

1 二进制格式,可读性差(抓包dump后的数据很难看懂)
2 对象冗余,字段很多,生成的类较大,占用空间。
3 默认不具备动态特性(可以通过动态定义生成消息类型或者动态编译支持)

总结:简单快速上手,高效兼容性强,维护成本较高。

参考网站

官网和指南
https://developers.google.com/protocol-buffers/
github
https://github.com/protocolbuffers/protobuf
netty 对 protobuf 协议的解码与包装探究
https://www.cnblogs.com/tankaixiong/p/6366043.html
protobuf开发原则和缺陷详解
https://my.oschina.net/cxh4905?tab=newest&catalogId=387288

Thrift(Facebook)
优点

1 序列化和RPC支持一站式解决,比pb更方便
2 跨语言,IDL接口定义语言,自动生成多语言文件
3 省流量,体积较小
4 包含完整的客户端/服务端堆栈,可快速实现RPC
5 为服务端提供了多种工作模式,如线程池模型、非阻塞模型

缺点

1 早期版本问题较大,0.7以前有兼容性问题
2 不支持双通道
3 rpc方法非线程安全,服务器容易被挂死,需要串行化。
4 默认不具备动态特性(可以通过动态定义生成消息类型或者动态编译支持)
5 开发环境、编译较麻烦

总结:跨语言、实现简单,初次使用较麻烦,需要避免使用问题和场景限制。

参考网站

Thrift: The Missing Guide
https://diwakergupta.github.io/thrift-missing-guide/
和 Thrift 的一场美丽邂逅
https://www.cnblogs.com/cyfonly/p/6059374.html
由浅入深了解Thrift(一)——Thrift介绍与用法
https://blog.csdn.net/houjixin/article/details/42778335

MessagePack

JSON、Protobuf、Thrift、MessagePack 对比和开发指南

优点

1 跨语言,多语言支持(超多)
2 It’s like JSON.but fast and small.序列化反序列化效率高(比json快一倍),文件体积小,比json小一倍。
3 兼容json数据格式

缺点

1.缺乏复杂模型支持。msgpack对复杂的数据类型(List、Map)支持的不够,序列化没有问题,但是反序列化回来就很麻烦,尤其是对于java开发人员。
2.维护成本较高。msgpack通过value的顺序来定位属性的,需要在不同的语言中都要维护同样的模型以及模型中属性的顺序。
3.不支持模型嵌套。msgpack无法支持在模型中包含和嵌套其他自定义的模型(如weibo模型中包含comment的列表)。

总结:高性能但扩展性较差维护成本较高。

参考网站

官网
https://msgpack.org/
msgpack-java
https://github.com/msgpack/msgpack-java
MessagePack for C#译文
https://www.cnblogs.com/stulzq/p/8039933.html
原理分析和使用
https://www.jianshu.com/p/8c24bef40e2f
code
https://www.programcreek.com/java-api-examples/?api=org.msgpack.MessagePack

多协议对比

JSON、Protobuf、Thrift、MessagePack 对比和开发指南
序列化时间对比
JSON、Protobuf、Thrift、MessagePack 对比和开发指南
序列化大小对比
JSON、Protobuf、Thrift、MessagePack 对比和开发指南

go语言序列化性能比较
https://github.com/smallnest/gosercomp
各种 Java 的序列化库的性能比较测试结果
http://developer.51cto.com/art/201506/480273.htm

相关内容

热门资讯

特朗普的关键矿产战略能行吗? 5月7日,法国以G7轮值主席国身份召开线上高层会议,重点商讨在关键矿产领域对中国的遏制围堵政策。依托...
世卫组织:“洪迪厄斯”号邮轮疫... 世卫组织8日更新“洪迪厄斯”号邮轮疫情最新数据,截至5月8日,共报告8例病例,其中3例死亡病例。8例...
伊朗因储油罐已满而将石油排入海... 新华社德黑兰5月9日电 据伊朗塔斯尼姆通讯社9日凌晨报道,伊朗伊斯兰议会代表布什尔省的议员贾法尔·普...
金正恩向俄总统致贺电:平壤始终... 新华社平壤5月9日电(记者王天僚)据朝中社9日报道,朝鲜最高领导人金正恩当天向俄罗斯总统普京致贺电,...
美专家:伊朗扛不住了,或正向波... 据福克斯新闻5月8日报道,卫星图像显示,伊朗主要石油出口枢纽哈尔克岛附近出现大片疑似石油泄漏的浮油带...
黄土塬藏“算力密码”!中国电信... 在陇东黄土塬上,数字浪潮奔涌不息。作为国家 “东数西算” 工程的核心承载地,中国电信庆阳智算产业园正...
科沃斯加入清洁电器行业反虚假测... 【CNMO科技消息】5月8日,科沃斯官方微博宣布,科沃斯加入由中国家用电器协会指导、中国家电网发起成...
东华科技获得发明专利授权:“一... 证券之星消息,根据天眼查APP数据显示东华科技(002140)新获得一项发明专利授权,专利名为“一种...
头部企业扎堆超百场无人机赛事,... 文/陈聆听 2026 年 5 月 4 日,山东诸城,山东天鸟航空负责人丁总与当地多位中小学校长会面,...
重磅签约!华为、中国银联战略合... 快科技5月8日消息,华为和中国银联在深圳正式签约,进一步深化双方的战略合作,还一起发布了自主创新和人...