摘要:知乎的點贊,應該還是可以參考的。除了網絡通信,還需要有高效的序列化框架,以及一種尋址方式,如果是帶會話狀態的調用,還需要有會話的狀態保持的功能。一般來說,框架實現的架構原理都是類似的。服務端響應主要是服務端業務邏輯實現。
本博客 貓叔的博客,轉載請申明出處
在我剛剛了解分布式的時候,經常對RPC和分布式有些混淆,甚至一直以為兩者對等,所以我們先看看他們有什么區別?
RPC實現了服務消費調用方Client與服務提供實現方Server之間的點對點調用流程,即包括了stub、通信、數據的序列化/反序列化。且Client與Server一般采用直連的調用方式。
而分布式服務框架,除了包括RPC的特性,還包括多臺Server提供服務的負載均衡、策略及實現,服務的注冊、發布與引入,以及服務的高可用策略、服務治理等等。
那么RPC是什么呢?
百度百科是這樣表示的:
RPC(Remote Procedure Call)—遠程過程調用,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程序之間攜帶信息數據。在OSI網絡通信模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網絡分布式多程序在內的應用程序更加容易。
它甚至給出了工作原理,這一點很驚喜。
1.調用客戶端句柄;執行傳送參數
2.調用本地系統內核發送網絡消息
3.消息傳送到遠程主機
4.服務器句柄得到消息并取得參數
5.執行遠程過程
6.執行的過程將結果返回服務器句柄
7.服務器句柄返回結果,調用遠程系統內核
8.消息傳回本地主機
9.客戶句柄由內核接收消息
10.客戶接收句柄返回的數據
我喜歡搜查更多的信息資料,所以我又找到了知乎上的回答。
知乎1.7k的點贊,應該還是可以參考的。
恰如回答提到的,RPC是指遠程過程調用,也就是說兩臺服務器A,B,一個應用部署在A服務器上,想要調用B服務器上應用提供的函數/方法,由于不在一個內存空間,不能直接調用,需要通過網絡來表達調用的語義和傳達調用的數據。
至于為什么使用RPC?答主也提到,無法在一個進程內,甚至一個計算機內通過本地調用的方式完成的需求,比如不同系統間的通訊,甚至不同組織間的通訊。
這里再說一下關于Netty,Netty框架不局限于RPC,更多的是作為一種網絡協議的實現框架,比如HTTP,由于RPC需要高效的網絡通信,就可以選擇Netty作為基礎。除了網絡通信,RPC還需要有高效的序列化框架,以及一種尋址方式,如果是帶會話(狀態)的RPC調用,還需要有會話的狀態保持的功能。
好了,讓我們再來整理一下,什么是RPC?
RPC(遠程過程調用)一般用來實現部署在不同機器上的系統之間的方法調用,使得程序能夠像訪問本地系統資源一樣,通過網絡傳輸去訪問遠端系統資源。一般來說,RPC框架實現的架構原理都是類似的。
可以這樣說,
客戶端調用:負責發起RPC調用,為調用方用戶提供使用API。
服務端響應:主要是服務端業務邏輯實現。
序列化/反序列化:負責對RPC調用通過網絡傳輸的內容進行序列化與反序列化,不同的RPC框架有不同的實現機制。一般分為文本(XML、JSON)與二進制(Java原生的、Hessian、protobuf、Thrift、Avro、Kryo、MessagePack),需要注意的是,不同的序列化方式在可讀性、碼流大小、支持的數據類型及性能等方面都存在較大差異,我們可以根據需要自行選擇。
Stub:我們看成代理對象,它會屏蔽RPC調用過程中的復雜的網絡處理邏輯,使其透明簡單,且能夠保持與本地調用一樣的代碼風格。
通信傳輸:即RPC的底層通信傳輸模塊,一般通過Socket在客戶端與服務端之間傳遞請求與應答消息。
公眾號:Java貓說學習交流群:728698035
現架構設計(碼農)兼創業技術顧問,不羈平庸,熱愛開源,雜談程序人生與不定期干貨。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74210.html
摘要:支持相關規范和標準,包括同上。支持多種傳輸協議和協議綁定數據綁定。構建端還有其服務實現,接口使用注解,標明是一個遠程服務接口。然后編寫一個的啟動程序,并運行,我想你會成功的因為我看到了下圖是一種跨平臺的技術協議。 本博客 貓叔的博客,轉載請申明出處 學習系列 RPC框架是啥? RPC框架是啥之Java自帶RPC實現,RMI框架入門 Apache CXF一款WebService RP...
摘要:讓我們優先來實現一個的案例吧。為了防止被防火墻攔截,需要強制制定的通信端口,一般通過自定義一個類來實現。完美支持語言所獨有的特性,不支持其他語言。使用了原生序列化,所有序列化對象必須實現接口。 本博客 貓叔的博客,轉載請申明出處 學習系列 RPC框架是啥? Java自帶RPC實現,RMI框架入門 首先RMI(Remote Method Invocation)是Java特有的一種RPC實...
摘要:服務發現問題對于來講,我們已經解決了傳輸協議的問題基于,協議約定問題基于,最后要解決的是服務發現問題。另外一方是服務消費方,向獲取服務提供方的注冊信息。 ????上一節我們了解了基于 XML 的 SOAP 協議,SOAP 的 S 是啥意思來著?是 Simple,但是好像一點兒都不簡單啊! 傳輸協議問題 ????對于 SOAP 來講,比如我創建一個訂單,用 POST,在 XML 里面寫明...
摘要:服務發現問題對于來講,我們已經解決了傳輸協議的問題基于,協議約定問題基于,最后要解決的是服務發現問題。另外一方是服務消費方,向獲取服務提供方的注冊信息。 ????上一節我們了解了基于 XML 的 SOAP 協議,SOAP 的 S 是啥意思來著?是 Simple,但是好像一點兒都不簡單?。?傳輸協議問題 ????對于 SOAP 來講,比如我創建一個訂單,用 POST,在 XML 里面寫明...
閱讀 3451·2019-08-30 10:54
閱讀 3147·2019-08-29 16:38
閱讀 2166·2019-08-26 14:06
閱讀 1512·2019-08-23 15:39
閱讀 3034·2019-08-23 15:37
閱讀 2882·2019-08-23 13:50
閱讀 3190·2019-08-22 17:14
閱讀 2374·2019-08-22 15:44