色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

程序員如何設計一個rpc框架?

錢斌斌2年前12瀏覽0評論

RPC框架全稱叫“RemoteProcedureCall”-遠程過程調(diào)用。

在分布式應用大放異彩的今天,軟件研發(fā)工作(微服務、中臺)是一定離不開分布式,既然說到分布式就一定離不開RPC,所以RPC框架也是廣大程序員進階路上必須跨過去的一道坎,也是工作中經(jīng)常會用到的。因此,了解并掌握RPC框架的底層原理和其設計思想也是每一個程序員的必備技能之一。

業(yè)界知名RPC

各大互聯(lián)網(wǎng)公司都或多或少實現(xiàn)了自己的RPC框架,其中比較出名且常用的有:

  1. 阿里巴巴的dubbo:這個大家應該都用到過吧?GitHub地址:https://github.com/apache/dubbo

  2. 基于阿里巴巴fork的當當版dubbox:這個貌似也都用到過?在dubbo不死不活的那幾年。GitHub地址:https://github.com/dangdangdotcom/dubbox

  3. 谷歌grpc:谷歌版本的rpc,GitHub地址(Java版):https://github.com/grpc/grpc-java

大家可以自己去GitHub上去搜索這三大框架并進行學習。

自己簡單實現(xiàn)一個最基本的RPC框架

如果我們自己去實現(xiàn)一個簡單的RPC框架要怎么做?這個時候我們應該意識到我們是在寫一個框架,寫一個框架意味著我們無法再隨意的使用第三方依賴包,也就是除了一些工具類包可以使用,其他的都需要我們用Java一行一行的寫出來。

下面提供一下如何用Java實現(xiàn)一個簡單的RPC功能(談不上框架):

先定義一個RPC接口類,代碼如下圖:

寫Rpc接口類的實現(xiàn)類實現(xiàn)這兩個方法,export方法如下圖:

refer方法:

框架定義完成后,我們開始使用這個框架,先簡單定義一個測試用的服務接口:

實現(xiàn)類:

我們需要寫一個provider把這個服務提供出去,運行這個main方法即可:

寫一個cosumer遠程消費這個服務:

運行這個main方法會輸出:

這樣一個簡單的RPC遠程過程調(diào)用就實現(xiàn)了,是不是很簡單?采用JavaSocket套接字編程和Java自帶的序列化。


設計一個RPC框架需要我們掌握哪些知識?

上面簡單實現(xiàn)了一個RPC框架,這個只是實驗性質(zhì)的編碼,實際上是無法使用的,因為在實際業(yè)務中,我們面對的是高并發(fā)、多請求。上面的套接字編程也是阻塞的,另外序列化也是用的Java自帶的序列化方法。

而了解主流rpc實現(xiàn)原理的同學都知道,每一個rpc框架在性能的考慮上都做到了自己框架的極致,框架本身既要考慮高可擴展的同時又得考慮高性能。

比如在dubbo中,默認使用hessian序列化的方式傳輸網(wǎng)絡數(shù)據(jù),同時也實現(xiàn)了主流的集中序列化方式,比如Java自帶的序列化、Kryo序列化、fastJson序列化等方式。底層采用netty去做網(wǎng)絡通信使用非阻塞NIO。注冊中心既有zookeepeer,也支持redis。動態(tài)代理采用Javassist等等技術(shù)。

所以我們在設計一個rpc框架的時候,首先必須掌握上面說的那些知識,還得要求我們能夠很好的結(jié)合每一個技術(shù),做到融匯貫通。


網(wǎng)上也有很多關(guān)于RPC相關(guān)知識的文章,也有dubbo、dubbox、grpc等rpc框架的源碼解析文章,建議大家可以深耕這一塊,徹底摸透掌握這塊的實現(xiàn)原理。

以上就是我個人關(guān)于“如何設計一個RPC框架”的回答,歡迎大家批評指正,交流補充。

我是【java架構(gòu)設計】,關(guān)注我,持續(xù)為您提供Java優(yōu)質(zhì)內(nèi)容!