36、如何自己設計一個類似dubbo的rpc框架?
1、面試題
如何自己設計一個類似dubbo的rpc框架?
2、面試官心裡分析
說實話,就這問題,其實就跟問你,如何自己設計一個MQ,一樣的道理,就考兩個:
(1)你有沒有對某個rpc框架原理有非常深入的理解;
(2)你能不能從整體上來思考一下,如何設計一個rpc框架,考考你的系統設計能力。
3、面試題剖析
我給大家一個建議,遇到這類問題,從你瞭解的類似框架的原理入手,自己說說參照dubbo的原理,你來設計一下,舉個例子,dubbo不是有那麼多分層麼?而且每個分層是幹啥的,你大概是不是知道?那就按照這個思路大致說一下吧,起碼你不能懵逼,要比那些上來就懵,啥也說不出來的人要好一些。
舉個例子,我給大家說個最簡單的回答思路:
(1)上來你的服務就得去註冊中心註冊吧,你是不是得有個註冊中心,保留各個服務的信心,可以用zookeeper來做,對吧!
(2)然後你的消費者需要去註冊中心拿對應的服務資訊吧,對吧,而且每個服務可能會存在於多臺機器上;
(3)接著你就該發起一次請求了,咋發起?蒙圈了是吧。當然是基於動態代理了,你面向介面獲取到一個動態代理,這個動態代理就是介面在本地的一個代理,然後這個代理會找到服務對應的機器地址;
(4)然後找哪個機器傳送請求?那肯定得有個負載均衡演算法了,比如最簡單的可以隨機輪詢是不是;
(5)接著找到一臺機器,就可以跟他傳送請求了,第一個問題咋傳送?你可以說用netty了,nio方式;第二個問題傳送啥格式資料?你可以說用hessian序列化協議了,或者是別的,對吧。然後請求過去了;
(6)伺服器那邊一樣的,需要針對你自己的服務生成一個動態代理,監聽某個網路埠了,然後代理你本地的服務程式碼。接收到請求的時候,就呼叫對應的服務程式碼,對吧。
這就是一個最最基本的rpc框架的思路,先不說你有多牛逼的技術功底,哪怕這個最簡單的思路你先給出來行不行?