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