国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
比較跨語言通訊框架:thrift和Protobuf
前兩天想在微博上發(fā)表一個觀點:在現(xiàn)在的技術(shù)體系中,能用于描述通訊協(xié)議的方式很多,xml,json,protobuf,thrift,如果在有如此眾多選擇的基礎(chǔ)上,在設(shè)計系統(tǒng)時,還自造協(xié)議,自己設(shè)計協(xié)議類型和解析方式,那么我只能說,您真的落后了,不是技術(shù)上,而是思想上。對于xml,和json我們不做過多描述了,參考相關(guān)文檔就可以了。特別是json,如今在 web系統(tǒng),頁游系統(tǒng)的前后臺通訊中,應(yīng)用非常廣泛。本文將重點介紹兩種目前在大型系統(tǒng)中,應(yīng)用比較普遍的兩種通訊框架,thrift和Protobuf,為什么叫通訊框架,而不叫通訊協(xié)議,因為這兩種技術(shù),如果僅僅當(dāng)作協(xié)議解析用,對于其強(qiáng)大的功能,就大打了折扣。
對于兩種利器而言,首推的應(yīng)該是thrift,因為其不僅有對于協(xié)議封裝和解析的處理,而且有完備的通訊框架的實現(xiàn),完全封裝了底層通訊,對于使用者,只要在框架的客戶端和服務(wù)器接口回調(diào)中,處理邏輯就可以了。對于其確切的描述,我們還是引用官方的說法吧,這樣更準(zhǔn)確些,以免由于我自己的想法,影響了大家的理解。
Thrift是一個跨語言的服務(wù)部署框架,最初由Facebook于2007年開發(fā),2008年進(jìn)入Apache開源項目。Thrift通過一個中間語言(IDL, 接口定義語言)來定義RPC的接口和數(shù)據(jù)類型,然后通過一個編譯器生成不同語言的代碼(目前支持C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk和OCaml),并由生成的代碼負(fù)責(zé)RPC協(xié)議層和傳輸層的實現(xiàn)。
Thrift實際上是實現(xiàn)了C/S模式,通過代碼生成工具將接口定義文件生成服務(wù)器端和客戶端代碼(可以為不同語言),從而實現(xiàn)服務(wù)端和客戶端跨語言的支持。用戶在Thirft描述文件中聲明自己的服務(wù),這些服務(wù)經(jīng)過編譯后會生成相應(yīng)語言的代碼文件,然后用戶實現(xiàn)服務(wù)(客戶端調(diào)用服務(wù),服務(wù)器端提服務(wù))便可以了。其中protocol(協(xié)議層, 定義數(shù)據(jù)傳輸格式,可以為二進(jìn)制或者XML等)和transport(傳輸層,定義數(shù)據(jù)傳輸方式,可以為TCP/IP傳輸,內(nèi)存共享或者文件共享等)被用作運(yùn)行時庫。
Thrift支持二進(jìn)制,壓縮格式,以及json格式數(shù)據(jù)的序列化和反序列化。這讓用戶可以更加靈活的選擇協(xié)議的具體形式。更完美的是,協(xié)議是可自由擴(kuò)展的,新版本的協(xié)議,完全兼容老的版本!
那么thrift有沒有缺點呢,有,而且很嚴(yán)重!但不影響使用,因為此框架的缺點不在于其程序本身,而在于其文檔的缺失!包括中文的,及英語的相關(guān)文檔。要徹底的理解和熟練的把握thrift只有一個辦法,讀thrift的代碼,通讀!我很樂于做這樣的事,因為讀代碼,而且是高質(zhì)量的代碼,是一件非常有樂趣的事情,這對于一個程序員來講,沒有什么。當(dāng)然,本著普及的需要,文檔的完善化,確實需要大大的加強(qiáng)。當(dāng)然,我也相信,thrift的文檔,會日漸完善,因為現(xiàn)在國內(nèi)的熱心程序開發(fā)者,開源軟件的愛好者越來越多,使用的同時,著手thrift文檔的補(bǔ)充工作,是很多人愿意做的,而且也是很有成就感的事情。
相比于,thrift文檔的匱乏,protobuf的文檔可稱非常完備。這一點,我認(rèn)為google開源出來的東西,確實要比facebook,在使用指南和文檔完備上高出一個檔次。

protobuf是google提供的一個開源序列化框架,類似于XML,JSON這樣的數(shù)據(jù)表示語言,其最大的特點是基于二進(jìn)制,因此比傳統(tǒng)的 XML表示高效短小得多。雖然是二進(jìn)制數(shù)據(jù)格式,但并沒有因此變得復(fù)雜,可以很方便的對其基于二進(jìn)制的協(xié)議進(jìn)行擴(kuò)展,并且很方便的能讓新版本的協(xié)議兼容老的版本。如果說xml太臃腫,json易解析,比xml更高效,易擴(kuò)展,那么protobuf可以說,相對于json更高效,更易擴(kuò)展,而且協(xié)議的保密性更強(qiáng)。并且protobuf是跨語言的,可以支持c(c++),Java,Python等主流語言,非常方便大系統(tǒng)的設(shè)計。protobuf號稱也有service,可以基于其service的接口和回調(diào),來完成客戶端和服務(wù)器的邏輯。但是,目前版本service還僅僅停留在接口層,其底層的通訊,還需要自己實現(xiàn),這點確實遠(yuǎn)不如thrift完備。

protobuf + netty ?

protobuf在google中是一個比較核心的基礎(chǔ)庫,承擔(dān)著google海量服務(wù)器間的通訊協(xié)議設(shè)計。在多功能,跨語言的海量系統(tǒng)中,如此高效,簡潔,可自由擴(kuò)展的通訊框架,可謂經(jīng)典。
說了歸齊,有如此好利器,我們再設(shè)計大系統(tǒng)時,真的應(yīng)該盡量避免造輪子了,給一個建議,在您設(shè)計大系統(tǒng)之前,不妨先關(guān)注一下google code上,以及互聯(lián)網(wǎng)上諸多的開源項目,很多時候,又快又好的設(shè)計,很多同行已經(jīng)做好了,拿來用就可以了。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
APP為什么用JSON協(xié)議與服務(wù)端交互:序列化相關(guān)知識
最佳實踐|7大維度看國外企業(yè)為啥選擇gRPC打造高性能微服務(wù)?
RPC, Serialization and Schema
序列化和反序列化
序列化與反序列化
thrift vs protocol buffers
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服