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

我是一個Dubbo數據包,我的旅行開始了!

開發 前端
在整個交互過程中,筆者省略線程棧調用的一些細節和源代碼的細節,例如序列化與反序列化,dubbo怎么讀出完整的數據包的,業務方法執行前那些Filter是怎么排序和分布的,netty的Reactor模式是如何實現的。

hello,大家好呀,我是小樓!

今天給大家帶來一篇關于Dubbo IO交互的文章,本文是一位同事所寫,用有趣的文字把枯燥的知識點寫出來,通俗易懂,非常有意思,所以迫不及待找作者授權然后分享給大家:

一些有趣的問題

Dubbo是一個優秀的RPC框架,其中有錯綜復雜的線程模型,本篇文章筆者從自己淺薄的認知中,來剖析Dubbo的整個IO過程。在開始之前,我們先來看如下幾個問題:

  • 業務方法執行之后,數據包就發出去了嗎?
  • netty3和netty4在線程模型上有什么區別?
  • 數據包到了操作系統socket buffer,經歷了什么?
  • Provider打出的log耗時很小,而Consumer端卻超時了,怎么可以排查到問題?
  • 數據包在物理層是一根管道就直接發過去嗎?
  • Consumer 業務線程await在Condition上,在哪個時機被喚醒?
  • ……

接下來筆者將用Dubbo2.5.3 作為Consumer,2.7.3作為Provider來講述整個交互過程,筆者站在數據包視角,用第一人稱來講述,系好安全帶,我們出發咯。

有意思的旅行

1.Dubbo2.5.3 Consumer端發起請求

我是一個數據包,出生在一個叫Dubbo2.5.3 Consumer的小鎮,我的使命是是傳遞信息,同時也喜歡出門旅行。

某一天,我即將被發送出去,據說是要去一個叫Dubbo 2.7.3 Provider的地方。

這一天,業務線程發起發起方法調用,在FailoverClusterInvoker#doInvoke我選擇了一個Provider,然后經過各種Consumer Filter,再經過Netty3的pipeline,最后通過NioWorker#scheduleWriteIfNecessary方法,我來到了NioWorker的writeTaskQueue隊列中。

當我回頭看主線程時,發現他在DefaultFuture中的Condition等待,我不知道他在等什么,也不知道他要等多久。

我在writeTaskQueue隊列排了一會隊,看到netty3 IO worker線程在永不停歇的執行run方法,大家都稱這個為死循環。

最后,我很幸運,NioWorker#processWriteTaskQueue選擇了我,我被寫到操作系統的Socket緩沖區,我在緩沖區等待,反正時間充足,我回味一下今天的旅行,期間我輾轉了兩個旅行團,分別叫主線程和netty3 IO worker線程,嗯,兩個旅行團服務都不錯,效率很高。

索性我把今天的見聞記錄下來,繪制成一張圖,當然不重要的地方我就忽略了。

圖片

2.操作系統發送數據包

我在操作系統socket緩沖區,經過了很多神奇的事情。

  • 在一個叫傳輸層的地方給我追加上了目標端口號、源端口號
  • 在一個叫網絡層的地方給我追加上了目標IP、源IP,同時通過目標IP與掩碼做與運算,找到“下一跳”的IP
  • 在一個叫數據鏈路層的地方通過ARP協議給我追加上了“下一跳”的目標MAC地址、源MAC地址

最有意思的是,我們坐的都是一段一段纜車,每換一個纜車,就要修改目標MAC地址、源MAC地址,后來問了同行的數據包小伙伴,這個模式叫“下一跳”,一跳一跳的跳過去。這里有很多數據包,體型大的單獨一個纜車,體型小的幾個擠一個纜車,還有一個可怕的事情,體型再大一點,要分拆做多個纜車(雖然這對我們數據包沒啥問題),這個叫拆包和粘包。期間我們經過交換機、路由器,這些地方玩起來很Happy。

當然也有不愉快的事情,就是擁堵,目的地纜車滿了,來不及被拉走,只能等待咯。

3.在Provider端的經歷

好不容易,我來到了目的地,我坐上了一個叫“零拷貝”號的快艇,迅速到了netty4,netty4果然富麗堂皇,經過NioEventLoop#processSelectedKeys,再經過pipeline中的各種入站handler,我來到了AllChannelHandler的線程池,當然我有很多選擇,但是我隨便選了一個目的地,這里會經歷解碼、一系列的Filter,才會來的目的地“業務方法”,NettyCodecAdapter#InternalDecoder解碼器很厲害,他可以處理拆包和粘包。

圖片

