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

日韩欧美主播在线| 国产丶欧美丶日本不卡视频| 亚洲欧美精品一区| 午夜免费看毛片| 黄视频在线免费看| 久久综合久久综合久久综合| 国产欧美日韩亚洲精品| 久久黄色免费视频| 精品国精品国产自在久国产应用| 3d动漫精品啪啪| 国产午夜伦鲁鲁| 精品国产丝袜高跟鞋| aaa亚洲精品| 国产在线视频91| 人人干人人干人人干| 日本黄色精品| 亚洲精品国产精品国自产观看浪潮| 牛夜精品久久久久久久| www成人免费观看| 最新热久久免费视频| 美国av一区二区三区| 精品国产亚洲av麻豆| 日韩在线卡一卡二| 77777少妇光屁股久久一区| 制服丨自拍丨欧美丨动漫丨| 亚瑟一区二区三区四区| 日韩欧美国产三级电影视频| 国产av人人夜夜澡人人爽| 18video性欧美19sex高清| 国产精品高潮呻吟| 日本公妇乱淫免费视频一区三区| 欧洲精品久久一区二区| 国产麻豆91精品| 国产精品日日摸夜夜添夜夜av| 韩国av中文字幕| 精品成人久久| 欧美高清视频在线| 无码黑人精品一区二区| 日韩欧美网址| 伊人伊人伊人久久| 国精产品一区二区三区| 麻豆成人入口| 亚洲第一精品久久忘忧草社区| 欧美激情第四页| 日本国产亚洲| 欧美日韩电影在线播放| 激情 小说 亚洲 图片: 伦| 黄色综合网址| 色婷婷精品久久二区二区蜜臀av| 成熟丰满熟妇高潮xxxxx视频| 日日夜夜天天综合入口| 一区二区在线观看视频| 日本丰满大乳奶| 在线中文字幕第一页| 亚洲人成精品久久久久| 中文字幕制服丝袜在线| 黄网站在线免费看| 亚洲少妇30p| 992tv成人免费观看| 黄色视屏免费在线观看| 亚洲欧洲国产专区| 在线观看成人免费| 成人看av片| 一区二区高清视频在线观看| 喜爱夜蒲2在线| 丰满的护士2在线观看高清| 亚洲大片一区二区三区| 人人妻人人添人人爽欧美一区| а√天堂中文在线资源8| 婷婷开心激情综合| 亚洲视频在线观看一区二区三区| 国产精品天堂蜜av在线播放| 777奇米成人网| 久久久久无码国产精品一区李宗瑞| 国产精品久av福利在线观看| 日韩精品欧美激情| 婷婷综合在线视频| 午夜精品剧场| 欧美在线激情视频| 中文字幕a级片| 国产一区二区三区免费观看| 国产精品区一区| 日本一区二区三区在线观看视频| 久久久久亚洲蜜桃| 精品国产无码在线| 交100部在线观看| 欧美性xxxxxxxx| 三上悠亚 电影| 亚洲黄页在线观看| 精品国产拍在线观看| 国产一级黄色av| 久久精品伊人| av噜噜色噜噜久久| 国产福利小视频在线| 亚洲日本va午夜在线影院| 青青在线免费观看| 国产亚洲人成a在线v网站| 欧美mv日韩mv亚洲| 五月婷六月丁香| 欧美三级视频| 国产精品视频网址| 天天摸天天干天天操| 中文字幕巨乱亚洲| 99热自拍偷拍| 国产精品日本一区二区三区在线| 亚洲精品久久久久久久久久久| 无码人中文字幕| 国产欧美69| 亚洲japanese制服美女| 蝌蚪视频在线播放| 亚洲国产成人精品视频| 欧美成人福利在线观看| 欧美a一欧美| 久久亚洲一区二区三区四区五区高| www.国产高清| 国产精品一品视频| 亚洲美女搞黄| av资源亚洲| 精品处破学生在线二十三| 99自拍偷拍视频| 日韩高清不卡一区二区| 精品日本一区二区三区在线观看| 国产cdts系列另类在线观看| 91黄色小视频| 中文精品在线观看| 在线不卡欧美| av电影成人| av网站在线看| 欧美精品乱码久久久久久按摩| 西西444www无码大胆| 新67194成人永久网站| 国产精品毛片一区视频| 中中文字幕av在线| 91精品欧美一区二区三区综合在 | 大量国产精品视频| 久久影视中文字幕| 久久久久久久网| 日本日本19xxxⅹhd乱影响| 亚洲国产精品免费视频| 插插插亚洲综合网| 国产情侣自拍小视频| 国产精品久久99| 污色网站在线观看| 日韩av自拍| 国产精品一区二区3区| 国产裸舞福利在线视频合集| 色av一区二区| 人妻一区二区视频| 秋霞成人午夜伦在线观看| 日韩高清国产精品| 久久精品女人天堂av免费观看| 日韩久久免费视频| 国产 日韩 欧美 在线| 白白色 亚洲乱淫| 欧美二区在线视频| 免费毛片在线不卡| 国产精品一区=区| 国产美女av在线| 日韩欧美亚洲另类制服综合在线| 91视频综合网| 成人午夜视频免费看| 黄色大片中文字幕| 亚洲小说图片| 国产精品专区h在线观看| 一级毛片视频在线观看| 欧美一区二区在线播放| 久热这里只有精品在线| 不卡的av电影| 北条麻妃在线视频| 天天天综合网| 激情小说网站亚洲综合网| 欧美黑人巨大xxxxx| 中日韩美女免费视频网址在线观看| 中文字幕观看在线| 亚洲精品日日夜夜| 久久人妻一区二区| 日本不卡中文字幕| 国产青草视频在线观看| 欧美大奶一区二区| 国产精品自拍偷拍视频| 色yeye免费人成网站在线观看| 亚洲福利视频网站| 一区二区三区在线免费观看视频| 亚洲视频一二三区| 一级国产黄色片| 日本va欧美va精品发布| 国产在线视频在线| 国产精品一区二区三区av麻 | 国产精品视频看| 一卡二卡三卡四卡五卡| 亚洲欧美高清| 中文字幕精品—区二区日日骚| 国产精品极品国产中出| 国产欧亚日韩视频| 国产精品电影| 久久精品视频在线观看| 天堂中文网在线| 在线播放国产精品二区一二区四区 | 国产乱码久久久久| 欧美日韩色婷婷| 亚洲精品一区二区三区在线播放| 成人在线综合网站| 99sesese| 久久高清免费观看| 精品人妻人人做人人爽| 日韩成人激情| 麻豆成人小视频| 91麻豆精品国产91久久久久推荐资源| 国产ts一区二区| 国产精品蜜臀| 久久久精品2019中文字幕神马| 四虎精品在线| 欧美videossexotv100| 中文字幕一区二区人妻痴汉电车| 亚洲影院在线观看| 日韩av片在线免费观看| 久久久国际精品| 99久久人妻无码中文字幕系列| 国产麻豆日韩欧美久久| 日本特黄a级片| 狂野欧美性猛交xxxx巴西| 欧日韩免费视频| 一本一本久久a久久综合精品| 日韩精品久久久毛片一区二区| 精品视频高潮| 国产一区二区三区色淫影院 | 美国欧美日韩国产在线播放| 欧美日韩亚洲一| 亚洲大胆在线| 美女黄色免费看| 女生裸体视频一区二区三区| 中文字幕99| 香蕉精品视频在线观看| 亚洲春色在线视频| 欧美最新另类人妖| 青娱乐国产91| 国产探花一区二区| 欧美日韩中文国产一区发布| 久久91精品| 欧美日韩精品久久| 啪啪亚洲精品| 亚洲v国产v| 欧美va久久久噜噜噜久久| 亚洲不卡中文字幕| 西瓜成人精品人成网站| 蜜桃欧美视频| 精品国产一区一区二区三亚瑟| 日韩免费一区二区三区| 欧美色图一区| 宅男噜噜99国产精品观看免费| 久久激情电影| 国产成年人在线观看| 香蕉视频官网在线观看日本一区二区| 一区二区视频国产| 久久精品久久久| 波多野结衣 作品| 亚洲国产电影| 妺妺窝人体色www在线小说| 免费视频一区| 午夜免费福利在线| 日本视频在线一区| 一级做a爱视频| 粉嫩av一区二区三区在线播放| 亚洲色偷偷色噜噜狠狠99网| 久久五月婷婷丁香社区| 国产一区二区三区四区在线| 国产精品久久网站| 色婷婷在线视频观看| 亚洲国产欧美一区二区三区丁香婷 | 色999日韩| 好吊色这里只有精品| 亚洲清纯自拍| 日韩精品无码一区二区三区免费| 美女视频一区在线观看| 久久久久国产免费| 97精品久久久午夜一区二区三区| 色噜噜日韩精品欧美一区二区| 国产精品美女久久久久高潮| 少妇影院在线观看| 懂色av一区二区三区| 中文字幕视频一区二区| 日韩一区二区三区四区| 欧美色图另类| 精品国产一区二区三区久久狼5月| 在线电影福利片| 热久久这里只有| 中文字幕成人| 一本色道a无线码一区v| 中文字幕国产免费| 国产高清一区日本| 六月婷婷七月丁香| 中文字幕佐山爱一区二区免费| 男人的天堂一区二区| 欧美色手机在线观看| 丁香花免费高清完整在线播放| 亚洲片av在线| 五月天激情在线| 国产精品亚洲аv天堂网| 丁香综合av| 制服丝袜综合日韩欧美| 在线亚洲激情| 国产又粗又猛又爽又黄| 久久久精品黄色| 国产系列精品av| 欧美日韩免费不卡视频一区二区三区| 成人毛片在线免费观看| 精品久久久999| 日本免费久久| 精品亚洲欧美日韩| 影音先锋日韩在线| 久久久精品麻豆| 91在线看国产| 久久久久亚洲av无码专区| 欧美午夜在线一二页| 亚洲av激情无码专区在线播放| 成人444kkkk在线观看| 123成人网| 免费亚洲精品视频| 亚洲人妖在线| 国产成人av免费观看| 亚洲欧洲无码一区二区三区| 一级特黄免费视频| 亚洲美女性视频| 九色porny丨首页入口在线| 99在线国产| 最新国产精品| 99九九精品视频| 国产精品久久毛片a| 中文字幕日韩第一页| 国产亚洲一级高清| 国产高清不卡| 欧美日韩成人一区二区三区| 在线日韩av| 亚洲熟女一区二区| 婷婷六月综合亚洲| 天天射,天天干| 韩国美女主播一区| 国产图片一区| 国产69精品久久久久久久| 粉嫩嫩av羞羞动漫久久久| 久久精品国产av一区二区三区| 日韩精品中文字幕在线一区| 最新超碰在线| 91久久久一线二线三线品牌| 欧美影视一区| 一二三区视频在线观看| 夜夜揉揉日日人人青青一国产精品 | www红色一片_亚洲成a人片在线观看_| 国产精品自拍网| 天天射天天综合网| 日韩大尺度视频| 亚洲国产视频在线| 人妻一区二区三区四区| 69久久夜色精品国产69| 影视先锋久久| wwww.国产| 亚洲天堂av一区| 国产肥老妇视频| 久久免费成人精品视频| 欧美1区二区| 国产视频手机在线播放| 中文字幕一区不卡| 国产成人精品一区二三区四区五区 | 天堂网在线最新版www中文网| 国产在线一区二区三区播放| 亚洲综合国产激情另类一区| 一级黄色性视频| 欧美精品久久久久久久多人混战| 顶级网黄在线播放| 国产精品手机在线| 美女被久久久| 多男操一女视频| 精品国产自在久精品国产| 日韩电影毛片| 日韩中文字幕一区二区| 国产成人综合精品三级| 欧美不卡视频在线观看| 尤物yw午夜国产精品视频明星 | 日韩精品一区第一页| 亚洲人与黑人屁股眼交| 亚洲精品在线三区| 成人18视频在线观看| 欧美日韩午夜爽爽| 久久免费美女视频| 97在线视频人妻无码| 国内精品久久影院| 欧美午夜精彩| 四虎精品一区二区| 欧美日韩专区在线| 丁香花在线观看完整版电影| 日韩电影大全在线观看| 成人性色生活片免费看爆迷你毛片| 久久久免费高清视频| 久久综合久久八八| 欧美女王vk| 亚洲精品无码一区二区| 欧美色图免费看| 碰碰在线视频| 777久久精品一区二区三区无码 | 欧美一级网址|