主流RPC框架詳解,以及與SOA、REST的區別
什麼是RPC
RPC(Remote Procedure Call Protocol)——遠端過程呼叫協議,它是一種透過網路從遠端計算機程式上請求服務,而不需要了解底層網路技術的協議。
簡言之,RPC使得程式能夠像訪問本地系統資源一樣,去訪問遠端系統資源。
比較關鍵的一些方面包括:
通訊協議
序列化
資源(介面)描述
服務框架
效能
語言支援等。
REST 和 SOAP、RPC
1.REST
可以看著是http協議的一種直接應用,預設基於json作為傳輸格式,使用簡單,學習成本低效率高,但是安全性較低。
2.SOAP
SOAP是一種資料交換協議規範,是一種輕量的、簡單的、基於XML的協議的規範。而SOAP可以看著是一個重量級的協議,基於xml,SOAP在安全方面是透過使用XML-Security和XML-Signature兩個規範組成了WS-Security來實現安全控制的,當前已經得到了各個廠商的支援 。
它有什麼優點?簡單總結為: 易用,靈活,跨語言,跨平臺。
3.RPC(遠端過程呼叫)是什麼?
簡單的說,RPC就是從一臺機器(客戶端)上透過引數傳遞的方式呼叫另一臺機器(伺服器)上的一個函式或方法(可以統稱為服務)並得到返回的結果。
REST 和 SOAP、RPC 有何區別呢?沒什麼太大區別,他們的本質都是提供可支援分散式的基礎服務,最大的區別在於他們各自的的特點所帶來的不同應用場景 。
RPC工作原理
執行時,一次客戶機對伺服器的RPC呼叫,其內部操作大致有如下十步:
1.呼叫客戶端控制程式碼;執行傳送引數
2.呼叫本地系統核心傳送網路訊息
3.訊息傳送到遠端主機
4.伺服器控制程式碼得到訊息並取得引數
5.執行遠端過程
6.執行的過程將結果返回伺服器控制程式碼
7.伺服器控制程式碼返回結果,呼叫遠端系統核心
8.訊息傳回本地主機
9.客戶控制程式碼由核心接收訊息
10.客戶接收控制程式碼返回的資料
主流RPC框架
簡單介紹其中幾種比較典型的:
1.RMI
利用java.rmi包實現,基於Java遠端方法協議(Java Remote Method Protocol) 和java的原生序列化。
2.Hessian
是一個輕量級的remoting onhttp工具,使用簡單的方法提供了RMI的功能。 基於HTTP協議,採用二進位制編解碼。
3.protobuf-rpc-pro
是一個Java類庫,提供了基於 Google 的 Protocol Buffers 協議的遠端方法呼叫的框架。基於 Netty 底層的 NIO 技術。支援 TCP 重用/ keep-alive、SSL加密、RPC 呼叫取消操作、嵌入式日誌等功能。
4.Thrift
是一種可伸縮的跨語言服務的軟體框架。它擁有功能強大的程式碼生成引擎,無縫地支援C + +,C#,Java,Python和PHP和Ruby。thrift允許你定義一個描述檔案,描述資料型別和服務介面。依據該檔案,編譯器方便地生成RPC客戶端和伺服器通訊程式碼。
最初由facebook開發用做系統內個語言之間的RPC通訊,2007年由facebook貢獻到apache基金 ,現在是apache下的opensource之一 。支援多種語言之間的RPC方式的通訊:php語言client可以構造一個物件,呼叫相應的服務方法來呼叫java語言的服務,跨越語言的C/S RPC呼叫。底層通訊基於SOCKET。
5.Avro
出自Hadoop之父Doug Cutting, 在Thrift已經相當流行的情況下推出Avro的目標不僅是提供一套類似Thrift的通訊中介軟體,更是要建立一個新的,標準性的雲端計算的資料交換和儲存的Protocol。支援HTTP,TCP兩種協議。
6.Dubbo
Dubbo是 阿里巴巴公司開源的一個高效能優秀的服務框架,使得應用可透過高效能的 RPC 實現服務的輸出和輸入功能,可以和 Spring框架無縫整合。
簡單的使用方法:
1、被遠端呼叫的介面,需要在zookeeper中進行註冊;
2、需要遠端呼叫的服務在zookeeper中宣告自己需要的介面;
3、zookeeper將已經註冊的介面通知給需要的服務;
以上就是主流RPC的介紹,以及與soap等的區別。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31555151/viewspace-2214907/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一文秒懂Restful、SOAP、RPC、SOA、微服務的區別RESTRPC微服務
- CSS偽元素詳解以及偽元素與偽類的區別CSS
- pbgo: 基於Protobuf的rpc/rest迷你框架GoRPCREST框架
- equals與==的區別(詳解)
- IBM觀點:SOA與微服務區別?IBM微服務
- 詳解iframe與frame的區別
- synchronized與Lock的區別與使用詳解synchronized
- 詳解RPC遠端呼叫和訊息佇列MQ的區別RPC佇列MQ
- TCP與UDP區別詳解TCPUDP
- cookie和session的詳解與區別CookieSession
- SOA與服務化框架框架
- Kafka與ActiveMQ的區別與聯絡詳解KafkaMQ
- 詳解Kafka與ActiveMQ的區別與聯絡!KafkaMQ
- Java運算子>>與>>>區別詳解Java
- rem與em的使用和區別詳解REM
- xargs 命令詳解,xargs 與管道的區別
- table中cesllspacing與cellpadding的區別詳解padding
- PHP isset()與empty()的使用區別詳解PHP
- cookie與session的區別(圖文詳解)CookieSession
- 單體巨石、微服務和SOA關係與區別微服務
- RPC詳解RPC
- Python之列表與元組的區別詳解Python
- SOA架構和微服務架構的區別架構微服務
- GraphQL入門:GraphQL與REST區別的不同舉例 - SithiraREST
- systemctl的操作詳解總結及其與service的區別
- 【Java註解用法】@Autowired 與@Resource的區別以及@Qualifier的介紹Java
- Android中View自定義XML屬性詳解以及R.attr與R.styleable的區別AndroidViewXML
- 棧與堆的區別以及增長方向
- async與defer的作用與區別以及阻塞優化優化
- JRE 和 JDK 的區別詳解JDK
- MyBatis中#{}和${}的區別詳解MyBatis
- Dijkstra演算法和Floyd演算法超詳解以及區別演算法
- 區塊鏈資產主流的三大交易方式詳解區塊鏈
- CreateThread()與beginthread()的區別詳細解析thread
- vi與vim的區別以及常用命令***
- vi與vim的區別以及常用命令
- 3大主流分散式事務框架詳解(圖文總結)分散式框架
- 架構與思維:瞭解Http 和 Https的區別(圖文詳解)架構HTTP