在AllChannelHandler的線程池中我會停留一會,于是我也畫了一張圖,記錄旅程。

圖片

自此,我的旅行結束,新的故事將由新的數據包續寫。

4.Provider端產生了新的數據包

我是一個數據包,出生在一個叫Dubbo2.7.3 Provider的小鎮,我的使命是去喚醒命中注定的線程,接下來我會開始一段旅行,去一個叫Dubbo2.5.3 Consumer的地方。

在Provider業務方法執行之后

  • 由業務線程經過io.netty.channel.AbstractChannelHandlerContext#writeAndFlush
  • 再經過io.netty.util.concurrent.SingleThreadEventExecutor#execute 執行addTask
  • 將任務放入隊列io.netty.util.concurrent.SingleThreadEventExecutor#taskQueue
  • 我便跟隨著io.netty.channel.AbstractChannelHandlerContext$WriteTask等待NioEventLoop發車,等待的過程中,我記錄了走過的腳步。

圖片

在這里,我看到NioEventLoop是一個死循環,不停地從任務隊列取任務,執行任務AbstractChannelHandlerContext.WriteAndFlushTask,然后指引我們到socket緩沖區等候,永不知疲倦,我似乎領略到他身上有一種倔強的、追求極致的匠人精神。

經過io.netty.channel.AbstractChannel.AbstractUnsafe#write,我到達了操作系統socket緩沖區。在操作系統層面和大多數數據包一樣,也是做纜車達到目的地。

5.到達dubbo 2.5.3 Consumer端

到達dubbo 2.5.3 Consumer端,我在操作系統socket緩沖區等了一會,同樣是坐了“零拷貝”號快艇,到達了真正的目的地dubbo 2.5.3 Consumer,在這里我發現,NioWorker#run是一個死循環,然后執行NioWorker#processSelectedKeys,通過NioWorker#read方式讀出來,我就到達了AllChannelHandler的線程池,這是一個業務線程池。

我在這里等待一會,等任務被調度,我看見com.alibaba.dubbo.remoting.exchange.support.DefaultFuture#doReceived被執行了,同時Condition的signal被執行了。我在遠處看到了一個被阻塞線程被喚醒,我似乎明白,因為我的到來,喚醒了一個沉睡的線程,我想這應該是我生命的意義。

至此,我的使命也完成了,本次旅程結束。

總結netty3和netty4的線程模型

我們根據兩個數據包的自述,來總結一下netty3和netty4的線程模型。

1.netty3寫過程

圖片

2.Netty4的讀寫過程

圖片

說明:這里沒有netty3的讀過程,netty3讀過程和netty4相同,pipeline是由IO線程執行。

總結:netty3與netty4線程模型的區別在于寫過程,netty3中pipeline由業務線程執行,而netty4無論讀寫,pipeline統一由IO線程執行。

netty4中ChannelPipeline中的Handler鏈統一由I/O線程串行調度,無論是讀還是寫操作,netty3中的write操作時由業務線程處理Handler鏈。netty4中可以降低線程之間的上下文切換帶來的時間消耗,但是netty3中業務線程可以并發執行Handler鏈。如果有一些耗時的Handler操作會導致netty4的效率低下,但是可以考慮將這些耗時操作放在業務線程最先執行,不放在Handler里處理。由于業務線程可以并發執行,同樣也可以提高效率。

一些疑難問題排查

有遇到一些比較典型的疑難問題,例如當Provider答應的didi.log耗時正常,而Consumer端超時了,此時有如下排查方向,didi.log的Filter其實處于非常里層,往往不能反映真實的業務方法執行情況。

  • Provider除了業務方向執行外,序列化也有可能是耗時的,所以可以用arthas監控最外側方法org.apache.dubbo.remoting.transport.DecodeHandler#received,排除業務方法耗時高的問題
  • Provider中數據包寫入是否耗時,監控io.netty.channel.AbstractChannelHandlerContext#invokeWrite方法
  • 通過netstat 也能查看當前tcp socket的一些信息,比如Recv-Q, Send-Q,Recv-Q是已經到了接受緩沖區,但是還沒被應用代碼讀走的數據。Send-Q是已經到了發送緩沖區,但是對方還沒有回復Ack的數據。這兩種數據正常一般不會堆積,如果堆積了,可能就有問題了。

圖片

  • 看Consumer NioWorker#processSelectedKeys (dubbo2.5.3)方法是否耗時高。
  • 直到最終整個鏈路的所有細節……問題肯定是可以解決的。

尾聲

