1、可以夠跨多種開發工具及平台,比如說企業已有的系統開發完畢或者子系統已經部署交付了,它提供了rpc介面,新的子系統要整合,使用業界通用的rpc介面就可以整合了,你不可能要求原來的開發商再來修改一遍介面,否則的話就變成了資訊孤島。
2、能夠跨多個伺服器,這個在其他計算機上很容易透過80埠的rpc來訪問各個伺服器。其他如tcp訊息來訪問,儘管高效但不方便而且還要穿透防火牆,尤其不方便網頁整合。
由於他的諸多優勢,在分布式的場景下經常會被用到,在微服務架構中,每個服務例項負責某一單一領域的業務實現,不同服務例項之間需要進行頻繁的互動來共同實現業務。服務例項之間常用輕量級的遠端呼叫方式進行通訊,比如rpc和http。
對於rpc和http二者而言,http是應用層協議,而rpc網路協議相對靈活且可以定製,並且提供更加貼近本地方法呼叫的遠端過程呼叫形式,所以一般來說往往使用rpc通訊。
rpc(remote procedure call)的縮寫,是一種通過網路從遠端電腦程式上請求服務,不需要了解底層網路技術的協議。只是一套協議,基於這套協議規範來實現的框架都可以稱之為rpc框架。
rpc呼叫示意圖
(1)客戶端程序以正常的方式呼叫客戶端存根
(2)客戶端存根生成乙個訊息,然後呼叫本地作業系統的網路通訊模組,存根進入阻塞狀態
(3)客戶端作業系統將網路訊息傳送給遠端作業系統
(4)遠端作業系統將網路訊息交給服務端存根
(5)伺服器存根將引數提取出來,而後呼叫服務端程式
(6)服務端程式執行相應的操作,操作完成後將結果返回給服務端存根。
(7)服務端存根將結果打包成乙個訊息,而後呼叫本地作業系統
(8)服務端作業系統江含有結果的訊息傳送給客戶端作業系統
(9)客戶端作業系統將含有結果的訊息交給客戶端的存根,存根從阻塞狀態恢復,進入執行狀態
(10)客戶存根將結果從訊息中提取出來,返回給呼叫它的客戶端程序
上述步驟對客戶存根發出的本地呼叫轉換成對伺服器程序的本地呼叫,而客戶端和服務端都不會意識到中間步驟的存在,這也是rpc的優勢之一。
注:此時就會涉及到堆和棧分別儲存的什麼東西,這塊要思考的這個存根究竟是個什麼?他存了什麼?個人感覺儲存了棧,存放呼叫函式的名稱,引數,回傳結果等。
另外,堆和棧有什麼區別,他們究竟分別存放什麼呢?
堆:堆由開發人員分配和釋放, 若開發人員不釋放,程式結束時由 os **,分配方式類似於鍊錶。堆中儲存的資料若未釋放,則其生命週期等同於程式的生命週期。
堆上記憶體空間的分配過程:作業系統有乙個記錄空閒記憶體位址的鍊錶,當系統收到程式的申請時,會遍歷該鍊錶,尋找第乙個空間大於所申請空間的堆節點,然後將該節點從空閒節點鍊錶中刪除,並將該節點的空間分配給程式。另外,對於大多數系統,會在這塊記憶體空間中的首位址處記錄本次分配的大小,這樣,**中的delete語句才能正確地釋放本記憶體空間。由於找到的堆節點的大小不一定正好等於申請的大小,系統會自動地將多餘的那部分重新放入空閒鍊錶。
引數傳遞:
1、傳遞值引數
2、rpc一般不支援直接引用傳遞(傳遞引數的引用時需要把引數的副本發過去)
3、資料格式的統一問題,可使用(protobuf,json,xml)這個看具體的選擇
通訊協議制定1、協議設計:考慮避免無效字段、通訊功能特性的支援(crc校驗等)、如何公升級
2、私有協議的編譯碼
3、命令定義和命令處理器
4、命令協議
5、通訊模式
1、服務方法註冊,包括註冊介面,通過反射處理將方法取出,並存到map中
2、處理網路呼叫,主要是監聽埠、讀取資料報、解碼請求、呼叫反射處理後的方法,將返回值編碼,返回客戶端。
1、同步呼叫和非同步呼叫
2、請求引數編碼
3、接收服務端響應
客戶端請求過程
遠端過程呼叫 RPC
rpc是遠端過程呼叫 remote procedure call 的縮寫。就是一台伺服器上的服務通過引數傳遞的方式呼叫另一台服 務器的服務,並獲取返回結果。比如有兩台伺服器a b,a上的服務想要呼叫b上的函式或方法,由於不在同乙個記憶體空間,不能直接呼叫,需要通過網路來表達呼叫的語義和傳達呼叫的資料...
RPC遠端過程呼叫
1.rpc 1.1 rpc remote procedure call 遠端過程呼叫.遠端過程指的是不是同乙個程序。1.2 rpc至少有兩個過程。呼叫方 client 被呼叫方 server 1.3 client主動發起請求,呼叫指定ip和port的server中的方法,把呼叫結果返回給client...
RPC 遠端過程呼叫協議
remote procedure call 1 rpc 遠端過程呼叫協議,它是一種通過網路從遠端電腦程式上請求服務,而不需要了解底層網路技術的協議。rpc協議假定某些傳輸協議的存在,如tcp或udp,為通訊程式之間攜帶資訊資料。在osi網路通訊模型中,rpc跨越了傳輸層和應用層。rpc使得開發包括網...