精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

97色伦亚洲国产| 亚洲成人av在线播放| 亚洲一区精品视频| 国产福利视频导航| 99国产精品久久久久久久成人热 | 亚洲天堂网站在线| aa国产成人| 国产区在线观看成人精品| **亚洲第一综合导航网站| 欧美日韩精品区| 麻豆传媒在线看| 黄色片在线免费观看| 经典三级在线一区| 91禁国产网站| 一区二区视频免费看| 国产成人ay| 欧美精品一区二区三区蜜桃 | 刘亦菲一区二区三区免费看| 最新成人av在线| 欧美日韩一区综合| 亚洲欧美强伦一区二区| 奇米精品一区二区三区在线观看| 欧美激情在线视频二区| 婷婷激情四射网| 欧美一区二区三区激情视频| 日韩av在线免费观看| 欧美性猛交乱大交| 免费成人黄色网| 欧美午夜美女看片| 欧美极品少妇无套实战| 日本最新在线视频| 国产欧美日韩在线| 欧美aaaaa喷水| 五月天婷婷视频| 成人免费高清在线观看| 91丝袜脚交足在线播放| 国产精品欧美综合亚洲| 懂色av蜜臀av粉嫩av分享吧| 色婷婷色综合| 亚洲人成电影在线| 麻豆国产精品一区| 欧美精品中文字幕亚洲专区| 日韩精品一区二区三区视频播放| av在线网址导航| 国产成人午夜性a一级毛片| 欧美性少妇18aaaa视频| 自慰无码一区二区三区| 看黄在线观看| 亚洲sss视频在线视频| 日韩在线视频在线| 特级毛片在线| 亚洲一区二区3| 成人短视频在线观看免费| 成人av黄色| 亚洲美女淫视频| 黄黄视频在线观看| 色老头在线观看| 亚洲一二三区在线观看| 国产精品69久久久| 8x8ⅹ拨牐拨牐拨牐在线观看| 亚洲一区中文在线| 搞av.com| 成人爽a毛片免费啪啪| 色婷婷亚洲综合| 99热这里只有精品在线播放| 国产福利91精品一区二区| 欧美天堂亚洲电影院在线播放| 国产三级日本三级在线播放| 欧美大片1688网站| 在线播放中文字幕一区| 日本黄色www| 国产精品99久久免费观看| 日韩第一页在线| 日韩中文字幕电影| 99久久激情| 欧美激情视频三区| 国产成人综合欧美精品久久| 日本成人在线不卡视频| 成人网中文字幕| 亚洲精品久久久久久动漫器材一区 | 欧美精品videos| 日本视频免费在线| 日韩电影一二三区| 91精品国产高清久久久久久91裸体| 99产精品成人啪免费网站| 成人性生交大片免费看中文| 欧美精品一区二区三区在线四季| 97人人在线| 亚洲永久免费av| 国产成人av影视| 精品中文字幕一区二区三区四区| 亚洲国产91精品在线观看| 无码 人妻 在线 视频| 欧美国产免费| 国产精品1234| 东京干手机福利视频| 中文字幕av一区二区三区免费看| 麻豆传媒网站在线观看| 六月婷婷综合| 精品国产成人系列| 911国产在线| 国产亚洲福利| 亚洲精品欧美一区二区三区| 欧美女同网站| 夜夜爽夜夜爽精品视频| 国产av人人夜夜澡人人爽| 视频成人永久免费视频| 一个人看的www久久| 久草视频精品在线| 久久福利视频一区二区| 精品蜜桃一区二区三区| 超碰超碰在线| 欧美日韩你懂得| 熟女俱乐部一区二区视频在线| 91精品国产调教在线观看| 欧洲一区二区视频| 黄色av网站免费在线观看| 国产精品日韩精品欧美在线| 免费在线观看亚洲视频| www.成人网| 久久综合色88| 亚洲在线观看av| wwwwww国产| 涩视频在线观看| 精品国产aⅴ一区二区三区东京热 久久久久99人妻一区二区三区 | 色天下一区二区三区| 日韩三级影视基地| 日韩电影在线观看一区二区| av亚洲精华国产精华精| 欧美视频在线第一页| 国产91在线精品| 国产一区二区三区中文| 中文字幕在线播| 91丨porny丨最新| 黄色国产一级视频| 第四色在线一区二区| 欧美国产日韩在线| 精品人妻无码一区二区| 亚洲人成网站影音先锋播放| 一级黄色特级片| 日韩一区二区三区免费播放| 国产精品扒开腿爽爽爽视频| 美女欧美视频在线观看免费 | 男人天堂av电影| 在线播放不卡| 国产精选一区二区| 国产第一页在线| 精品久久人人做人人爽| 久久亚洲av午夜福利精品一区| 国产精品18久久久久久vr| 国产人妻人伦精品| 一区中文字幕| 久久久久日韩精品久久久男男| 亚洲欧美国产高清va在线播放| 一区二区三区四区在线免费观看| av不卡中文字幕| 一本色道久久综合一区| 玛丽玛丽电影原版免费观看1977 | 99久久精品免费视频| 久久婷婷麻豆| 亚洲免费不卡| 手机在线观看av网站| 婷婷激情图片久久| 一本色道久久综合亚洲91| av网站有哪些| 美女精品网站| 五月天综合网| 日韩精品在线免费视频| 石原莉奈在线亚洲二区| 亚洲午夜高清视频| 激情综合婷婷| 性欧美长视频免费观看不卡| 欧美成人午夜激情视频| 久久久香蕉视频| 99久久伊人网影院| 激情综合网俺也去| 婷婷亚洲最大| 精品国产91亚洲一区二区三区www| 亚洲欧美韩国| 色偷偷91综合久久噜噜| 99视频在线观看免费| 午夜欧美在线一二页| 中文字幕av久久爽一区| 九九精品视频在线看| 欧美日韩福利在线| 国产精品亚洲人成在99www| 国产日韩中文字幕| 国产h片在线观看| 正在播放欧美一区| 狠狠综合久久av一区二区| 91成人免费在线| 久草福利资源在线观看| 久久久久99精品国产片| 51自拍视频在线观看| 亚洲欧美日韩视频二区| 激情五月五月婷婷| 久久av超碰| 国产高清精品一区二区| 全球最大av网站久久| 久久久亚洲影院你懂的| 永久免费av在线| 日韩大片免费观看视频播放| 国产伦精品一区二区三区视频痴汉| 欧美日韩国产精品| 五月天婷婷色综合| 在线精品国产亚洲| 亚洲国产日韩综合久久精品| 爱爱免费小视频| 国产精品18久久久久久vr| wwwwxxxx日韩| 欧美亚洲自偷自偷| 欧美中文字幕在线观看视频| 色呦哟—国产精品| 欧美日韩国产精品一区二区| 亚洲精品观看| 成人激情在线播放| 美女色狠狠久久| 日韩av电影手机在线| 福利小视频在线| 久久亚洲私人国产精品va| 丁香在线视频| 精品亚洲一区二区三区四区五区| 亚洲AV无码一区二区三区少妇| 欧美怡红院视频| 在线观看日韩中文字幕| 亚洲福利视频导航| 久久这里只有精品免费| 亚洲美女精品一区| 成年人二级毛片| ●精品国产综合乱码久久久久| 亚洲精品国产一区黑色丝袜| 91网址在线看| 亚洲av片不卡无码久久| 99久久99久久免费精品蜜臀| 图片区偷拍区小说区| 国产精品一级在线| 国产无套精品一区二区三区| 国产一区在线精品| 三级黄色片免费观看| 国产一区二区三区在线观看免费视频 | 国产精品美女免费视频| 色尼玛亚洲综合影院| 奇米影视亚洲狠狠色| 亚洲天堂av在线| 青草青草久热精品视频在线网站| 美女高潮视频在线看| 国内精品久久久| f2c人成在线观看免费视频| 国模精品一区二区三区色天香| av免费不卡| 91地址最新发布| 国产av精国产传媒| 美女日韩在线中文字幕| 狠狠干 狠狠操| 亚洲免费网站| 日韩午夜av一区| 中文人妻一区二区三区| 99re8在线精品视频免费播放| 玖玖爱在线精品视频| 91麻豆.com| 卡一卡二卡三在线观看| 中文字幕日韩欧美一区二区三区| 日韩激情综合网| 亚洲国产一区二区视频| 97久久久久久久| 欧洲精品中文字幕| 国产视频在线观看视频| 亚洲第一区中文99精品| 裸体xxxx视频在线| www.美女亚洲精品| 青春草视频在线观看| 4438全国亚洲精品在线观看视频| 欧美7777| 91精品一区二区| 日韩av黄色在线| 一区二区三区视频在线播放| 欧美成熟视频| 无码人妻h动漫| 韩国精品一区二区| 午夜男人的天堂| 中国色在线观看另类| www.xxxx日本| 欧美性生活大片免费观看网址| 一区二区三区播放| 精品国产91亚洲一区二区三区婷婷 | 少妇高潮在线观看| 午夜精品一区在线观看| 亚洲一级av毛片| 亚洲国产精品va在看黑人| av在线电影观看| 国产69精品久久久久99| 91综合国产| 国产精品推荐精品| 国产精品精品国产一区二区| 蜜臀av色欲a片无码精品一区 | 国产精品porn| 无码日韩人妻精品久久蜜桃| 国产高清无密码一区二区三区| 中国美女乱淫免费看视频| 亚洲精品欧美在线| 中文字幕一区二区三区四区欧美| 日韩精品一区二区三区视频播放| а天堂8中文最新版在线官网| 久久久视频精品| 国产亚洲字幕| 亚洲mv在线看| 亚洲综合日韩| yjizz视频| 亚洲少妇最新在线视频| 姑娘第5集在线观看免费好剧| 亚洲第一av网| 污网站在线免费看| 国产一区二区丝袜| av影片在线一区| 国产成人黄色片| 丁香激情综合五月| 久久人妻无码aⅴ毛片a片app| 色欧美乱欧美15图片| 午夜小视频在线播放| 欧美床上激情在线观看| 欧美高清影院| 亚洲乱码一区二区三区| 日韩电影在线一区| 麻豆精品免费视频| 色哟哟在线观看一区二区三区| 老牛影视av牛牛影视av| 欧美大尺度在线观看| 国产美女精品视频免费播放软件 | 亚乱亚乱亚洲乱妇| 国产成人精品视频| 亚洲人成精品久久久| 亚洲熟女乱色一区二区三区| 成人av免费网站| 久久精品人妻一区二区三区| 日韩精品中文字幕在线不卡尤物| 麻豆传媒视频在线| 国产日韩在线视频| 外国成人免费视频| 在线看免费毛片| 亚洲婷婷综合色高清在线| ,一级淫片a看免费| 久久在线观看视频| 精品国模一区二区三区欧美| 一区二区三区久久网| 激情都市一区二区| 91视频综合网| 日韩精品一区二区在线观看| 日本高清成人vr专区| 高清视频一区| 国产欧美一区二区色老头| 黄色国产在线观看| 色噜噜狠狠色综合欧洲selulu| 日韩一级片在线免费观看| 涩涩涩在线视频| 久久久www成人免费精品| 99久热在线精品视频观看| 黄色免费高清视频| 国产成人精品www牛牛影视| 国产午夜小视频| 一区二区三区中文在线观看| 国产乱码精品一区二区三区中文 | 日韩精品二区| 欧美尤物一区| 日韩电影在线免费| www.av免费| 精品国产髙清在线看国产毛片| 精品人人视频| 日本一区二区高清视频| 久久电影国产免费久久电影| 欧美成人精品欧美一级| 亚洲精品久久久久国产| 老司机2019福利精品视频导航| 色视频一区二区三区| 国产麻豆欧美日韩一区| 一级免费在线观看| 亚洲无限av看| 精品视频成人| 乱妇乱女熟妇熟女网站| 国产精品久久久久影院亚瑟| 亚洲成人777777| 国产成人精品视频在线观看| 亚洲成人精选| 北岛玲一区二区| 欧美日产在线观看| 成人女同在线观看| 亚洲春色在线| 国产综合色视频| 91精品国产99久久久久久红楼| 二吊插入一穴一区二区| 一区二区三区久久网| av在线不卡电影| 亚洲一区二区影视| 69av视频在线播放| 久久精品免费一区二区三区| 右手影院亚洲欧美| 日韩欧美成人激情| 高清av一区| 波多野结衣家庭教师视频| 亚洲免费在线播放| 成av人电影在线观看|