• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            Protobuf 和 Thrift對比

            轉載自:http://blog.mimvp.com/2015/03/comparing-protobuf-and-thrift/

            Protobuf 和 Thrift 簡介

            google protobuf 

            Protocol buffers are Google’s language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages – Java, C++, or Python.

            githubgoogle/protobuf 

            google developers: protocol-buffers

             

            Apache Thrift

            The Apache Thrift software framework, for scalable cross-language services development, combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml and Delphi and other languages.

            githubapache/thrift

             

            protobuf,json,xml,binary,Thrift之間的對比

            一條消息數據,protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是二進制序列化的10分之一,總體看來ProtoBuf的優勢還是很明顯的。

            protobuf是google提供的一個開源序列化框架,類似于XML,JSON這樣的數據表示語言。

            protobuf在google中是一個比較核心的基礎庫,作為分布式運算涉及到大量的不同業務消息的傳遞,如何高效簡潔的表示、操作這些業務消息在google這樣的大規模應用中是至關重要的。而protobuf這樣的庫正好是在效率、數據大小、易用性之間取得了很好的平衡。

             

            protobuf簡單總結如下幾點:

            1.靈活(方便接口更新)、高效(效率經過google的優化,傳輸效率比普通的XML等高很多);

            2.易于使用;開發人員通過按照一定的語法定義結構化的消息格式,然后送給命令行工具,工具將自動生成相關的類,可以支持java、c++、python等語言環境。通過將這些類包含在項目中,可以很輕松的調用相關方法來完成業務消息的序列化與反序列化工作。

            3.語言支持;原生支持c++,java,python

             

            個人總結的適用protobuf的場合:

            1.需要和其它系統做消息交換的,對消息大小很敏感的。那么protobuf適合了,它語言無關,消息空間相對xml和json等節省很多。
            2.小數據的場合。如果你是大數據,用它并不適合。
            3.項目語言是c++,java,python的,因為它們可以使用google的源生類庫,序列化和反序列化的效率非常高。其它的語言需要第三方或者自己寫,序列化和反序列化的效率不保證。
            4.總體而言,protobuf還是非常好用的,被很多開源系統用于數據通信的工具,在google也是核心的基礎庫。

            此外,還有更牛叉的facebook的thrift,2007年由Facebook開發,之后在2008年加到Apache計劃中。是一個跨語言的輕量級RPC消息和數據交換框架,Thrift能生成的語言有: C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml,這是它的一大優點。

             

            Thrift 和 Protobuf 應用場景

            在查看了一系列的資料后,覺得要從性能上的區別來在Thrift和Protobuf之間做選擇意義不大,因為他們的性能太接近了。我們應該從項目支持,文檔,易用性,特性方面來進行選擇。如在《Thrift vs. Protocol Buffers》一文說提到的。

            Thrift和Protobuf的最大不同,在于Thrift提供了完整的RPC支持,包含了Server/Client,而Protobuf只包括了stub的生成器和格式定義。

            下面列出來的是一些數據交換格式的Performance測試數據,另外有兩份針對Thrift和Protobuf的測試數據:
            thrift-protobuf-compare :包含了多種數據交換格式的benchmarking;
            Thrift and Protocol Buffers performance in Java
            Thrift and Protocol Buffers performance in Java Round 2 :作者在對Protobuf進行了一些參數調優后重做的測試,測試結果Protobuf從帶寬節省和序列化/解序列化速度上都占了優勢。

             

            數據類型

            protobufthriftprotobufthriftprotobufthriftprotobufthrift
            doubledoublefloat  byte i16
            int32i32int64i64uint32 uint64 
            sint32 sint64 fixed32 fixed64 
            sfixed32 sfixed64 boolboolstringstring
            bytesbinarymessagestructenumenumserviceservice

             

            綜合對比

             protobufthrift
            功能特性主要是一種序列化機制提供了全套RPC解決方案,包括序列化機制、傳輸層、并發處理框架等
            支持語言C++/Java/PythonC++, Java, Python, Ruby, Perl, PHP, C#, Erlang, Haskell
            易用性語法類似,使用方式等類似
            生成代碼的質量可讀性都還過得去,執行效率另測
            升級時版本兼容性均支持向后兼容和向前兼容
            學習成本功能單一,容易學習功能豐富、學習成本高
            文檔&社區官方文檔較為豐富,google搜索protocol buffer有2000W+結果,google group被墻不能訪問官方文檔較少,沒有API文檔,google搜索apache thrift僅40W結果,郵件列表不怎么活躍

             

            性能對比

            由于thrift功能較protobuf豐富,因此單從序列化機制上進行性能比較,按照序列化后字節數、序列化時間、反序列化時間三個指標進行,對thrift的二進制、壓縮、protobuf三種格式進行對比。

            測試方法:

            取了15000+條樣本數據,分別寫了三個指標的測試程序,在自己的電腦上執行,其中時間測試循環1000次,總的序列化/反序列化次數1500W+。

            平均字節數

            thrift二進制535
            thrift壓縮473
            protobuf477

             

            序列化(1500W次)時間(ms):

            thrift二進制306034
            thrift壓縮304256
            protobuf177652

             

            反序列化(1500W次)時間(ms):

            thrift二進制287972
            thrift壓縮315991
            protobuf157192

             

            thrift的時間測試可能不是很準,由于thrift產生代碼的復雜性,編寫的測試代碼為了適應其接口,在調用堆棧上可能有一些額外開銷。

             

            參考推薦

            Apache Avro 與 Thrift 比較(阿里數據平臺)

            Apache Thrift – 可伸縮的跨語言服務開發框架(IBM)

            Google 的開源技術protobuf 簡介與例子

            幾種序列化協議(protobuf,xstream,jackjson,jdk,hessian)相關數據對比

            posted on 2016-11-17 14:23 楊粼波 閱讀(4424) 評論(0)  編輯 收藏 引用

            蜜臀av性久久久久蜜臀aⅴ麻豆| 国产99久久久国产精品~~牛| 91久久精品电影| 精品久久久噜噜噜久久久| 久久久久久久波多野结衣高潮| 精品免费久久久久国产一区| 精品久久久久久中文字幕| 国产一区二区三区久久精品| av国内精品久久久久影院| 久久人人爽爽爽人久久久| 久久精品无码专区免费东京热| 人妻无码αv中文字幕久久| 婷婷久久久亚洲欧洲日产国码AV| 久久人做人爽一区二区三区| 亚洲va久久久噜噜噜久久天堂| 亚洲综合日韩久久成人AV| 久久久婷婷五月亚洲97号色| AV无码久久久久不卡蜜桃 | 精品国产乱码久久久久久人妻 | 国产精品久久久久影院嫩草| 久久国产精品久久精品国产| 久久夜色精品国产亚洲av| 婷婷久久综合九色综合绿巨人| 亚洲香蕉网久久综合影视 | 7国产欧美日韩综合天堂中文久久久久 | 91超碰碰碰碰久久久久久综合| 国产精品女同一区二区久久| 欧美精品福利视频一区二区三区久久久精品 | 中文字幕亚洲综合久久菠萝蜜| 久久精品国产色蜜蜜麻豆| 蜜臀av性久久久久蜜臀aⅴ | 久久99热这里只有精品国产| 久久99热这里只有精品66| 久久综合亚洲欧美成人| 久久精品成人免费国产片小草 | 91精品国产乱码久久久久久 | 久久亚洲欧美日本精品| 国产精品中文久久久久久久| 狠狠狠色丁香婷婷综合久久俺| 国产精品99久久久精品无码 | 精品久久久久久中文字幕|