• <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>

            牽著老婆滿街逛

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

            Protobuf 和 Thrift對比

            轉(zhuǎn)載自: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之間的對比

            一條消息數(shù)據(jù),protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是二進(jìn)制序列化的10分之一,總體看來ProtoBuf的優(yōu)勢還是很明顯的。

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

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

             

            protobuf簡單總結(jié)如下幾點(diǎn):

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

            2.易于使用;開發(fā)人員通過按照一定的語法定義結(jié)構(gòu)化的消息格式,然后送給命令行工具,工具將自動生成相關(guān)的類,可以支持java、c++、python等語言環(huán)境。通過將這些類包含在項(xiàng)目中,可以很輕松的調(diào)用相關(guān)方法來完成業(yè)務(wù)消息的序列化與反序列化工作。

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

             

            個人總結(jié)的適用protobuf的場合:

            1.需要和其它系統(tǒng)做消息交換的,對消息大小很敏感的。那么protobuf適合了,它語言無關(guān),消息空間相對xml和json等節(jié)省很多。
            2.小數(shù)據(jù)的場合。如果你是大數(shù)據(jù),用它并不適合。
            3.項(xiàng)目語言是c++,java,python的,因?yàn)樗鼈兛梢允褂胓oogle的源生類庫,序列化和反序列化的效率非常高。其它的語言需要第三方或者自己寫,序列化和反序列化的效率不保證。
            4.總體而言,protobuf還是非常好用的,被很多開源系統(tǒng)用于數(shù)據(jù)通信的工具,在google也是核心的基礎(chǔ)庫。

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

             

            Thrift 和 Protobuf 應(yīng)用場景

            在查看了一系列的資料后,覺得要從性能上的區(qū)別來在Thrift和Protobuf之間做選擇意義不大,因?yàn)樗麄兊男阅芴咏恕N覀儜?yīng)該從項(xiàng)目支持,文檔,易用性,特性方面來進(jìn)行選擇。如在《Thrift vs. Protocol Buffers》一文說提到的。

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

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

             

            數(shù)據(jù)類型

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

             

            綜合對比

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

             

            性能對比

            由于thrift功能較protobuf豐富,因此單從序列化機(jī)制上進(jìn)行性能比較,按照序列化后字節(jié)數(shù)、序列化時間、反序列化時間三個指標(biāo)進(jìn)行,對thrift的二進(jìn)制、壓縮、protobuf三種格式進(jìn)行對比。

            測試方法:

            取了15000+條樣本數(shù)據(jù),分別寫了三個指標(biāo)的測試程序,在自己的電腦上執(zhí)行,其中時間測試循環(huán)1000次,總的序列化/反序列化次數(shù)1500W+。

            平均字節(jié)數(shù)

            thrift二進(jìn)制535
            thrift壓縮473
            protobuf477

             

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

            thrift二進(jìn)制306034
            thrift壓縮304256
            protobuf177652

             

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

            thrift二進(jìn)制287972
            thrift壓縮315991
            protobuf157192

             

            thrift的時間測試可能不是很準(zhǔn),由于thrift產(chǎn)生代碼的復(fù)雜性,編寫的測試代碼為了適應(yīng)其接口,在調(diào)用堆棧上可能有一些額外開銷。

             

            參考推薦

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

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

            Google 的開源技術(shù)protobuf 簡介與例子

            幾種序列化協(xié)議(protobuf,xstream,jackjson,jdk,hessian)相關(guān)數(shù)據(jù)對比

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


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            国产成人99久久亚洲综合精品| 久久精品国产亚洲AV影院| 国产91久久精品一区二区| 久久精品人人槡人妻人人玩AV| 久久99精品国产99久久6男男| 久久99精品国产99久久6| 国内精品久久久久影院亚洲| 色欲av伊人久久大香线蕉影院| a高清免费毛片久久| 欧美久久亚洲精品| 国产国产成人精品久久| 久久精品国产亚洲av麻豆蜜芽| 久久99精品国产一区二区三区| 无码国内精品久久人妻麻豆按摩| 欧美丰满熟妇BBB久久久| 欧美精品一区二区久久| 97久久国产亚洲精品超碰热| 亚洲欧洲精品成人久久奇米网| 久久国产精品99精品国产| 中文成人久久久久影院免费观看 | 久久99精品久久久久久不卡 | 久久国产乱子伦精品免费午夜| 亚洲色大成网站www久久九| 精品熟女少妇aⅴ免费久久| 精品久久久久中文字幕日本| 久久婷婷人人澡人人爽人人爱| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 久久无码高潮喷水| 欧美一级久久久久久久大片| 国产欧美一区二区久久| 久久久精品国产sm调教网站| 合区精品久久久中文字幕一区| 久久久久黑人强伦姧人妻| 91精品国产91久久久久福利| 久久久无码精品亚洲日韩蜜臀浪潮| 7777久久久国产精品消防器材| 国产精品美女久久福利网站| 久久人搡人人玩人妻精品首页| 国产精品青草久久久久福利99| 精品99久久aaa一级毛片| 国产免费久久久久久无码|