如何自己設計一個類似 Dubbo 的 RPC 框架?

本博客轉自git項目advancejava

面試題剖析

其實問到你這問題,你起碼不能認慫,因爲是知識的掃盲,那我不可能給你深入講解什麼 kafka 源碼剖析,dubbo 源碼剖析,何況我就算講了,你要真的消化理解和吸收,起碼個把月以後了。

所以我給大家一個建議,遇到這類問題,起碼從你瞭解的類似框架的原理入手,自己說說參照 dubbo 的原理,你來設計一下,舉個例子,dubbo 不是有那麼多分層麼?而且每個分層是幹啥的,你大概是不是知道?那就按照這個思路大致說一下吧,起碼你不能懵逼,要比那些上來就懵,啥也說不出來的人要好一些。

舉個栗子,我給大家說個最簡單的回答思路:

• 上來你的服務就得去註冊中心註冊吧,你是不是得有個註冊中心,保留各個服務的信心,可以用 zookeeper 來做,對吧。
• 然後你的消費者需要去註冊中心拿對應的服務信息吧,對吧,而且每個服務可能會存在於多臺機器上。
• 接着你就該發起一次請求了,咋發起?當然是基於動態代理了,你面向接口獲取到一個動態代理,這個動態代理就是接口在本地的一個代理,然後這個代理會找到服務對應的機器地址。
• 然後找哪個機器發送請求?那肯定得有個負載均衡算法了,比如最簡單的可以隨機輪詢是不是。
• 接着找到一臺機器,就可以跟它發送請求了,第一個問題咋發送?你可以說用 netty 了,nio 方式;第二個問題發送啥格式數據?你可以說用 hessian 序列化協議了,或者是別的,對吧。然後請求過去了。
• 服務器那邊一樣的,需要針對你自己的服務生成一個動態代理,監聽某個網絡端口了,然後代理你本地的服務代碼。接收到請求的時候,就調用對應的服務代碼,對吧。

發佈了107 篇原創文章 · 獲贊 15 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章