關於 RPC遠程過程調用協議的理解

 運用這個技術的應用場景:在公司裏的系統都有成千上萬的服務,各個服務都部署在不一樣的服務器上。若是想調用這個服務的話咱們就要像以前老師那樣寫一個webserveice去訪問這個服務才能調用服務裏面的方法。這是一個很繁瑣的過程,那麼咱們有沒有想過若是咱們能直接像日常寫方法去調用遠程服務上面的方法該有多好。
下面給大家介紹一種新的調用的遠端的服務的方式:RPC,市面上不少大互聯網公司中被普遍使用像阿里巴巴的dubbo,fecebook的thrift。
 
他的底層的其中一種實現是利用jdk的動態代理,在客戶端的動態代理類裏面的invoke方法實現了遠程的服務鏈接;(即序列化)裏面封裝了接口名稱,方法名,還要傳參數類型和參數值,超時時間,返回值,狀態,和請求的ID。
 
 
通訊採用的IO模型是NIO
爲何要採用requsetID?用於身份驗證
 
 
本身發佈服務的時候遇到到的ip寫死問題,不能經過人肉去修改Ip,覺得很麻煩,因此咱們一般會使用zookeeper,這個東西是一個分佈式文件系統,咱們能夠把服務的地址部署到上面,它會幫你分辨出那個,超時參數,服務的主機宕機了,自動切換能用的服務地址,就不用手動去修改了
 
 
  • 1)服務消費方(client)調用以本地調用方式調用服務;
  • 2)客戶根存(前哨)接收到調用後負責將方法、參數等組裝成可以進行網絡傳輸的消息體;
  • 3)client stub找到服務地址,並將消息發送到服務端;
  • 4)server stub收到消息後進行解碼;
  • 5)server stub根據解碼結果調用本地的服務;
  • 6)本地服務執行並將結果返回給server stub;
  • 7)server stub將返回結果打包成消息併發送至消費方;
  • 8)client stub接收到消息,並進行解碼;
  • 9)服務消費方獲得最終結果。
相關文章
相關標籤/搜索