日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RPC调用框架比较分析

發布時間:2023/12/4 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RPC调用框架比较分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是RPC:

RPC(Remote Procedure Call Protocol)——遠程過程調用協議,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。

簡言之,RPC使得程序能夠像訪問本地系統資源一樣,去訪問遠端系統資源。

比較關鍵的一些方面包括,通訊協議,序列化,資源(接口)描述,服務框架,性能,語言支持等。

典型RPC調用框架:

RPC的實現和調用框架,五花八門,簡單介紹其中幾種比較典型的。

RMI實現,利用java.rmi包實現,基于Java遠程方法協議(Java Remote Method Protocol)

和java的原生序列化。

Hessian,是一個輕量級的remoting onhttp工具,使用簡單的方法提供了RMI的功能。 基于HTTP協議,采用二進制編解碼。

protobuf-rpc-pro是一個Java類庫,提供了基于 Google 的 Protocol Buffers 協議的遠程方法調用的框架。基于 Netty 底層的 NIO 技術。支持 TCP 重用/ keep-alive、SSL加密、RPC 調用取消操作、嵌入式日志等功能。

THRIFT是一種可伸縮的跨語言服務的軟件框架。它擁有功能強大的代碼生成引擎,無縫地支持C + +,C#,Java,Python和PHP和Ruby。thrift允許你定義一個描述文件,描述數據類型和服務接口。依據該文件,編譯器方便地生成RPC客戶端和服務器通信代碼。???

>>>最初由facebook開發用做系統內個語言之間的RPC通信 。

>>>2007年由facebook貢獻到apache基金 ,現在是apache下的opensource之一 。

>>>支持多種語言之間的RPC方式的通信:php語言client可以構造一個對象,調用相應的服務方法來調用java語言的服務 ,跨越語言的C/S RPC調用 。

>>>底層通訊基于SOCKET。

AVRO,Avro出自Hadoop之父Doug Cutting, 在Thrift已經相當流行的情況下Avro的推出,其目標不僅是提供一套類似Thrift的通訊中間件更是要建立一個新的,標準性的云計算的數據交換和 存儲的Protocol。支持HTTP,TCP兩種協議。

RPC調用框架的過程原理基本類似,以Thrift為例

Thrift 協議棧 以及各層的使用(java 為例)

1、model?? interface

服務的調用接口以及接口參數model、返回值model

2、Tprotocol??? 協議層

將數據(model)編碼 、解碼 。

3、Ttramsport 傳輸層

編碼后的數據傳輸(簡單socket、http)

5、Tserver

服務的Tserver類型,實現了幾種rpc調用(多線程、單線程非阻塞IO、多線程非阻塞IO)

RPC調用框架比較:

Thrift與protobuf-rpc-pro比較

1、Another important difference are the languages supported by default.???

protobuf: Java, C++, Python???

Thrift: Java, C++, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, Ocaml

支持語言不同,thrift支持著更多的語言

2、Thrift supports ‘exceptions 。

thrift支持服務的異常 。

3、Protocol Buffers much easier to read 。Protobuf API looks cleaner, though the generated classes are all packed as an inner classes which is not so nice.

Protocol Buffers 在文檔方面比thrift豐富,而且比thrift簡單 。

4、Protobuf serialized objects are about 30% smaller then Thrift.

Protocol Buffers在序列化/反序列化、傳輸上性能更優 。

5、RPC is another key difference. Thrift generates code to implement RPC clients and servers wheres Protocol Buffers seems mostly designed as a data-interchange format alone.?

thrift提供了一套完整的rpc服務實現(多線程socket、單線程非阻塞的socket、多線程非阻塞socket)

6、And according to the wiki the Thrift runtime doesn't run on Windows.

thrift 對有些語言在windows上不支持:C++??

摘選自:?http://gemantic.iteye.com/blog/1199214?thrift的使用介紹

Apache Avro 與 Thrift 比較

轉自網絡,http://www.360doc.com/content/12/0515/08/2716732_211104190.shtml

文章有比較詳細的對比,值得仔細研讀。摘部分內容,如下。

