天天看點

夢裡花落知多少,網絡抖動逃不了

​​食堂

“喂,喂,喂......”睦晨回過神來,不好意思地對邊上已經謝了頂的同僚笑了笑。

同僚安慰他:“你也别太操心了,這種問題是比較難查的,我們有時候真的很難把這種邊界問題說清楚。”正說着,這位謝了頂的同僚,又美美地喝了一口枸杞烏雞湯。

人聲鼎沸的食堂, 睦晨朝四周看了看, 歎氣道:“肯定是他們那邊資料有問題,為什麼他們就不承認呢?”

夢裡花落知多少,網絡抖動逃不了

謝頂的同僚吹着湯碗上面的油花,回他:“那個有什麼辦法,nginx 的日志不能代表最終資料包離開機器的時間,他們就是在這個問題上扯皮啊!!!”

睦晨有些氣憤,吃了兩大口白米飯, 鼓着腮幫子說:“就末友神門絆砝了嗎.....”(就沒有什麼辦法了嗎?)

“按說如果你們組再沒有進展,資料比不過其它廠家,客戶就要選擇其它廠家或者要求我們公司降價了吧。" 同僚喝了一口湯。

“要我說啊,客戶也是有病,就差個 50ms,有什麼關系,一般使用者還真能感覺到不成.....”。同僚吧啦吧啦地吐糟着。

睦晨沒心思聽同僚的吐糟,主要是他自己主動想解決這個問題,他老大也特别着急。使用者拿着其它廠家的對比資料,找過來說睦晨公司的資料的接口響應時間比其它的提供類似服務的廠家要慢 50ms。

雖然大家都知道,對方就是想壓價,但是問題不能解決就公司就沒有主動權,睦晨自己也測試了一下,量少的情況下根本就測不出來,但是使用者的真實資料量大,平均值就會差一些,并且使用者隻告訴公司最後的平均資料就是不同意給出每一個用戶端裝置上采集的原始日志。上午老大被老闆叫到辦公室談了一個小時,看得出來老大也有些無計可施了。

公司

夢裡花落知多少,網絡抖動逃不了

吃完飯,回到公司,老大叫住了睦晨,再讨論了一下。現在的問題在于,我們這邊 nginx 的日志顯示,我們處理時間,還有響應都是沒有問題的,但是我們發包這個地方有一個情況就是,一般的響應大小隻有 100k 不到,這些資料 nginx write 到核心的時候基本都是一次就完成了,都緩存在核心了,是以我們統計到的資料發送資料時間基本都是 0。這個就是問題的核心。問題就在于核心在發送資料的時候可能遇到了一些問題,導緻資料發送比較慢,是以使用者接收的時間變長了,但是我們對這塊的資訊是沒有記錄的。

 老大:“睦晨啊,你再測試看看,看看能不能找到什麼其它的線索。”

 睦晨:“好的,老大,上次壓測的資料,他們也不承認嗎?”

老大:“不行,他們說那不是正常的業務流量,他們采集的是業務流量就是有問題,我們進行壓測的資料正常也不能說明什麼?”

“他們這就是在賴皮!!!” 睦晨有些氣急。

老大:“其實我大概知道問題在哪裡?”

睦晨一驚:“真的嗎?怎麼老闆沒有講啊!!

“老大:“我估計是有小營運商的資料混在裡面了,因為我們是使用者域名的預設解析,使用者隻是把電信一些省的資料給了其它廠家。是以理論上所有的小營運商的請求都在我們這邊。但是我也隻是猜測,沒有資料做不得數啊!”

老大:“nginx 的資訊,核心還有 buffer,響應包不大,發送都是一次性就傳遞給核心了,發送時間都是 0,丢包資訊也是整機的,要是可以有每一個流的資訊就好了。”

老大也揉了揉太陽穴:“唉,我現在也沒有什麼辦法了,你去忙吧。” 

睦晨欲言又止,半天再說:“老大,你還沒吃吧,我去給你買個外賣吧!”老大擺擺手:“沒什麼胃口。”

睦晨:“哦!”

眉目

睦晨,忙了一個下午,沒有什麼方向,回頭看看,老大扶胸皺眉。就在同學大群裡請教了一下技術上有沒有什麼辦法:

同學 A:睦晨也沒有辦法,我們能怎麼辦?

同學 B:是啊,睦老大我這還有幾個問題想請教你呢,什麼時候帶帶我啊?

同學 D:可惜守出是萬年潛水,聽說是去了阿裡吧。真羨慕啊!

同學 C:話說,睦晨為什麼去這家小公司啊?   

同學 A:我知道,我知道,我見過他老大,大美女啊......

同學 B:是嗎?

同學 C:求照片。

同學 Z:老 A 又在造謠了,他們一個天南一個地北,他見個鬼啊!

同學 E:求照片。

同學 F:無圖無真像。

同學 G:求照片。

................

樓已經歪了,睦晨嘴角抽了抽,就去吃晚飯了,先不管這幫同學了。

剛吃了兩大口白米飯,居然收到同學 Z 的消息:“你可以試試 Alibaba Cloud Linux 2 裡面有一個 TCP RT 子產品。我之前聽守出說的。”

睦晨如同久旱逢甘雨,忙問道:"這個  TCP RT 做什麼用的?"

同學 Z:說是可以采集 tcp 在核心的一些消息。具體的我也不清楚。

睦晨想了一下,冷靜下來分析了一下:感覺沒用,我們是長連接配接,要每一個請求的詳細資料,隻是 tcp 的資料沒有什麼用的。一個連接配接基本要完成幾百次請求,需要每一個請求的詳細資料。

同學 Z:好吧。那你再找找其它的辦法吧。

睦晨又看了一晚上的資料,核心的問題還是不能解決。

峰回路轉

晚上九點,加班人下班了,群裡又在要照片了,睦晨趁人多又問了一次有沒有同學有辦法。 就沒再管群裡的這些同學了。突然一條私信消息驚醒了正在發呆的睦晨,一看是班裡的學霸,去了阿裡的守出同學:“你試過 Alibaba Cloud Linux 2裡面的 TCP RT 子產品嗎?”

睦晨有些吃驚,又是這個 TCP RT 回到:“同學 Z 和我說過了,我們要每一個 tcp 裡面的請求的詳細資料,tcp 的資料雖然也很有用,但是估計是不行的,沒有直接的資料說服不了我們客戶!”

學霸的專屬語氣:“沒有調查沒有發言權。TCP RT 可以自動識别出來 tcp 連接配接上面傳遞的請求還有響應。”

睦晨一愣:“這麼神奇!”

睦晨:“什麼請求都能識别嗎?有些神奇啊!出忽我的意料啊!”

守出:“正常隻能識别 請求 -> 響應,這樣模型,如果是 http2 那種同時多個流的情況就不行了,這個是最大的限制。”

睦晨:“http1.1 還有 https 還有 mysql 可以嗎?我們線上主要是這幾種服務。”

守出:“都可以的。”

睦晨:“能做什麼呢?雖然能自動識别請求和響應很神奇,但是有什麼用呢?”

守出:“可以采集一個請求響應花的時間,請求和響應分别多少位元組,請求響應過程中有沒有重傳,請求和響應的時間等等。”

夢裡花落知多少,網絡抖動逃不了

睦晨有些興奮了,用力揮了揮手,冷靜了一下問到:“這個請求和響應的時間不是應用層傳遞給核心的時間吧。那樣的話沒什麼用啊?”

守出:“是資料包離開機器的時間。”

路轉峰回

“耶!!”

睦晨,非常興奮,本來隻是随便找同學問問,沒想到還真有辦法,真是柳暗花明啊。

開心地找到老大說明情況,老大還是比較冷靜的:“我有幾個問題——

1. 性能怎麼樣,我們目前隻能測試實際業務,使用這個 TCP RT 會不會影響性能?

2. 這個工具穩定性,怎麼樣?核心子產品使用起來還是要謹慎的,不然直接導緻機器挂了也很麻煩?

3. 布署友善嗎?這是一個核心子產品,我們可能要換作業系統。”

睦晨一聽,也冷靜了下來,認真臉:“老大,你說得對,我再問問,一會我先線下測試一下?”

