原文: 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. 一道dp[不太好写]

    http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2281 Description An arithmetic progression ...

  2. hdu2594 Simpsons’ Hidden Talents LCS--扩展KMP

    Homer: Marge, I just figured out a way to discover some of the talents we weren’t aware we had.Marge ...

  3. 【java编程】加密算法-对称加密及AES加密算法

    转载:https://www.jianshu.com/p/3840b344b27c?utm_campaign=maleskine&utm_content=note&utm_medium ...

  4. asp.net Checkbox 绑定自定义属性

    var chkSelect = e.Row.FindControl("chkSelect") as CheckBox; chkSelect.InputAttributes.Add( ...

  5. Unity项目架构设计与开发管理 学习

    视频地址:https://v.qq.com/x/page/d016340mkcu.html assetstore save manager

  6. REPL

    REPL(Read Eval Print Loop:交互式解释器) 表示一个电脑的环境,类似 Window 系统的终端或 Unix/Linux shell,我们可以在终端中输入命令,并接收系统的响应. ...

  7. python中in,not in,比较运算符,格式化输出,编码

    一,python中的in,和not in python中in的作用是检测或查找,例如: c = ‘你好大号胡覅但是啊飞碟说’ b = ‘你好’ print(b in c ) 结果: True c = ...

  8. KVM部署、使用、调优

     背景介绍 传统数据中心面临的问题: 资源使用率低 资源分配不均 自动化能力差 初始化成本高   云计算: 云计算是一种按使用量付费的模式,这种模式提供可用的.便捷的.按需的网络访问, 进入可配置的计 ...

  9. perventDefault, stopPropagation, stopImmediatePropagation 三者的区别

    event有三种特别容易混淆的方法, 用来阻止默认事件的发生 1.  e.preventDefault(); 2. e.stopPropagation(); 3. e.stopImmediatePro ...

  10. maven的profile

    https://elim.iteye.com/blog/1900568 简介:配置不同环境要使用的profile,再idea操作画面可以选