比較跨語言通信框架:Apache Thrift和Google Protobuf

    前兩天想在微博上發表一個觀點:在如今的技術體系中,能用於描述通信協議的方式不少,xml,json,protobuf,thrift,若是在有如此衆多選擇的基礎上,在設計系統時,還自造協議,本身設計協議類型和解析方式,那麼我只能說,您真的落後了,不是技術上,而是思想上。對於xml,和json咱們不作過多描述了,參考相關文檔就能夠了。特別是json,現在在 web系統,頁遊系統的先後臺通信中,應用很是普遍。本文將重點介紹兩種目前在大型系統中,應用比較廣泛的兩種通信框架,thrift和Protobuf,爲何叫通信框架,而不叫通信協議?由於這兩種技術,若是僅僅看成協議解析用,對於其強大的功能,就大打了折扣。java

    對於兩種利器而言,首推的應該是thrift,由於其不只有對於協議封裝和解析的處理,並且有完備的通信框架的實現,徹底封裝了底層通信,對於使用者,只要在框架的客戶端和服務器接口回調中,處理邏輯就能夠了。對於其確切的描述,咱們仍是引用官方的說法吧,這樣更準確些,以避免因爲我本身的想法,影響了你們的理解。python

    Thrift是一個跨語言的服務部署框架,最初由Facebook於2007年開發,2008年進入Apache開源項目。Thrift經過一箇中間語言(IDL, 接口定義語言)來定義RPC的接口和數據類型,而後經過一個編譯器生成不一樣語言的代碼(目前支持C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk和OCaml),並由生成的代碼負責RPC協議層和傳輸層的實現。c++

    Thrift其實是實現了C/S模式,經過代碼生成工具將接口定義文件生成服務器端和客戶端代碼(能夠爲不一樣語言),從而實現服務端和客戶端跨語言的支持。用戶在Thirft描述文件中聲明本身的服務,這些服務通過編譯後會生成相應語言的代碼文件,而後用戶實現服務(客戶端調用服務,服務器端提服務)即可以了。其中protocol(協議層, 定義數據傳輸格式,能夠爲二進制或者XML等)和transport(傳輸層,定義數據傳輸方式,能夠爲TCP/IP傳輸,內存共享或者文件共享等)被用做運行時庫。程序員

    Thrift支持二進制,壓縮格式,以及json格式數據的序列化和反序列化。這讓用戶能夠更加靈活的選擇協議的具體形式。更完美的是,協議是可自由擴展的,新版本的協議,徹底兼容老的版本web

    那麼thrift有沒有缺點呢,有,並且很嚴重!但不影響使用,由於此框架的缺點不在於其程序自己,而在於其文檔的缺失!包括中文的,及英語的相關文檔。要完全的理解和熟練的把握thrift只有一個辦法,讀thrift的代碼,通讀!我很樂於作這樣的事,由於讀代碼,並且是高質量的代碼,是一件很是有樂趣的事情,這對於一個程序員來說,沒有什麼。固然,本着普及的須要,文檔的完善化,確實須要大大的增強。固然,我也相信,thrift的文檔,會日漸完善,由於如今國內的熱心程序開發者,開源軟件的愛好者愈來愈多,使用的同時,着手thrift文檔的補充工做,是不少人願意作的,並且也是頗有成就感的事情。json

    相比於,thrift文檔的匱乏,protobuf的文檔可稱很是完備。這一點,我認爲google開源出來的東西,確實要比facebook,在使用指南和文檔完備上高出一個檔次。服務器

    protobuf是google提供的一個開源序列化框架,相似於XML,JSON這樣的數據表示語言,其最大的特色是基於二進制,所以比傳統的 XML表示高效短小得多。雖然是二進制數據格式,但並無所以變得複雜,能夠很方便的對其基於二進制的協議進行擴展,而且很方便的能讓新版本的協議兼容老的版本。若是說xml太臃腫,json易解析,比xml更高效,易擴展,那麼protobuf能夠說,相對於json更高效,更易擴展,並且協議的保密性更強。而且protobuf是跨語言的,能夠支持c(c++),java,python等主流語言,很是方便大系統的設計。protobuf號稱也有service,能夠基於其service的接口和回調,來完成客戶端和服務器的邏輯。可是,目前版本service還僅僅停留在接口層,其底層的通信,還須要本身實現,這點確實遠不如thrift完備。框架

    protobuf在google中是一個比較核心的基礎庫,承擔着google海量服務器間的通信協議設計。在多功能,跨語言的海量系統中,如此高效,簡潔,可自由擴展的通信框架,可謂經典。工具

    說了歸齊,有如此好利器,咱們再設計大系統時,真的應該儘可能避免造輪子了,給一個建議,在您設計大系統以前,不妨先關注一下google code上,以及互聯網上諸多的開源項目,不少時候,又快又好的設計,不少同行已經作好了,拿來用就能夠了。google

相關文章
相關標籤/搜索