原文: https://www.douban.com/note/523340109/

  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对比,完爆xml,json,http的更多相关文章

  1. 转-Web Service中三种发送接受协议SOAP、http get、http post

    原文链接:web服务中三种发送接受协议SOAP/HTTP GET/HTTP POST 一.web服务中三种发送接受协议SOAP/HTTP GET/HTTP POST 在web服务中,有三种可供选择的发 ...

  2. 序列化之protobuf与avro对比(Java)

    最近在做socket通信中用到了关于序列化工具选型的问题,在调研过程中开始趋向于用protobuf,可以省去了编解码的过程.能够实现快速开发,且只需要维护一份协议文件即可. 但是调研过程中发现了pro ...

  3. 【Android学习】XML文本的三种解析方式(通过搭建本地的Web项目提供XML文件)

    XML为一种可扩展的标记语言,是一种简单的数据存储语言,使用一系列简单的标记来描述. 一.SAX解析 即Simple API for XML,以事件的形式通知程序,对Xml进行解析. 1.首先在Web ...

  4. Centos6.4三种更改hostname的方法之间的对比

    首先,利用hostname命令查看一下当前主机的主机名,在终端输入hostname,会发现显示的是完整的主机名称(主机名.域名),其中主机名与进入终端后:登录名@主机名,显示的一致,如下图所示: 其次 ...

  5. rpc框架: thrift/avro/protobuf 之maven插件生成java类

    thrift.avro.probobuf 这几个rpc框架的基本思想都差不多,先定义IDL文件,然后由各自的编译器(或maven插件)生成目标语言的源代码,但是,根据idl生成源代码这件事,如果每次都 ...

  6. Rsyslog的三种传输协议简要介绍

    rsyslog的三种传输协议 rsyslog 可以理解为多线程增强版的syslog. rsyslog提供了三种远程传输协议,分别是: 1. UDP 传输协议 基于传统UDP协议进行远程日志传输,也是传 ...

  7. Linux三种SSH协议登陆方式

    在实际工作中遇到了三种不同SSH协议登陆Linux服务器的方式,由简单到复杂分别阐述:一.最简单也是最不安全的root账号密码登陆通过root账号+root密码登陆Linux服务器. 二.普通用户登陆 ...

  8. iOS拨打电话的三种方式

    iOS拨打电话的三种方式 1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示 1 2 var string = "tel:" + "1 ...

  9. JdbcTemplae使用入门&&Spring三种连接池配置&&Spring配置文件引用外部properties文件

    JdbcTemplate的使用 Spring为了各种支持的持久化技术,都提供了简单操作的模版和回调. JdbcTemplate 简化 JDBC 操作HibernateTemplate 简化 Hiber ...

随机推荐

  1. hdu4553 约会安排 线段树

    寒假来了,又到了小明和女神们约会的季节. 小明虽为屌丝级码农,但非常活跃,女神们常常在小明网上的大段发言后热情回复“呵呵”,所以,小明的最爱就是和女神们约会.与此同时,也有很多基友找他开黑,由于数量实 ...

  2. hdu3338 Kakuro Extension 最大流

    If you solved problem like this, forget it.Because you need to use a completely different algorithm ...

  3. hdu1796 How many integers can you find 容斥原理

    Now you get a number N, and a M-integers set, you should find out how many integers which are small ...

  4. linux解压缩命令之unzip,tar(持续更新)

    unzip apache-tomcat-7.0.78.zip -d /usr/local/src/ 解压zip压缩包到/usr/local/src,-d就是指定解压路径的意思

  5. Django 之 ORM

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...

  6. tomcat中配置https

    HTTPS配置中分为单向连接和双向连接,单向连接只需要服务器安装证书,客户端不需要,双向连接需要服务器和客户端都安装证书: 一.Keytool命令: 1.生成密钥对: keytool -genkey ...

  7. centos redis5 安装 和 基本配置

    1 下载 redis wget http://download.redis.io/releases/redis-5.0.0.tar.gz 2 解压 tar xzf redis-5.0.0.tar.gz ...

  8. centos7 pptp 安装

    1  安装 ppp yum install -y ppp 2 安装 pptpd yum install -y pptpd 3 编辑/etc/pptpd.conf 在最后 添加 localip 192. ...

  9. 解决java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener

    启动eclipse 发现如下错误 Error configuring application listener of class org.springframework.web.util.Log4jC ...

  10. 干货-递归下降分析器 笔记(具体看Python Cookbook, 3rd edition 的2.19章节)

    import re import collections # 写将要匹配的正则 NUM = r'(?P<NUM>\d+)' PLUS = r'(?P<PLUS>\+)' MIN ...