在整個交互過程中,筆者省略線程棧調用的一些細節和源代碼的細節,例如序列化與反序列化,dubbo怎么讀出完整的數據包的,業務方法執行前那些Filter是怎么排序和分布的,netty的Reactor模式是如何實現的。這些都是非常有趣的問題……

責任編輯:武曉燕 來源: 捉蟲大師
相關推薦

2022-05-16 08:42:26

Pandasbug

2022-03-07 05:53:41

線程CPU代碼

2013-05-21 09:32:11

ChromebookChrome OS

2022-04-06 08:47:03

Dubbo服務協議

2025-05-19 10:04:48

2021-12-29 19:20:41

數據GitHub服務器

2022-11-18 14:15:13

2020-11-04 07:56:19

工具Linux 翻譯

2024-10-25 12:38:27

2021-04-28 14:31:35

Dubbo接口日志

2012-11-28 13:25:27

程序員

2014-06-27 18:22:19

2020-09-27 14:13:50

Spring BootJava框架

2021-09-13 08:41:52

職場互聯網自閉

2022-11-10 09:28:40

框架開發

2019-12-23 11:03:07

抽象MOVJava

2009-01-05 15:31:41

2022-05-31 08:35:05

RocketMQACK客戶端

2024-11-11 14:57:56

JWTSession微服務

2021-09-28 13:42:55

Chrome Devwebsocket網絡協議
點贊
收藏

51CTO技術棧公眾號

