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

简介: JavaWeb - JSON、Protobuf、Thrift、MessagePack 对比和开发指南

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

JSON

优点

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

缺点

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

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

 

Protobuf

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

优点

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

缺点

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

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

参考网站

 

Thrift(Facebook)

优点

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

缺点

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

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

参考网站

 

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的列表)。

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

参考网站

 

多协议对比

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

  • 序列化时间对比

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

  • 序列化大小对比

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

目录
相关文章
|
6月前
|
XML JSON JavaScript
javaweb实训第六天上午——JSON&SpringMVC进阶(1)
1.课程介绍 JSON; (了解) SpringMVC返回JSON; (掌握) SpringMVC文件上传、下载; (掌握) SpringMVC拦截器; (掌握) SpringMVC执行流程; (掌握) 2.JSON 2.1.JSON概述
77 0
|
JSON JavaScript 前端开发
JavaWeb 速通JSON
JavaWeb——JSON 内容分享。
70 0
|
2月前
|
JSON 前端开发 JavaScript
JavaWeb基础8——Filter,Listener,Ajax,Axios,JSON
Filter过滤器、Listener监听器、AJAX、 同步、异步优点和使用场景、Axios异步框架、JSON、js和JSON转换、案例,Axios + JSON 品牌列表查询和添加
JavaWeb基础8——Filter,Listener,Ajax,Axios,JSON
|
3月前
|
XML 存储 JSON
(十二)探索高性能通信与RPC框架基石:Json、ProtoBuf、Hessian序列化详解
如今这个分布式风靡的时代,网络通信技术,是每位技术人员必须掌握的技能,因为无论是哪种分布式技术,都离不开心跳、选举、节点感知、数据同步……等机制,而究其根本,这些技术的本质都是网络间的数据交互。正因如此,想要构建一个高性能的分布式组件/系统,不得不思考一个问题:怎么才能让数据传输的速度更快?
|
6月前
|
JSON 前端开发 Java
javaweb实训第六天上午——JSON&SpringMVC进阶(2)
5.SpringMVC拦截器 5.1.创建拦截器
80 0
|
JSON Linux 测试技术
go语言处理数据、基本通信以及环境配置 -- json,protobuf,grpc
go语言处理数据、基本通信以及环境配置 -- json,protobuf,grpc
|
6月前
|
JSON 数据格式
protobuf与json相互转换的方法
protobuf与json相互转换的方法
194 0
|
6月前
|
XML JSON 网络协议
JSON和Protobuf序列化
因为像TCP和UDP这种底层协议只能发送字节流,因此当我们在开发一些远程过程调用(RPC)的程序时,需要将应用层的Java POJO对象序列化成字节流,数据接收端再反序列化成Java POJO对象。序列化一定会设计编码和格式化,目前常见的编码方式有:
|
数据采集 JSON 安全
IoT设备的数据格式ProtoBuf转JSON
本文介绍如何使用阿里云物联网平台的数据服务之数据解析功能实现设备数据格式ProtoBuf转JSON以及窗口聚合和插值计算。
IoT设备的数据格式ProtoBuf转JSON
|
JSON 编解码 JavaScript
IM通讯协议专题学习(五):Protobuf到底比JSON快几倍?全方位实测!
本篇将以Protobuf为基准,对比市面上的一些主流的JSON解析库,通过全方位测试来证明给你看看Protobuf到底比JSON快几倍。
691 0
IM通讯协议专题学习(五):Protobuf到底比JSON快几倍?全方位实测!