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