云計算背后的秘密(8)-RPC框架
在過去Client-Server的年代,類似CORBA和RMI這樣的RPC框架層次不求,因為通過這類技術能將單機的IPC(Inter-process communication,進程間通信)擴展為多機之間的通訊,這對擴展性方面是非常有幫助的,但由于種種原因這些RPC框架并沒有被業界大規模的采用。
而在云計算時代,需要進行分布式通信的機器越來越多,雖然可以通過使用HTTP協議來進行簡易地通信,但是如果能讓程序基于一個方便好用,并且非常專業的RPC框架的話,那是再好不過了。本文將給大家介紹當前兩個最受歡迎的RPC框架:其一是Google的Protocol Buffers;另一個則是Facebook的Thrift。
Protocol Buffers
Protocol Buffers,是Google內部使用一種語言中立、平臺中立和可擴展的序列化結構數據的方式,并提供基于Java、C++ 和Python這三種語言的實現,每一種實現都包含了相應語言的編譯器以及庫文件,并且在很多Google的產品中都有使用。它是一種二進制的格式,所以其速度是使用XML進行數據交換的10倍左右。它主要用于兩個方面:其一是普通的RPC(Remote Procedure Call,遠程方法調用)通信,它可用于分布式應用之間或者異構環境下的通信;其二是數據存儲方面,因為它自描述,而且壓縮很方便,所以可用于對數據進行持久化,比如存儲日志信息等,并可被MapReduce程序的處理。
Thrift
Thrift 是由 Facebook 開源的一個 RPC 框架,現在已經成為了著名開源組織Apache的孵化項目之一,它主要的幾個特點是:其一是支持非常多的語言,包括在 Web開發中很常用的 PHP,以及 C++/Python/Java 等在 Web后端非常常用的語言,甚至還包括近期很流行的 Ruby和Erlang;其二是提供完整的 RPC 框架實現,通過腳本就能生成通訊相關的框架代碼,比如搭建一個簡易的服務只需要幾分鐘,這樣使得開發者只需要集中精力處理好業務邏輯即可,;其三是擁有被 Facebook、Last.fm 等不少大規模互聯網應用驗證過的性能和可用性。總體而言,它的代碼實現是很優秀的,邏輯層次非常清楚,易于定制擴展,同時通過框架生成代碼非常方便,也節省很多通訊方面的開發和調試時間,并且 Facebook號稱Thrift在速度上和Protocol Buffers相比有一定的優勢。
無論是Protocol Buffers還是Thrift都非常優秀,但是還是希望大家能夠按照應用自身的實際情況來進行抉擇,比如在開發YunTable時,由于性能和開發成本的考慮,我并沒有選擇這兩種RPC框架的其中之一,而是自建一套簡易的二進制通訊框架,并且非常簡單易用,同時速度飛快。
參考資料
1. Thrift –開源多語言RPC框.http://micy.cn/blog/post/35
2. Protocol Buffer簡介. http://kimilv.javaeye.com/blog/411092
作者簡介
吳朱華,之前在IBM中國研究院參與過多個云計算產品的開發工作,現在專注于YunTable(http://code.google.com/p/yuntable/)和YunEngine(http://yunengine.com/)的研發,并即將發表《剖析云計算》一書,敬請期待。
【編輯推薦】
- 云計算背后的秘密(3)-BigTable
- 云計算背后的秘密(2)-GFS
- 云計算背后的秘密(1)-MapReduce
- 云計算背后的秘密(4)-Chubby
- 云計算背后的秘密(6)-NoSQL數據庫綜述
- 云計算背后的秘密