亚洲精品大尺度| 国产精品私房写真福利视频| 欧美激情一区二区三区成人| 九色91国产| 9i精品福利一区二区三区| 成人在线免费观看视频| 欧美成va人片在线观看| 国产精品欧美激情在线观看| 麻豆tv免费在线观看| 粉嫩在线一区二区三区视频| 日韩av高清不卡| 成年人一级黄色片| 亚洲调教一区| 日韩一级二级三级精品视频| 成人免费观看毛片| 日日夜夜天天综合入口| 国产日韩欧美亚洲| 国产高清精品一区二区| 超碰在线97观看| 亚洲精品aaaaa| 欧美人伦禁忌dvd放荡欲情| 99在线免费视频观看| 成人在线播放视频| av一二三不卡影片| 91视频88av| 波多野结衣一区二区三区在线 | 女人一区二区三区| 国产小视频在线看| 日韩成人激情| 亚洲欧洲日产国码av系列天堂| 僵尸世界大战2 在线播放| 精品女同一区二区三区| 老牛国产精品一区的观看方式| 亚洲国产欧美自拍| 亚洲av无日韩毛片久久| av有声小说一区二区三区| 亚洲一区av在线| 咪咪色在线视频| 国内在线精品| 91污在线观看| 国产亚洲一区二区三区在线播放| 国产理论片在线观看| 肉肉av福利一精品导航| 午夜精品视频网站| 欧美精品一区二区蜜桃| 网站一区二区| 91精品国产综合久久久久久| 亚洲综合色在线观看| 香蕉视频亚洲一级| 狠狠色狠狠色综合日日小说| 国产不卡一区二区视频| 欧美日韩经典丝袜| 亚洲精品国产成人久久av盗摄 | 91精品福利视频| 国产精品免费入口| 精彩国产在线| 久久香蕉国产线看观看99| 久久精品99| 天天在线女人的天堂视频| 99免费精品在线| 狠狠爱一区二区三区| 性猛交xxxx| 久久综合九色综合97_久久久| 精品国产免费久久久久久尖叫| 黄色一级a毛片| 成人午夜av影视| 国产精品av网站| 国产九色91回来了| 久久国产生活片100| 国产日韩亚洲欧美| av中文字幕观看| 国产精品99久| 狠狠色综合欧美激情| 亚洲av激情无码专区在线播放| 99久久婷婷国产| 日本午夜精品电影| 成人福利小视频| 国产suv一区二区三区88区| 成人性色av| 欧美日韩国产中文字幕在线| 国产拍欧美日韩视频二区 | 中文无码日韩欧| 亚洲成人999| 瑟瑟视频在线观看| 水蜜桃久久夜色精品一区| 久久国产精品电影| 老司机福利av| 日本电影一区二区| 久久这里有精品| 日本中文字幕免费观看| 久久精品首页| 91免费综合在线| 香蕉人妻av久久久久天天| 国产精品色噜噜| 给我免费播放片在线观看| 97欧美成人| 精品国产一区二区三区四区四| 欧洲美一区二区三区亚洲| 香蕉综合视频| 日本亚洲欧美成人| 国产哺乳奶水91在线播放| 91影院在线免费观看| 97se亚洲综合| 免费看男男www网站入口在线 | 国产自产2019最新不卡| 日韩免费在线免费观看| 97在线播放免费观看| 不卡一区二区三区四区| 亚洲图色在线| av电影在线观看| 亚洲一区二区三区四区中文字幕| 妺妺窝人体色www在线观看| 1204国产成人精品视频| 国产亚洲精品日韩| 中文字幕资源站| 亚洲影视综合| www.av一区视频| 免费网站成人| 色婷婷国产精品综合在线观看| 在线视频日韩欧美| 国产一区二区三区网| 欧美激情一区二区三级高清视频 | 男人的天堂久久精品| 国产精品初高中精品久久| 拍真实国产伦偷精品| 色综合久久综合网97色综合| 久久久久中文字幕亚洲精品 | 综合激情网...| 久久精品国产清自在天天线| 精品国产乱子伦| 91天堂素人约啪| 国产高清www| 中文一区二区三区四区| 久久精品99久久久久久久久| 五月天中文字幕| 2020国产精品自拍| 国产精品久久久久久久乖乖| 免费一级欧美片在线观看网站| 欧美日韩在线免费视频| 黄色短视频在线观看| 精久久久久久| 97在线电影| 丝袜综合欧美| 日韩一级免费观看| 黄色片在线观看网站| 国产一区二区三区四区五区入口| 亚洲免费在线精品一区| 91在线中文| 欧美高清视频一二三区| 波兰性xxxxx极品hd| 免费成人在线网站| 日本精品国语自产拍在线观看| 欧美三级网站| 国产视频自拍一区| 亚洲天堂一区在线| 久久免费国产精品| 欧美伦理视频在线观看| 国产一区日韩| 国产精品视频一区国模私拍| 97在线观看免费观看高清 | 精品国产一区二区三区不卡蜜臂 | 黄色软件在线| 一本到一区二区三区| 国产免费看av| 久久成人免费网| 国产盗摄视频在线观看| 亚洲伊人影院| 欧美亚洲一区在线| 国产裸舞福利在线视频合集| 欧美日韩一区二区三区视频| 色哟哟一一国产精品| 国产精品综合在线视频| 老太脱裤子让老头玩xxxxx| 日韩极品少妇| 国产欧美日韩高清| a视频在线免费看| 91精品国产一区二区人妖| 欧美三级免费看| 91偷拍与自偷拍精品| 亚洲免费一级视频| 欧美精品偷拍| 久久精品五月婷婷| 国产成人免费| 欧美激情在线播放| 国产人成在线视频| 日韩三级免费观看| 日日骚av一区二区| 自拍偷拍亚洲综合| 亚洲天堂资源在线| 午夜亚洲福利| 九九九九精品| 亚洲成人a级片| 久久久久久久久久国产| 国产在线视频网| 日韩限制级电影在线观看| 免费一级特黄特色大片| 国产一区二区久久| 国产中文字幕视频在线观看| 中文字幕久久精品一区二区| 97超级碰在线看视频免费在线看| 91在线观看| 亚洲国内精品在线| 一级特黄色大片| 黄色成人av网| 国产精品 欧美激情| 久久精品男人天堂av| 亚洲欧美激情一区二区三区| 日韩一区欧美二区| 97久久国产亚洲精品超碰热| 大色综合视频网站在线播放| 国内精品二区| 日韩成人久久| 国产精品中文在线| 日韩免费电影| 高清欧美性猛交| 成人影欧美片| 色老头一区二区三区| 青青九九免费视频在线| 精品免费国产二区三区| 国产一区二区在线播放视频| 色屁屁一区二区| 久久久久久久99| 亚洲精品国久久99热| 国产白丝一区二区三区| 久久亚洲影视婷婷| 伊人影院在线观看视频| 蜜臀99久久精品久久久久久软件| 噜噜噜久久亚洲精品国产品麻豆| 午夜精品久久| 在线免费观看一区二区三区| 国产精品99久久免费| 久久夜精品va视频免费观看| 免费在线毛片| 日韩黄色高清视频| 成人精品在线播放| 日韩女优毛片在线| 国产乱人乱偷精品视频a人人澡| 91成人在线免费观看| 日韩av大片在线观看| 亚洲成av人片一区二区三区 | 中文字幕av亚洲精品一部二部| 色综合久久久久久久久五月| 色综合中文网| 麻豆蜜桃91| 香蕉久久精品| 久久国产精品亚洲va麻豆| 国产精品一线| 国产亚洲欧美一区二区三区| 久久影视三级福利片| 国内精品久久国产| 亚洲精品国产动漫| 欧美国产二区| 精品国产一级毛片| 亚洲电影一二三区| 色综合咪咪久久网| 一区不卡字幕| 亚洲一级淫片| 久草免费福利在线| 国产精品永久| 人妻无码视频一区二区三区| 免费看黄色91| 日本77777| 国产99久久久国产精品免费看| 日本wwww色| 91蜜桃婷婷狠狠久久综合9色| 亚洲av无码一区二区三区网址| 久久毛片高清国产| 国产亚洲精品精品精品| 中文字幕色av一区二区三区| 欧美成人黄色网| 午夜精品久久久久久不卡8050| 四虎精品永久在线| 欧美亚洲尤物久久| 国产情侣一区二区| 色香蕉成人二区免费| 日批视频免费观看| 日韩免费一区二区| 亚洲AV第二区国产精品| 日韩在线观看你懂的| 尤物yw193can在线观看| 97av在线视频| 欧美黄页免费| 国产亚洲欧美一区二区三区| 国产一区二区三区站长工具| 中文字幕精品在线播放| 亚洲三级观看| 国产福利在线免费| 久久精品首页| 99精品视频免费版的特色功能| 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 99热这里只有精品4| 一区二区理论电影在线观看| 一区二区三区福利视频| 51精品国自产在线| 午夜小视频在线播放| 日韩在线观看免费高清完整版| 欧美日本韩国一区二区| 久久视频免费观看| 香蕉伊大人中文在线观看| 成人日韩在线电影| 亚洲国产精品嫩草影院久久av| 四虎影院一区二区| 久久久噜噜噜| 又大又长粗又爽又黄少妇视频| 久久久久久久综合色一本| 欧美日韩国产精品一区二区三区| 色噜噜夜夜夜综合网| 风流少妇一区二区三区91| 亚洲天堂av网| 国产污视频在线播放| 91精品久久久久久久久久另类| 秋霞蜜臀av久久电影网免费| 亚洲区成人777777精品| 日韩av一二三| 久久久久麻豆v国产精华液好用吗| 亚洲日韩欧美一区二区在线| 天天射天天干天天| 亚洲国产99精品国自产| 国产成人l区| 国产区精品在线观看| 九九在线精品| 精品国产免费av| 国产a区久久久| 91麻豆免费视频网站| 在线免费一区三区| 青草久久伊人| 7777免费精品视频| 成人av影音| 特级西西人体www高清大胆| 美国一区二区三区在线播放| 欧美色图亚洲激情| 精品成人av一区| 黄色av一区二区三区| 欧美另类高清videos| 91麻豆精品一二三区在线| 91亚洲va在线va天堂va国| 国产欧美日韩影院| 国产成人无码一二三区视频| av不卡在线观看| 动漫精品一区一码二码三码四码| 在线播放欧美女士性生活| 欧美成人高清在线| 国产一区在线播放| 91一区二区三区四区| 亚洲一区二区三区四区五区| 国产精品入口麻豆九色| 夜夜爽8888| 色偷偷88888欧美精品久久久| 91精品店在线| 在线免费一区| 国产精品538一区二区在线| 欧美日韩三级在线观看| 欧美成人一区二区| 免费不卡av| 九色一区二区| 久久精品日韩欧美| 欧美人与禽zoz0善交| 欧美日韩综合在线| 久草免费在线| 亚洲综合在线中文字幕| 国产精品v一区二区三区| 99精品一区二区三区无码吞精| 精品免费在线视频| 欧美在线观看在线观看| 国产精品电影久久久久电影网| 精品一区电影| 亚洲综合123| 亚洲一二三区在线观看| 午夜福利一区二区三区| 国产精品精品久久久| 99久久99久久精品国产片果冰| 国产淫片免费看| 国产亚洲精品免费| 97caocao| 97精品国产97久久久久久免费| 国产欧美日韩精品一区二区免费 | 久久久久久www| 2021中文字幕一区亚洲| а中文在线天堂| 美日韩精品免费视频| 国产人妖ts一区二区| 日本男人操女人| 一区二区三区在线免费视频 | 中文久久电影小说| 日本在线视频www| 国产suv一区二区三区88区| 日本三级欧美三级| 一本色道久久综合狠狠躁篇的优点 | 中文字幕一区二区三区人妻不卡| 欧美三级日韩在线| 牛牛精品视频在线| 日韩精品欧美在线| 国产成人综合亚洲网站| 国产精品21p| 欧美日韩成人精品| 国产一区毛片| 国产 xxxx| 91精品免费在线| 芒果视频成人app| 女人被男人躁得好爽免费视频|