Java領域中的RPC開源方案

jopen 9年前發布 | 28K 次閱讀 RPC Java開發

1. Avro  http://avro.apache.org/ 大名鼎鼎的Hadoop的子項目。它本身即是一個序列化框架,同時也實現RPC的功能;

Avro序列化特點:支持跨語言實現,與 Apache Thrift GoogleProtocol Buffers相比,Avro的優勢在于支持動態模式,即可以不生成代碼,避免了侵入性,作為POJODTO(數據傳輸對象)是不適合用代碼生成的。還有Avro序列化時由于不需要字段標識符來打標簽,所以使用它序列化生成的數據小(應該是現有序列化系統中最精簡的了),最后它的性能也非常優秀。

Avro自帶的RPC實現有自己的亮點,比如支持同步和異步調用,有握手協議功能,狀態監控完善。但是它綁定了Avro序列化,不支持協議的擴展,也不支持擴展序列化方式,在擴展性上有待改進。

2. nfs-rpc http://code.google.com/p/nfs-rpc/ 淘寶牛人開源的一個RPC框架。傳輸層使用mina/netty,協議層靈活可擴展,支持多種序列化方式目前支持Hessian JavaProtocol Buffers,序列化方式可擴展。該框架設計非常優秀,代碼質量高,可讀性強,結構清晰,層次分明。

nfs-rpc是一個非常優秀的RPC基礎框架,在它的基礎上進行擴展開發也非常方便。從序列化方式來看Java序列化雖然使用簡單,但性能不高,不能跨語言。Hessian,能跨語言,使用也很方便,但性能不占優勢。

3. Dubbo http://code.alibabatech.com/wiki/display/dubbo/Home-zh 阿里開源的一個分布式服務框架,致力于提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。功能非常強大,尤其是提供了完善的服務治理功能,非常適合大型的分布式應用。但是對于中小型應用來說似乎有點太重了。


4、missian也是類似的  http://missian.iteye.com/blog/829780


5、http://summercool-hsf.googlecode.com/svn/trunk/


總結:

1) 從序列化方式來看,Apache Thrift GoogleProtocol BuffersAvro應該是屬于同一個級別的框架,都能跨語言,性能優秀,數據精簡,但是Avro的動態模式(不用生成代碼,而且性能很好)這個特點讓人非常喜歡,比較適合RPC的數據交換。

2) RPC邏輯上分為二層,一是傳輸層,負責網絡通信;二是協議層,將數據按照一定協議格式打包和解包。 決定參考前面三個開源框架的特點,實現一個輕量級的RPC框架。

 

 

3avro-rpc介紹

avro-rpc 是一個支持跨語言實現的RPC服務框架。非常輕量級,實現簡潔,使用方便,同時也方便使用者進行二次開發,邏輯上該框架分為兩層:

1:網絡傳輸層。使用NettyNio實現。

2:協議層。可擴展目前支持的數據序列化方式有AvroJson, Hessian,Java序列化。 使用者可以注冊自己的協議格式及序列化方式。

主要特點:

1:客戶端傳輸層與應用層邏輯分離,傳輸層主要職責包括創建連接,連接查找與復用,傳輸數據,接收服務端回復后回調應用層;

2:客戶端支持同步調用和異步調用。服務異步化能很好的提高系統吞吐量,建議使用異步調用。為防止異步發送請求過快,客戶端增加了“請求流量限制”功能,調用超時管理。

3:服務端有一個協議注冊工廠和序列化注冊工廠。這樣方便針對不同的應用場景來定制服務方式。RPC應該只是服務方式的一種。在分布式的系統架構中,分布式節點之間的通信會存在多種方式,比如MQTOP消息,一個消息可以有多個訂閱者。因此avro-rpc不僅僅是一個RPC服務框架,還是一個分布式通信的一個基礎骨架,提供了很好的擴展性;

4:非常輕量級,性能好,適合二次開發。



運行性能測試實例

1. 啟動服務端 code.google.dsf.test.StartServerTest

2. 運行客戶端 code.google.dsf.test.performance.RPSTest

測試對象,客戶端采用異步方式發送一個POJO10個屬性字段)對象

兩臺,一臺運行客戶端,一臺運行服務端,配置如下:

· CPU: E5645 @ 2.40GHz 2 core

· Memory: 2G

· Network: 1000Mb

 

JVM Options: -server -XX:+UseParallelGC  -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -Xms512M -Xmx1024M

 

程序執行6分鐘,RPS: 70108

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!