深入淺出rpc框架 | 青訓營筆記

語言: CN / TW / HK

theme: juejin

這是我參與「第三屆青訓營 -後端場」筆記創作活動的第2篇筆記

基本概念

遠端函式呼叫(RPC)

實際上就是一個系統提供可供其他系統呼叫的函式,當其他系統傳輸正確的引數並呼叫相應函式,則可以在該系統中執行相應的系統功能。這就是最為常見的,使用遠端函式呼叫的系統介面方式。

系統間資料互動的目的,就是一個系統中的功能執行結果,以資料的形式被被傳輸到另外一個系統,並在利用此結果資料,在另外這個系統中執行相應的系統功能。

遠端函式呼叫(RFC)這種介面模式,就是資料會直接傳輸相應系統,並在此係統中直接執行系統功能。 

我們可以形象的理解為,被呼叫的系統A,將其系統的賬號和密碼交給了外部系統B,外部系統B在必要時,會登陸到A系統中,用系統B中的正確引數,也就是資料,去執行A系統中的系統功能。

RPC需要解決的問題

  1. 函式對映:如何將路由與函式對應
  2. 資料轉換成位元組流:資料如何轉換成位元組流進行傳輸
  3. 網路傳輸:保證機器之間的通訊

一次RPC的完整過程

image.png

IDL(Interface description language)檔案

IDL通過一種中立的方式來描述介面,使得在不同平臺上執行的物件和用不同語言編寫的程式可以相互通訊

生成程式碼

通過編譯器工具把IDL檔案轉換成語言對應的靜態庫

編解碼

從記憶體中表示到位元組序列轉換稱為編碼,反之為解碼,也常叫做序列化和反序列化

通訊協議

規範了資料在網路中的傳輸內容和格式,除必須的請求/響應資料外,通常還會包含額外的元資料

網路傳輸

通常基於成熟的網路庫,用TCP/UDP傳輸

RPC的好處

  1. 單一職責,有利於分工協作和運維開發
  2. 可擴充套件性強,資源使用率更優
  3. 故障隔離,服務的整體可靠性更高

RPC分層

RPC分層.png

RPC框架的關鍵指標

穩定性

保障策略

  1. 熔斷:保護呼叫方,防止被呼叫的服務出現問題而影響到整個鏈中,在被呼叫的服務出現問題時有一個兜底的方案
  2. 限流: 保護被呼叫方,防止大流量把服務壓垮
  3. 超時控制:避免浪費資源在不可用節點上
  4. 負載均衡:保證各服務節點的流量平均分配
  5. 重試:一定程度保證服務的正常響應,一定程度上消除因網路暫時中斷帶來的問題

易用性

  1. 合理的預設引數選項(約定大於配置),豐富的文件
  2. 有豐富的生成程式碼工具、腳手架工具

擴充套件性

  1. 可以自己擴充套件,比如增加中介軟體

觀測性

  1. Log, Metric, Tracing
  2. 內建觀測性服務

高效能

可以利用連線池,多路複用,使用高效能的編解碼協議和網路庫來提高效能

既有HTTP,為什麼用RPC

RPC 只是一種設計而已

RPC 只是一種概念、一種設計,就是為了解決 不同服務之間的呼叫問題, 它一般會包含有 傳輸協議 和 序列化協議 這兩個。

但是,HTTP 是一種協議,RPC框架可以使用 HTTP協議作為傳輸協議或者直接使用TCP作為傳輸協議,使用不同的協議一般也是為了適應不同的場景。

RPC框架功能更齊全

成熟的 RPC框架還提供好了“服務自動註冊與發現”、"智慧負載均衡"、“視覺化的服務治理和運維”、“執行期流量排程”等等功能,這些也算是選擇 RPC 進行服務註冊和發現的一方面原因吧!

總結

RPC框架在微服務在應用廣泛,可以說是不可或缺的一部分。總得來說,RPC框架主要目地是讓分散式或者微服務系統中不同服務之間的呼叫像本地呼叫一樣簡單。