23 | 如何在沒有介面的情況下進行RPC呼叫?
我們什么情況下需要在沒有介面時進行RPC呼叫?
列舉2個典型場景:
- 我們搭建一個測驗平臺,允許各個業務方在測驗憑條上通過輸入介面、分組名、方法名以及引數值,在線測驗自己發布的RPC服務,
- 我們要搭建一個輕量級的服務網關,可以讓各個業務方用HTTP的方式,通過服務網關呼叫其他服務,
所謂RPC呼叫,本質上就是呼叫端向服務端發送一條請求訊息,服務端接收并處理,之后向呼叫端發送一條回應訊息,呼叫端處理完回應訊息后,一次RPC呼叫就完成了,
如果呼叫端可以將服務端需要知道的訊息,例如介面名、業務分組名、方法名以及引數資訊封裝成請求訊息發送給服務器,服務端就能夠決議并處理這條請求資訊,這樣問題就解決了,
我們可以使用泛化介面的方式,來讓RPC框架通過動態代理的方式,在沒有介面的情況下,進行RPC呼叫,也稱為泛化呼叫,
24 | 如何在線上環境里兼容多種RPC協議?
不同的RPC框架隨著互聯網技術的發展而慢慢涌現,這些框架會在不同時期被引入到不同的專案中去解決應用之間的通信問題,這樣就導致了我們在線上的環境中會存在各種各樣的RPC框架,
我們可以嘗試通過自下而上的滾動升級方式,最終讓所有的應用都切換到統一的RPC框架上,這種方法有2個局限:
- 這要求我們能夠清楚的梳理出各個應用之間的呼叫關系,只有這樣,我們才能按部就班地把所有應用都升級到新的RPC框架上,
- 這要求應用之間的關系不能存在互相呼叫的情況,最好是應用之間的呼叫關系就像一棵樹,有一定的層次關系,但實際上,應用之間的呼叫關系往往會變成一張網,
這里的關鍵在于,我們要讓新的RPC能同時支持多種RPC呼叫,當一個呼叫方切換到新的RPC之后,呼叫方和服務提供方之間就可以用新的協議完成呼叫,當呼叫方用老的RPC進行呼叫時,呼叫方和服務提供方之間就繼續沿用老的協議完成呼叫,
RPC協議的作用是用來分割二進制資料流,不同的協議約定的資料包格式是不一樣的,而且每種協議開頭都有一個協議編碼, 一般叫做magic number,
當RPC收到資料包之后,我們可以先決議出magic number,之后就可以找到對應協議的資料格式,然后使用相應的資料格式去決議收到的二進制資料包,
協議決議程序就是把一連串的二進制資料變成一個RPC內部物件,我們可以把和協議相關的物件轉換成一個和協議無關的物件,
當完成真正的方法呼叫以后,RPC回傳的也是一個和協議無關的通用物件,當我們向呼叫方回寫資料時,我們還需要把通用物件轉換成和協議相關的物件,
作者:李潘 出處:http://wing011203.cnblogs.com/ 本文著作權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利,轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/542851.html
標籤:Java
