精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何手寫了一個RPC框架

開發 架構
如何像調用本地服務一樣調用遠程服務呢?這時就不得不提RPC框架了(Remote Procedure Call,遠程過程調用)。他幫我們屏蔽了網絡通信,序列化等操作的實現,真正做到了調用遠程服務和調用本地服務一樣方便。

 [[349775]]

介紹

當開發一個單體項目的時候,大家肯定都寫過類似的代碼。即服務提供方和服務調用方在一個服務中

  1. public interface HelloService { 
  2.     public String sayHello(String content); 
  1. public class HelloServiceImpl implements HelloService { 
  2.  
  3.     @Override 
  4.     public String sayHello(String content) { 
  5.         return "hello, " + content; 
  6.     } 
  1. public class Test { 
  2.  
  3.     public static void main(String[] args) { 
  4.         HelloService helloService = new HelloServiceImpl(); 
  5.         String msg = helloService.sayHello("world"); 
  6.         // hello world 
  7.         System.out.println(msg); 
  8.     } 

但是由于單體服務的諸多弊端,現在很多公司已經將不相關的功能拆分到不同的服務中。

如何像調用本地服務一樣調用遠程服務呢?這時就不得不提RPC框架了(Remote Procedure Call,遠程過程調用)。他幫我們屏蔽了網絡通信,序列化等操作的實現,真正做到了調用遠程服務和調用本地服務一樣方便。

知名的RPC框架有Spring Cloud,阿里巴巴的Dubbo,Facebook的Thrift,Google grpc等

RPC的調用過程

一個RPC調用的過程如下

  1. 調用方發送請求后由代理類將調用的方法,參數組裝成能進行網絡傳輸的消息體
  2. 調用方將消息體發送到提供方
  3. 提供方將消息進行解碼,得到調用的參數
  4. 提供方反射執行相應的方法,并將結果返回

下面我們就分析一下rpc框架是怎么實現的?有哪些地方可以擴展。為了讓大家有一個更形象的認識,我寫了一個github項目,由簡到難實現了一個rpc框架,歡迎star

https://github.com/erlieStar/simple-rpc

生成代理類

前面我們說過,調用方執行方法后,實際上執行的是代理類的方法,代理類幫我們進行序列化和編解碼操作。那么如何生成代理類呢?

我們看一下主流的做法。

Facebook的Thrift和Google的grpc都是定義一個schema文件,然后執行程序,幫你生成客戶端代理類,以及接口。調用方直接用生成的代理類來請求,提供方繼承生成的接口即可。

這種方式最大的優點就是能進行多語言通信,即一份schema文件可以生成Java程序,也可以生成Python程序。調用方是Java程序,提供方是Python程序都能正常進行通訊。而且是二進制協議,通訊效率比較高。

在Java中生成代理類的方式有如下幾種

  1. JDK動態代理(實現InvocationHandler接口)
  2. 字節碼操作類庫(如cglib,Javassist)

在Dubbo中提供了2種生成代理類的方式,jdk動態代理和Javassist,默認是javassist,至于原因嗎?當然是javassist的效率更高

協議

為什么需要協議這個東西呢?Spring Cloud是通過Http協議來進行通訊的,那么Dubbo是通過哪種協議來進行通訊的?

為什么需要協議這個東西?

因為數據是以二進制的形式在網絡中傳輸中,RPC的請求數據并不是以一個整體發送到提供方的,而是可能被拆分成多個數據包發送出去,那提供方怎么識別數據呢?

例如一個文本ABCDEF,提供方有可能依次收到的數據為ABC DEF,也有可能為AB CD EF。提供方該怎么處理這些數據呢?

簡單啊,定個規則就可以了。這個規則可以有很多種,這里舉3個例子

  1. 定長協議,協議內容長度固定,如讀取到50個byte就開始decode操作,可以參考Netty的FixedLengthFrameDecoder
  2. 特殊結束符,定義一個消息結束的分隔符,如讀到\n,表示一個數據讀取完畢了,沒有讀到就一直讀,可以參考Netty的DelimiterBasedFrameDecoder
  3. 變長協議(協議頭+協議體),用一個定長來表示消息體的長度,剩下的內容為消息體,如果你愿意的話,協議頭還會放一些常用的屬性,Http協議的Header就是協議頭,如content-type,content-length等。可以參考Netty的DelimiterBasedFrameDecoder

Dubbo通過自定義協議來進行通訊,協議頭格式如下

每個位代表的含義如下

Dubbo為什么要自定義協議,而不用現成的Http協議?

最主要的原因就是自定義協議可以提高性能

Http協議的請求包比較大,有很多無用的內容。自定義協議可以精簡很多內容

Http協議是無狀態的,每次都要重新建立連接,響應完畢后將連接關閉

序列化

協議頭的內容是通過位來表示的,協議體在應用程序中則會被封裝成對象,如Dubbo將請求封裝成Request,將響應封裝成Response

前面我們說過網絡傳輸的數據必須是二進制數據,但調用方的入參和提供方的返回值都是對象,因此需要序列化和反序列化的過程

序列化的方式有如下幾種

  1. JDK原生序列化
  2. JSON
  3. Protobuf
  4. Kryo
  5. Hessian2
  6. MessagePack

我們選擇序列化的方式時,主要考慮如下幾個因素

  1. 效率
  2. 空間開銷
  3. 通用性和兼容性
  4. 安全性

通訊

常見的IO模型有如下四種

  1. 同步阻塞IO(Blocking IO)
  2. 同步非阻塞IO(Non-blocking IO)
  3. IO多路復用(IO Multiplexing)
  4. 異步IO(Asynchronous IO)

因為RPC一般用在高并發的場景下,因此我們選擇IO多路復用這種模型,Netty的IO多路復用基于Reactor開發模式來實現,后續的文章我會分析一下這種開發模式是如何支持高并發的

注冊中心

注冊中心的作用和電話簿類似。保存了服務名稱和具體的服務地址之間的映射關系,當我們想和某個服務進行通信時,只需要根據服務名就能查到服務的地址。

更重要的是這個電話簿是動態的,當某個服務的地址改變時,電話簿上的地址就會改變,當某個服務不可用時,電話簿上的地址就會消失

這個動態的電話簿就是注冊中心。

注冊中心的實現方式有很多種,Zookeeper,Redis,Nocas等都可以實現

介紹一下用Zookeeper實現注冊中心的方式

zookeeper有兩種類型的節點,持久節點和臨時節點

當我們往zookeeper上注冊服務的時候,用的是臨時節點,這樣當服務斷開時,節點能被刪除

節點類型 解釋
持久節點 將節點創建為持久節點,數據會一直存儲在zookeeper服務器上,即使創建該節點的客戶端與服務端的會話關閉了,該節點依然不會被刪除
持久順序節點 在持久節點的基礎上增加了節點有序的特性
臨時節點 將節點創建為臨時節點,數據不會一直存儲在zookeeper服務器上,當創建該臨時節點的客戶端會話關閉時,該節點在相應的zookeeper服務器上被刪除
臨時順序節點 在臨時節點的基礎上增加了節點有序的特性

注冊中心全部掛掉該怎么通信?

當一臺zookeeper掛掉后,會自動切換到另一個zookeeper。全部掛掉也沒有關系,因為dubbo把映射關系保存了一份在本地,這個映射關系可以保存在Map中,也可以保存在文件中

新的服務注冊到注冊中心,本地緩存會更新嗎?

注冊了監聽的話,當然會更新啊。當被監聽的節點或者子節點發生變化的時候,會將相應的內容推送給監聽的客戶端,你就可以更新本地的緩存了

Zookeeper中的事件如下

你可以把這個監聽理解為分布式的觀察者模式

小結

當然一個成熟的RPC框架還得考慮很多內容,例如路由策略,異常重試,監控,異步調用等,和主流程相關度不大,就不多做介紹了

本文轉載自微信公眾號「Java識堂」,可以通過以下二維碼關注。轉載本文請聯系Java識堂公眾號。

 

責任編輯:武曉燕 來源: Java識堂
相關推薦

2021-02-20 09:45:02

RPC框架Java

2024-08-02 09:49:35

Spring流程Tomcat

2022-03-01 11:38:51

RPC框架后端

2022-03-09 09:43:01

工具類線程項目

2018-09-18 09:38:11

RPC遠程調用網絡通信

2021-03-18 08:04:54

AQS工具CAS

2020-01-09 11:11:35

RPC框架調用遠程

2017-03-02 13:31:02

監控系統

2022-11-07 18:36:03

組件RPC框架

2020-09-09 07:13:05

RPC框架

2024-01-02 12:17:44

Go傳統遠程

2022-04-11 09:15:44

中間件開源

2024-08-01 17:20:55

2018-08-15 10:51:01

JavaSpring MVC框架

2020-08-17 08:20:16

iOSAOP框架

2019-06-17 08:21:06

RPC框架服務

2021-08-12 00:03:37

JSStrview視圖

2021-12-07 06:55:17

節流函數Throttle

2009-10-01 09:19:45

PHP框架ZendFramewoCake

2022-01-26 15:20:00

配置微服務架構
點贊
收藏

51CTO技術棧公眾號

亚洲精品在线三区| 久久综合九色综合欧美98| 不卡av电影在线观看| 少妇欧美激情一区二区三区| 国产黄色大片在线观看| 久久久久久久久久久久久夜| 国产啪精品视频网站| 国产无遮挡又黄又爽又色| 精品在线手机视频| 欧美高清视频在线高清观看mv色露露十八| www.18av.com| 成人在线播放视频| 成人高清视频在线观看| 狠狠爱在线视频一区| 欧美在线观看一区| 国产一区二区四区| 日本三级视频在线观看| 91在线一区二区| 亚洲直播在线一区| 精品国产青草久久久久96| 国产精品xvideos88| 一区二区三区www| 2一3sex性hd| 99精品视频在线免费播放| 日韩欧美国产网站| 国产男女免费视频| 菠萝菠萝蜜在线观看| 国产欧美精品一区二区色综合朱莉| 高清一区二区三区视频| 中文字幕乱码在线观看| 另类亚洲自拍| 97人人模人人爽人人喊中文字| 日韩精品一区二区亚洲av性色 | 国产综合亚洲精品一区二| 中文字幕无线精品亚洲乱码一区| 日本japanese极品少妇| 成人三级毛片| 日韩午夜av一区| 激情在线观看视频| 69堂免费精品视频在线播放| 大伊人狠狠躁夜夜躁av一区| 成品人视频ww入口| 超碰在线资源| 一区二区三区日韩在线观看| 9l视频自拍9l视频自拍| 日本网站在线免费观看视频| 中文字幕av不卡| 亚洲a∨一区二区三区| 色窝窝无码一区二区三区成人网站| 国产成人久久精品77777最新版本| 91九色国产在线| 国产精品欧美久久久久天天影视| 麻豆成人av在线| 国产日本欧美视频| 91成人在线免费| 激情五月激情综合网| 成人久久一区二区三区| 国产口爆吞精一区二区| 国产精品自在在线| 丁香五月网久久综合| 六月婷婷中文字幕| 国产中文字幕精品| 成人自拍爱视频| 午夜福利一区二区三区| 久久亚洲精华国产精华液| 欧美精品一区在线| 777电影在线观看| 国产精品久久久久天堂| 日韩video| 97在线视频免费观看完整版| 精品久久香蕉国产线看观看亚洲| 草草久久久无码国产专区| 欧美91看片特黄aaaa| 欧美日韩视频一区二区| 在线视频一二区| 国产一区丝袜| 在线免费看av不卡| 欧美做爰爽爽爽爽爽爽| 一区二区高清| 国产精品久久久久久久7电影| 国产精品国产av| 波多野结衣中文字幕一区| 久久精彩视频| 日本最黄一级片免费在线| 亚洲一卡二卡三卡四卡无卡久久| 日本精品www| 高清久久一区| 亚洲国产精品大全| 又色又爽的视频| 国产在线不卡| 国产精品 欧美在线| 99精品国产99久久久久久97| yourporn久久国产精品| 午夜精品一区二区在线观看的 | 欧美一级视频在线| 大香伊人久久精品一区二区| 国产一区二区黑人欧美xxxx| 国产美女福利视频| 久久五月激情| www.久久久| 国产高清美女一级毛片久久| 尤物视频一区二区| 国产精品视频黄色| 国产在线播放精品| xxxx欧美18另类的高清| 日韩欧美大片在线观看| 韩国毛片一区二区三区| 欧美高清一区二区| 电影k8一区二区三区久久| 欧美性猛片aaaaaaa做受| 国产日韩视频一区| 久久久国产精品| 国产精品∨欧美精品v日韩精品| 亚洲av综合色区无码一二三区| 国产精品三级久久久久三级| 男人插女人视频在线观看| 国产原创一区| 亚洲欧美制服另类日韩| 香蕉视频一区二区| 国产一区二区三区四| 色999日韩自偷自拍美女| 九色porny丨入口在线| 精品欧美一区二区久久| 亚洲一二三四五六区| 久久精品一区| 久草热久草热线频97精品| 日本乱理伦在线| 91麻豆精品国产91| 91久久久久久久久久久久久久| 久久婷婷一区| 欧美日韩精品一区| 中文一区一区三区高中清不卡免费| 日韩精品最新网址| 免费在线黄色网| 精品在线播放免费| 伊人情人网综合| 久久91视频| 一本色道久久综合亚洲精品小说| 久久国产视频播放| 99精品久久久久久| 亚洲熟妇无码一区二区三区| gogo久久日韩裸体艺术| 欧美国产日韩一区| 亚洲av综合色区无码一区爱av| 樱花影视一区二区| 国产成人av免费观看| 欧美日本国产| 国产女人水真多18毛片18精品| 日本不卡影院| 亚洲成年人在线播放| 国产性xxxx高清| 99精品视频在线观看免费| 国产极品在线视频| 日本欧美韩国国产| 国产va免费精品高清在线观看| 久青青在线观看视频国产| 91福利视频网站| 色www亚洲国产阿娇yao| 狠狠色综合日日| 99久久99久久精品| 国产精品对白| 欧美有码在线视频| 波多野结衣在线网站| 欧美美女直播网站| 久草国产在线观看| 97精品久久久久中文字幕| 亚洲精品乱码久久久久久自慰 | 综合欧美国产视频二区| 91麻豆成人精品国产| 一区二区三区四区五区视频在线观看| www.四虎在线| 久久免费国产| 美女黄色片网站| 高清欧美性猛交xxxx黑人猛| 日本视频久久久| 午夜在线播放| 亚洲国产欧美一区二区三区同亚洲| 亚洲免费在线视频观看| 国产精品剧情在线亚洲| 久久久久亚洲av片无码v| 一本色道久久综合亚洲精品高清| 日本一区二区在线视频| www.久久久久爱免| 国内揄拍国内精品| av网站无病毒在线| 精品国产成人在线影院| 四虎成人在线观看| 亚洲美女屁股眼交3| 国产精品一级黄片| 久久国产剧场电影| 男人揉女人奶房视频60分| 久久福利综合| 精品国产区在线| 国产一区二区三区免费观看在线| 91国内在线视频| 日本韩国在线视频爽| 亚洲精品动漫久久久久| 国产精品久久777777换脸| 亚洲第一久久影院| 欧美一级特黄高清视频| 久久久亚洲精品一区二区三区| 被黑人猛躁10次高潮视频| 久久在线精品| 久久精品无码中文字幕| 希岛爱理一区二区三区| 欧美日韩另类综合| 精品国产一区二区三区成人影院| 国产日韩精品在线| 玛雅亚洲电影| 国模叶桐国产精品一区| 国内精品久久久久国产| 亚洲色图欧美制服丝袜另类第一页| 国产高清在线免费| 7777精品伊人久久久大香线蕉经典版下载 | 日韩欧美在线影院| 怡红院男人天堂| 狠狠色噜噜狠狠狠狠97| 久久成人国产精品入口| 亚洲欧洲无码一区二区三区| 麻豆av免费观看| 97久久超碰国产精品| 熟妇高潮一区二区| 国产麻豆视频一区二区| 国产九九在线观看| 免费日韩精品中文字幕视频在线| 精品国产av无码一区二区三区| 自拍偷拍欧美| 最新中文字幕久久| 99精品视频在线| 亚洲人成77777| 日韩精品久久| 色狠狠久久av五月综合|| 一区二区三区日本久久久| 精品在线视频一区二区| 国产美女撒尿一区二区| 国产精品12| 99精品在免费线中文字幕网站一区| 成人免费午夜电影| 中文幕av一区二区三区佐山爱| 国产精品偷伦免费视频观看的| 日韩免费va| 国产精品成人免费电影| 成人做爰视频www网站小优视频| 9.1国产丝袜在线观看 | 国产精品日韩在线一区| 电影在线观看一区二区| 国产欧美精品日韩| va天堂va亚洲va影视| 成人精品视频在线| 在这里有精品| 精品国产乱码久久久久久88av| 婷婷精品视频| 日韩高清专区| 久久精品高清| 无码毛片aaa在线| 好吊日精品视频| 六月丁香婷婷激情| 久久一区二区三区四区五区| 久久99999| 国产自产视频一区二区三区| 精品人妻一区二区乱码| 成人avav影音| 日本xxxxxxxxx18| 中文字幕一区在线| 久久精品99国产精| 欧美日韩激情美女| 日韩欧美一级大片| 日韩一本二本av| 天天色综合久久| 亚洲天堂av综合网| 黄色av电影在线播放| 性金发美女69hd大尺寸| 黑人巨大精品| 91麻豆国产精品| 国产无遮挡裸体免费久久| 色姑娘综合网| 国产精品扒开腿做爽爽爽软件| 欧美成人一区二区在线观看| 蜜臀久久99精品久久久画质超高清| 激情文学亚洲色图| 成人午夜av电影| 国产综合精品久久久久成人av | 天天爽夜夜爽夜夜爽精品| 91福利国产精品| 亚洲国产一二三区| 亚洲天堂网站在线观看视频| 最爽无遮挡行房视频在线| 5278欧美一区二区三区| 电影一区中文字幕| 麻豆精品视频| 亚洲二区三区不卡| 一本久道综合色婷婷五月| 国产福利一区二区三区视频在线| 亚洲人人夜夜澡人人爽| 亚洲女爱视频在线| 91视频在线视频| 精品剧情v国产在线观看在线| 成人网视频在线观看| 欧美国产日本高清在线 | 欧美日韩亚洲综合在线 | 国产精品免费免费| 日韩美女一级片| 欧美顶级少妇做爰| 蜜桃视频在线观看视频| 欧美国产日韩xxxxx| 久久青草视频| 日韩免费一区二区三区| 亚洲免费成人| 亚洲欧美综合视频| 亚洲人吸女人奶水| 日韩国产亚洲欧美| 日韩电视剧在线观看免费网站 | 日韩精品水蜜桃| 亚洲欧洲日产国码无码久久99| 国产精一区二区三区| 亚洲女人久久久| 欧美日韩在线电影| 久久电影视频| 欧美最顶级丰满的aⅴ艳星| 999精品视频在这里| 亚洲综合网中心| 青青草原综合久久大伊人精品优势| 亚洲av无码一区二区三区网址 | 另类美女黄大片| 欧美天堂一区二区| 日韩美女一区| 久久成人精品| 国产国语性生话播放| 香蕉久久一区二区不卡无毒影院| 国产高清av片| 成人欧美magnet| 国产一区视频在线播放| 国产精品一在线观看| 男人天堂网视频| 91污在线观看| 黄色大片网站在线观看| 亚洲精品国产精品国自产观看浪潮| 欧美xxx黑人xxx水蜜桃| 亚洲自拍偷拍网址| 欧美激情视频一区二区三区免费| xxx中文字幕| 亚洲理论在线观看| 精品国精品国产自在久不卡| 久久大大胆人体| 国产区一区二| 青青视频免费在线观看| 国产传媒日韩欧美成人| 欧美激情精品久久| 精品国产一区二区三区av性色 | 欧美亚洲激情在线| 天天躁日日躁狠狠躁欧美| 东京热加勒比无码少妇| 久久久青草青青国产亚洲免观| 蜜臀尤物一区二区三区直播| 一区二区av在线| 亚洲福利影视| 97在线免费视频观看| 成人美女视频在线观看18| 日韩欧美一级视频| 亚洲偷欧美偷国内偷| 久久青草视频| 国产青草视频在线观看| 成人免费视频网站在线观看| 日韩久久久久久久久| 亚洲精品在线视频| 精品亚洲a∨| 精品久久久无码人妻字幂| 成人激情校园春色| 精品人妻一区二区色欲产成人| 中文字幕亚洲无线码a| 成人污污视频| 美女日批免费视频| 中文文精品字幕一区二区| 99久久精品国产一区二区成人| 久久久久久国产免费| 自拍欧美一区| 欧美一级小视频| 天天做天天摸天天爽国产一区 | 小泽玛利亚视频在线观看| 亚洲欧美电影一区二区| 黄色小视频免费观看| 国产成人精品视频在线| 五月久久久综合一区二区小说| 久久久久久久人妻无码中文字幕爆| 色视频一区二区| 91福利国产在线观看菠萝蜜| 好吊色欧美一区二区三区视频| 免费在线看一区| 国产午夜福利精品| 中文字幕欧美视频在线| 久久精品凹凸全集| 在线观看国产一级片| 午夜精品福利一区二区蜜股av| p色视频免费在线观看| 久久99国产乱子伦精品免费| 成人无码精品1区2区3区免费看| 亚洲成人久久久| 成人免费在线观看视频| av免费看网址| 亚洲色图制服诱惑|