三种通用应用层协议protobuf、thrift、avro对比
Google protobuf:
优点
二进制消息,性能好/效率高(空间和时间效率都很不错)
proto文件生成目标代码,简单易用
序列化反序列化直接对应程序中的数据类,不需要解析后在进行映射(XML,JSON都是这种方式)
支持向前兼容(新加字段采用默认值)和向后兼容(忽略新加字段),简化升级
支持多种语言(可以把proto文件看做IDL文件)
Netty等一些框架集成
缺点
官方只支持C++,JAVA和Python语言绑定
二进制可读性差(貌似提供了Text_Fromat功能)
二进制不具有自描述特性
默认不具备动态特性(可以通过动态定义生成消息类型或者动态编译支持)
只涉及序列化和反序列化技术,不涉及RPC功能(类似XML或者JSON的解析器)
Apache Thrift:
应用
Facebook的开源的日志收集系统(scribe: https://github.com/facebook/scribe)
淘宝的实时数据传输平台(TimeTunnel http://code.taobao.org/p/TimeTunnel/wiki/index)
Evernote开放接口(https://github.com/evernote/evernote-thrift)
Quora(http://www.quora.com/Apache-Thrift)
HBase( http://abloz.com/hbase/book.html#thrift )
…
优点
支持非常多的语言绑定
thrift文件生成目标代码,简单易用
消息定义文件支持注释
数据结构与传输表现的分离,支持多种消息格式
包含完整的客户端/服务端堆栈,可快速实现RPC
支持同步和异步通信
缺点
和protobuf一样不支持动态特性
Apache Avro:
应用
Hadoop RPC (http://hadoop.apache.org/#What+Is+Apache+Hadoop%3F)
优点
二进制消息,性能好/效率高
使用JSON描述模式
模式和数据统一存储,消息自描述,不需要生成stub代码(支持生成IDL)
RPC调用在握手阶段交换模式定义
包含完整的客户端/服务端堆栈,可快速实现RPC
支持同步和异步通信
支持动态消息
模式定义允许定义数据的排序(序列化时会遵循这个顺序)
提供了基于Jetty内核的服务基于Netty的服务
缺点
只支持Avro自己的序列化格式
语言绑定不如Thrift丰富
三种通用应用层协议protobuf、thrift、avro对比相关推荐
- 三种主流流媒体协议比较
一.介绍 在流媒体协议中,常用的流媒体协议主要有 HTTP协议,RTSP协议和RTMP协议. 在国内视频网站多采用HTTP+MP4或者HTTP+FLV协议传输视频,而国外使用RTMP,RTSP等专门的 ...
- vrrp路由器三种状态_VRRP协议具体解释
Contents ...
- 三种流行防火墙配置方案分析与对比
当我们尽情地在Internet上畅游时,往往把网络的安全问题抛在脑后.其实危险无处不在,防火墙是网络安全的一个重要防护措施,用于对网络和系统的保护.监控通过防火墙的数据,根据管理员的要求,允许和禁止特 ...
- 三种基本排序的实现及其效率对比:冒泡排序、选择排序和插入排序
1 public class ThreeTypesOfBaseSort { 2 // ========================== 三种基本排序的效率对比 ================== ...
- 三种通用方法——惠普电脑硬盘数据恢复
随着当今数字时代的到来,人们对于计算机硬盘上存储的数据越来越重视.然而,电脑硬盘也时常会发生数据丢失的情况,这时候就需要进行数据恢复.惠普电脑是市面上比较常见的品牌之一,因此本文将从惠普电脑硬盘数据恢 ...
- poll函数_I/O--多路复用的三种机制Select,Poll和Epoll对比
I/O多路复用(multiplexing)的本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作 ...
- html页面滚动导致阴影出现,三种处理滚动穿透问题方案的对比
背景 产品有三宝,弹窗,浮层加引导: 设计有三宝,透明,阴影加圆角: 运营有三宝,短信,推送加红包: 程序员有一宝,这个做不了. 随着移动端市场的份额越大,需求就越多样化.我们今天讨论的是移动端的滚动 ...
- [架构之路-43]:目标系统 - 系统软件 - Linux下的网络通信-3-TCP/IP协议族:IP、TCP/UDP/SCTP、Socket、应用层协议
目录 第1章 TCP/IP协议简介 1.1 简介 1.2 协议栈 1.3 IP网络 第2章 IP协议 2.1 简介 2.2 IP功能 2.4 IP V4地址 2.5 IP V6地址 2.6 IPV4地 ...
- 三种组播×××承载方案对比
方案一:基于PIM-SM/mGRE的承载方案 如图所示,公网运行PIM-SM协议,且PE 1.PE2和PE 3都支持mVRF实例. 不同的mVRF站点加入到同一个组播域(MD)中,通过MD内自动建立的 ...
最新文章
- exit函数_全面深入了解 Python 魔法函数
- 细说 #pragma pack(n)
- mysql ansi quotes_mysql ANSI_QUOTES 这个sql_mode的作用(字段可以使用双引号)
- java和python混合编程_浅谈C++与Java混合编程
- 国家开放大学2021春1080工程数学(本)题目
- 7-227 PAT排名汇总 (25 分)
- gentoo 安装mongodb
- 从Nginx、Apache工作原理看为什么Nginx比Apache高效!
- 漂亮的代码6:增加字符串后的数字
- 为什么不敢和别人竞争_孩子在学校不敢竞争?你该怎么做
- Hibernate 主键策略
- IE和ff下javascript解释的区别
- 计算机网络与综合布线系统设计,计算机网络综合布线系统设计
- android分辨率修改器,安卓分辨率一键修改器
- 几款少儿编程软件介绍
- CodeForce Round#49 untitled (Hdu 5339)
- MySQL--查询5天之内过生日的同事中的闰年2月29日问题的解决过程
- ogre研究之第一个程序
- 完全不懂SEO怎样入手做网站优化
- MAC上完美的PDF阅读器+批注编辑软件——PDF Expert
热门文章
- Python程序开发——第八章 文件
- 什么是抽象类?抽象类的作用_揭秘!Java 泛型背后到底是什么?
- php算法在线刷题,c,算法_每日一道算法:leetcode 刷题碰到的问题。,c,算法 - phpStudy...
- aem是什么意思_一台400匹的宽体RX7不装转子引擎,那装的是什么?
- word2vec模型评估_【新书】从Word2Vec到BERT的自然语言处理嵌入进展,附下载
- php echo中的点是什么?,php编程中echo用逗号和用点号连接的区别,echo逗号_PHP教程...
- idea 升级到2020后 无法启动_IDEA 2020 无法启动的解决办法(启动崩盘)附IDEA 2020 新功能...
- java调用存储过程 sql server_Java中调用SQL Server存储过程示例
- arm linux 添加ntp服务,嵌入式linux添加NTP服务
- mysql 查询相同字段值的个数_好文 | MySQL 索引B+树原理,以及建索引的几大原则...