Avro和Thrift都是跨語言,基于二進制的高性能的通訊中間件. 它們都提供了數據序列化的功能和RPC服務. 總體功能上類似,但是哲學不一樣. Thrift出自Facebook用于后臺各個服務間的通訊,Thrift的設計強調統一的編程接口的多語言通訊框架. Avro出自Hadoop之父Doug Cutting, 在Thrift已經相當流行的情況下Avro的推出,其目標不僅是提供一套類似Thrift的通訊中間件更是要建立一個新的,標準性的云計算的數據交換和 存儲的Protocol。 這個和Thrift的理念不同,Thrift認為沒有一個完美的方案可以解決所有問題,因此盡量保持一個Neutral框架,插入不同的實現并互相交互。 而Avro偏向實用,排斥多種方案帶來的 可能的混亂,主張建立一個統一的標準,并不介意采用特定的優化。Avro的創新之處在于融合了顯式,declarative的Schema和高效二進制的 數據表達,強調數據的自我描述,克服了以往單純XML或二進制系統的缺陷。Avro對Schema動態加載功能,是Thrift編程接口所不具備的,符合 了Hadoop上的Hive/Pig及NOSQL 等既屬于ad hoc,又追求性能的應用需求。

目前階段Thrift比Avro支持的語言更豐富.

Thrift: C++, C#, Cocoa, Erlang, Haskell, Java, Ocami, Perl, PHP, Python, Ruby, Smalltalk.

Avro: C, C++, Java, Python, Ruby, PHP.

Avro和Thrift處理Schema方法截然不同。

Thrift是一個面向編程的系統, 完全依賴于IDL->Binding Language的代碼生成。

Avro支持2種方式。Avro-specific方式和Thrift的方式相似,依賴代碼生成產生特定的類,并內嵌JSON Schema. Avro-generic方式支持Schema的動態加載,用通用的結構(map)代表數據對象,不需要編譯加載直接就可以處理新的數據源。

Avro的Schema文件有三種格式,依次是avdl,avpr,avsc,后兩種是json格式,avdl可以轉成avpr。

java -jar avroj-tools.jar idl src/test/idl/input/namespaces.avdl /tmp/namespaces.avpr

關于序列化,avro的機制,有更好的數據的透明度和可操作性,更高的存儲效率。

Thrift提供了多種序列化的實現:

TCompactProtocol: 最高效的二進制序列化協議,但并不是所有的綁定語言都支持。

TBinaryProtocol: 缺省簡單二進制序列化協議.

RPC服務

Avro提供了

HttpServer : 缺省,基于Jetty內核的服務.

NettyServer: 新的基于Netty的服務.

Thrift提供了:

TThreadPolServer: 多線程服務

TNonBlockingServer: 單線程 non blocking的服務

THsHaServer: 多線程 non blocking的服務

性能測試Benchmarking,兩者差相仿佛。

Conclusion

Thrift適用于程序對程序靜態的數據交換,要求schema預知并相對固定。

Avro在Thrift基礎上增加了對schema動態的支持且性能上不輸于Thrift。

Avro顯式schema設計使它更適用于搭建數據交換及存儲的通用工具和平臺,特別是在后臺。

目前Thrift的優勢在于更多的語言支持和相對成熟

比較分析結論:

基于以上三種框架比較分析,個人決定采用AVRO框架。

相關資源

protobuf-rpc-pro-demo-1.1.0及源碼 包含在附件中,該文件包中,包含一個1.1.0版本的運行環境(bin,lib中)以及最新3.3版本的demo源碼和protobuf-rpc-pro源碼。相關代碼在官網都可以下載到,?http://code.google.com/p/protobuf-rpc-pro/

protobuf-rpc-readme,個人的一點總結

thrifttest源碼,包含在附件中,該項目包含一個rmi的實現,以及thrift的實現。

Avrotest源碼,包含在附件中,該項目包含官網提供的一個數據序列化反序列化的兩種實現,SpecificMain,GenericMain;Specific方式的接口調用MailMain*;Generic方式的多接口調用,包含http方式和netty方式,http/,netty/;項目涵蓋了三種不同的Schema格式。

  • 本文附件下載:
  • tech_blog.zip?(4.5 MB)

總結

以上是生活随笔為你收集整理的RPC调用框架比较分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。