原文: 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. eclipse 启动tomcat 出现错误Could not publish server configuration: null. java.lang.NullPointerException

    若出现以上错误,则很有可能是修改了conf/server.xml的内容,将改过的地方改回去,然后重启tomcat 就可以啦

  2. SenjuFamily项目总结 之 Activiti 学习总结(一)

    项目干了一年了,最近开始整理一下项目中用到的知识,算是年末总结了. 大概有如下几个点: 1.Actitivi 2.JPA 3.WebService 4.JVM使用以及代码优化(这个地方,主要参考周志明 ...

  3. 火狐浏览器firebug

    1. 近日,Firebug团队在官网贴出了停止继续开发.更新维护Firebug的通知,邀请大家使用Firefox内置工具DevTools.   来自官网截图 Firebug是Firefox旗下的一款扩 ...

  4. linux中和salt中的fqdn测试小节

    设置hosts文件和hostname文件 [root@dawn-hnyd-yd-1 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdoma ...

  5. css 如何实现图片等比例缩放

    在进行布局的时候,很多PM都要求图片等比例缩放,而且要求图片不失真,不变形,但是UI设计好了这个div的宽度又不能随意更改,而后台传过来的图片也不是等比例的图片,这就比较难受了,写成 width: 1 ...

  6. activemq jms使用

    activemq 是 基于 jms 协议的 消息队列 消息 流程: jsm 的 消息流程鼻尖简单  生产者发送消息到目的地,消费者 监听这个目的地,然后收到消息. 相比 amqp 的 消息流程简单很多 ...

  7. docker 容器时间跟宿主机时间同步

    docker 容器时间跟宿主机时间同步 docker cp /etc/localtime 87986863838b:/etc/docker cp /etc/localtime container-na ...

  8. HTMLParser 笔记

    # 关于html.parse.HTMLParser的使用 from html.parser import HTMLParser class MyHtmlParser(HTMLParser): # 使用 ...

  9. C# 多线程控制

    C# 多线程控制 通讯 和切换   一.多线程的概念  Windows是一个多任务的系统,如果你使用的是windows 2000及其以上版本,你可以通过任务管理器查看当前系统运行的程序和进程.什么是进 ...

  10. PHP中的插件机制原理和实例

    PHP项目中很多用到插件的地方,更尤其是基础程序写成之后很多功能由第三方完善开发的时候,更能用到插件机制,现在说一下插件的实现.特点是无论你是否激活,都不影响主程序的运行,即使是删除也不会影响. 从一 ...