在過去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架構的其中之一,而是自建一套簡易的二進位通訊架構,並且非常簡單易用,同時速度飛快。