欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

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

林國瑞2年前15瀏覽0評論

https://www.b5b6.com如何設計一個rpc框架?

RPC框架全稱叫“Remote Procedure Call”-遠程過程調用。

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

業界知名RPC

各大互聯網公司都或多或少實現了自己的RPC框架,其中比較出名且常用的有:

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

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

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

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

自己簡單實現一個最基本的RPC框架

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

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

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

寫Rpc接口類的實現類實現這兩個方法,export方法如下圖:

refer方法:

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

實現類:

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

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

運行這個main方法會輸出:

這樣一個簡單的RPC遠程過程調用就實現了,是不是很簡單?采用Java Socket套接字https://www.52fb.cn和Java自帶的序列化。

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

上面簡單實現了一個RPC框架,這個只是實驗性質的編碼,實際上是無法使用的,因為在實際業務中,我們面對的是高并發、多請求。上面的套接字https://www.52fb.cn也是阻塞的,另外序列化也是用的Java自帶的序列化方法。

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

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

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

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

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

我是【java架構設計】,關注我,持續為您提供Java優質內容!

java阻塞實現,https://www.b5b6.com如何設計一個rpc框架