RPC框架是啥?

本博客 貓叔的博客,轉載請申明出處git

在我剛剛瞭解分佈式的時候,常常對RPC和分佈式有些混淆,甚至一直覺得二者對等,因此咱們先看看他們有什麼區別github

RPC實現了服務消費調用方Client與服務提供實現方Server之間的點對點調用流程,即包括了stub、通訊、數據的序列化/反序列化。且Client與Server通常採用直連的調用方式。服務器

而分佈式服務框架,除了包括RPC的特性,還包括多臺Server提供服務的負載均衡、策略及實現,服務的註冊、發佈與引入,以及服務的高可用策略、服務治理等等。網絡

那麼RPC是什麼呢?架構

百度百科是這樣表示的:負載均衡

RPC(Remote Procedure Call)—遠程過程調用,它是一種經過網絡從遠程計算機程序上請求服務,而不須要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,爲通訊程序之間攜帶信息數據。在OSI網絡通訊模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網絡分佈式多程序在內的應用程序更加容易。框架

它甚至給出了工做原理,這一點很驚喜。分佈式

image

  • 1.調用客戶端句柄;執行傳送參數
  • 2.調用本地系統內核發送網絡消息
  • 3.消息傳送到遠程主機
  • 4.服務器句柄獲得消息並取得參數
  • 5.執行遠程過程
  • 6.執行的過程將結果返回服務器句柄
  • 7.服務器句柄返回結果,調用遠程系統內核
  • 8.消息傳回本地主機
  • 9.客戶句柄由內核接收消息
  • 10.客戶接收句柄返回的數據

我喜歡搜查更多的信息資料,因此我又找到了知乎上的回答。函數

image

知乎1.7k的點贊,應該仍是能夠參考的。性能

恰如回答提到的,RPC是指遠程過程調用,也就是說兩臺服務器A,B,一個應用部署在A服務器上,想要調用B服務器上應用提供的函數/方法,因爲不在一個內存空間,不能直接調用,須要經過網絡來表達調用的語義和傳達調用的數據。

至於爲何使用RPC?答主也提到,沒法在一個進程內,甚至一個計算機內經過本地調用的方式完成的需求,好比不一樣系統間的通信,甚至不一樣組織間的通信。

這裏再說一下關於Netty,Netty框架不侷限於RPC,更多的是做爲一種網絡協議的實現框架,好比HTTP,因爲RPC須要高效的網絡通訊,就能夠選擇Netty做爲基礎。除了網絡通訊,RPC還須要有高效的序列化框架,以及一種尋址方式,若是是帶會話(狀態)的RPC調用,還須要有會話的狀態保持的功能。

好了,讓咱們再來整理一下,什麼是RPC

RPC(遠程過程調用)通常用來實現部署在不一樣機器上的系統之間的方法調用,使得程序可以像訪問本地系統資源同樣,經過網絡傳輸去訪問遠端系統資源。通常來講,RPC框架實現的架構原理都是相似的。

image

能夠這樣說,

  • 客戶端調用:負責發起RPC調用,爲調用方用戶提供使用API。

  • 服務端響應:主要是服務端業務邏輯實現。

  • 序列化/反序列化:負責對RPC調用經過網絡傳輸的內容進行序列化與反序列化,不一樣的RPC框架有不一樣的實現機制。通常分爲文本(XML、JSON)與二進制(Java原生的、Hessian、protobuf、Thrift、Avro、Kryo、MessagePack),須要注意的是,不一樣的序列化方式在可讀性、碼流大小、支持的數據類型及性能等方面都存在較大差別,咱們能夠根據須要自行選擇。

  • Stub:咱們當作代理對象,它會屏蔽RPC調用過程當中的複雜的網絡處理邏輯,使其透明簡單,且可以保持與本地調用同樣的代碼風格。

  • 通訊傳輸:即RPC的底層通訊傳輸模塊,通常經過Socket在客戶端與服務端之間傳遞請求與應答消息

公衆號:Java貓說

學習交流羣:728698035

現架構設計(碼農)兼創業技術顧問,不羈平庸,熱愛開源,雜談程序人生與不按期乾貨。

Image Text
相關文章
相關標籤/搜索