老大屏顔一笑:“我也是看你太興奮了,給你潑點冷水。越是這個時候越不能太急燥了,引出故障就不好了。這幾天也是辛苦你了,你仔細看看我剛剛說的幾個問題,目前來看,這個工具應該有用,你看看我們能不能實際用得上。加油!!”

睦晨:“好的,老大。”

睦晨把三個問題抛給了守出。

守出很認真的說:“阿裡大規模布署了很多年了,最近才開源出來。早幾年還發了一篇頂會的論文!。”(論文:

https://yq.aliyun.com/download/2718

守出:“穩定性還是可以的。當然,你們公司有完整的釋出流程吧。不會這個都沒有吧。真不明白當初你怎麼就被迷了心,去這個公司,和我一起來阿裡不好嗎?”

睦晨聽了,撇撇嘴,守出還是和大學的時候一樣,老古闆,嚴肅臉,好為人師。難怪你沒有女朋友!!

守出:“性能影響理論上是有的,但是實際測試資料來看,影響很小的。基本不會對業務性能産生影響。而且資料采集完了,你可以随時關閉這功能。”

睦晨這下放心了,問到:“這個使用友善嗎?”

守出:“很友善的啊,加載子產品,配置一下就可以了,從核心 /sys/kernl/debug/tcp-rt 下面直接讀取檔案就可以獲得資料了。”

守出:“哦,當然了, 要先安裝 Alibaba Cloud Linux 2 作業系統,安裝完成了之後直接加載子產品就可以了。你們服務是在阿裡雲上嗎?如果是的話,開一台新機器選擇最新的 Alinux2 就可以了。”

峰回路又轉

睦晨:“它有什麼要特别配置的嗎?”

守出:“一般配置一個你們的服務端口就可以了,所有和這個端口建立的連接配接都會被監聽。其它的連接配接就不會關心了。”

睦晨聽了,感覺挺友善的,就準備測試一下。

守出:“我要下了,我女朋友來接我了。”

噗,雖然很感謝,嘴裡還是說道:“見色忘義。”

“..... ^_^”

很快睦晨就開了一台新的 ECS,選擇了最新的 Alibaba Cloud Linux2。很快機器啟動之後,睦晨要安裝公司的服務程式,但是這個時候,睦晨突然想起來了一個事情,這個客戶很奇怪,居然要求服務端開了很多端口 8000-10000。他們請求也是很随機在這些端口上。這就麻煩了,TCP RT守出好像說是配置指定的端口的啊,我這是端口範圍啊。怎麼辦,發消息,守出也不回。這下麻煩,聽着挺好的東西,居然不支援配置端口範圍,什麼破玩意。

夢裡花落知多少,網絡抖動逃不了

經過一個白天的爆曬,樓下的柳樹本來都有一些無精打采的樣子,現在天氣涼下來了,雖然柳枝向下,但是透着光的綠給人奮發向上的力量。

睦晨非常煩燥,研究了半天挺好的東西,到最後一步了,居然不支援端口範圍。一個人在視窗看着外面的柳樹,叫了一個外賣,等外賣的時間看着遠處黑洞洞的夜也冷靜了下來。拆開外賣,吃了幾口白米飯,心想,不能放棄,這是我最接近成功的機會了。想起來,守出說是 Alibaba Cloud Linux 2 開源的項目,那應該有文檔吧。睦晨放下外賣到阿裡雲官網找了一下,還真找到了:

https://www.alibabacloud.com/help/zh/doc-detail/181331.htm

仔細一看,還真支援端口範圍,真不愧是應用多年的老項目啊,考慮還真全面,非常棒

的項目。

睦晨變臉就和川劇一樣。扒了兩口白米飯,開始幹活了。

modprobe tcp_rt lports_range=8000,10000      

接着就在 /sys/kernel/debug/tcp-rt 下面找到了日志檔案,測試了一下,發現沒什麼問題,資料很詳細完全可以滿足要求。

仿佛看到了光明,睦晨一點也不累。

睦晨很細心,又測試了一下子產品的解除安裝,先執行了一下這個指令,守出說是這樣之後新的連接配接就不會再使用 tcp rt 了,這樣舊的連接配接都退出之後 tcp rt 就可以解除安裝了:

echo 1 > /sys/kernel/debug/tcp-rt/deactivate      

然後關閉了測試的連接配接,一會

lsmod      

就顯示 tcp_rt 沒有在使用了,執行

rmmod tcp_rt      

整個過程都很順利,沒有遇到什麼問題。 

然後睦晨就提了申請,老大也還線上把機器加入到了叢集。一會就有大量的資料出來了,睦晨化身資料分析工程師。

夢裡花落知多少,網絡抖動逃不了

結尾

老大:“老闆,我們找到原因了。”老闆剛剛到公司,老大就帶着睦晨進了老闆辦公室。“睦晨,你給老闆介紹一下情況。”

睦晨:“老闆,是這樣的,我們其實是客戶的預設廠家,DNS 解析的時候,使用者隻是把一部分電信的客戶切走并給了其它的廠家,而其它的小營運商的量其實都在我們這邊。而就是這些小營運商的資料把我們的資料拖慢了。”

老闆:“這麼簡單?之前怎麼沒想到。”

睦晨:“我們之前有猜測過,但是沒有資料支撐。使用者的響應其實很小,這導緻我們 nginx 上統計的資料,所有的請求響應耗時都很短,看不出來差别。是以之前和使用者提了,沒有證據使用者不認可。”

老闆:“哦!這次是怎麼就有證據了。”

睦晨:“我們從核心采集到了所有請求的發包的耗時,把慢的這些請求的過濾出來,基本都是小營運商的 ip。”

老大:“我已經和使用者溝通過了,我把資料一擺,他們接受了。哈哈哈哈。”

睦晨:“隻要把幾個小營運端的資料過濾一下,我們的資料和其它的廠家的資料差不多,還要更好一點點。他們也确認了,所有的小營運商的量基本都是在我們這邊,因為我們是他們配置的 DNS 預設解析。”

老大:“這些資料還可以挖掘一些其它的資訊,我想要做一個平台,把這些資料實時導入進來,以後遇到這樣的客戶就不怕了。還可以用來監控我們日常的資料,分析出來我們一些自己的問題,及時發一些異常的情況。這個平台就讓睦晨來負責吧!”

睦晨,揉着黑眼圈,傻笑:“嘿,嘿,嘿.....好的。”

老闆笑呵呵:“很好,很好,很好。小夥子加油啊!!”

中午食堂。

謝了頂的同僚喝着黃豆海帶排骨湯說:

“睦晨啊,你們老大房星真是巾帼不讓須眉?”

“話說,你們老大名字還真有些怪啊。”

“這次解決了客戶的問題,老闆又表揚你們組了。”

“你們老大還特别漂亮,我們組壓力山大啊!!”

“......”同僚又在不停地吧啦吧啦。

睦晨回憶着早上老大的誇獎,紅着臉扒了幾大口白米飯。

“聽說這次你立了大功啊,給哥說說!”睦晨被打斷了扒飯不太高興,拿起手機甩給他

一個連結:

接着,繼續扒白米飯。

(完)

加入龍蜥社群

加入微信群:添加社群助理-龍蜥社群小龍(微信:openanolis_assis),備注【龍蜥】拉你入群;加入釘釘群:可掃碼或搜釘釘群号(33311793)。歡迎開發者/使用者加入龍蜥OpenAnolis社群交流,共同推進龍蜥社群的發展,一起打造一個活躍的、健康的開源作業系統生态!

夢裡花落知多少,網絡抖動逃不了
夢裡花落知多少,網絡抖動逃不了

龍蜥社群_小龍                                            龍蜥社群釘釘群二維碼

關于龍蜥社群

龍蜥社群是由企事業機關、高等院校、科研機關、非營利性組織、個人等按照自願、平等、開源、協作的基礎上組成的非盈利性開源社群。龍蜥社群成立于2020年9月,旨在建構一個開源、中立、開放的Linux上遊發行版社群及創新平台。

短期目标是開發龍蜥作業系統(Anolis OS)作為CentOS替代版,重新建構一個相容國際Linux主流廠商發行版。中長期目标是探索打造一個面向未來的作業系統,建立統一的開源作業系統生态,孵化創新開源項目,繁榮開源生态。

加入我們,一起打造面向未來的開源作業系統!

Https://openanolis.cn

繼續閱讀