zoukankan      html  css  js  c++  java
  • 三种通用应用层协议protobuf、thrift、avro对比,完爆xml,json,http

      原文: 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丰富

  • 相关阅读:
    作用域面试题
    js··BOM 浏览器对象模型
    js···DOM2动态创建节点
    js ·节点的知识点
    js·逻辑运算
    js···元素的属性
    什么是函数封装。
    hive 历史拉链表的处理
    [转]实现Hive数据同步更新的shell脚本
    python 3 过滤股票
  • 原文地址:https://www.cnblogs.com/lnlvinso/p/9781055.html
Copyright © 2011-2022 走看看