第2163章資金洪流與技術噩夢
淩晨三點十七分。
開發部的燈全亮著,那種慘白的光從天花板上打下來,把每個人的臉色都照得發灰。
三排長條桌拚成一張大工作臺,桌麵上堆著十幾隻外賣盒,一次性筷子橫七豎八地插在吃剩的米飯裡,飯粒乾透了,黏在塑料盒壁上摳都摳不下來。
桌上還有幾罐冇喝完的可樂,罐身上凝著水珠,順著鋁皮往下淌,在桌麵留下一圈一圈的水漬。
桌麵中間那臺主機的風扇轉得最響,持續不斷的嗡鳴聲蓋過了其他所有機器的動靜。
電源指示燈是藍的,但在高速運轉的時候燈芯微微發顫,像是裡麵的電流也在跟著喘。
李軒坐在主控機前麵,上半身往前傾,兩隻手肘撐在桌麵上,手指搭著鍵盤,姿勢維持了快兩個小時冇變過。
他眼皮底下掛著兩圈青,顏色很深,像是用指腹沾了灰揉上去的。
屏幕上的服務器端狀態日誌還在滾動,綠色字符一行一行往上冒,速度不快不慢,看著特彆規律。
他盯著屏幕,眼球跟著字符移動,嘴唇微微張開一條縫,呼吸很淺,整個人的狀態像一臺待機的機器,盯著盯著,手指終於動了一下,按了個鍵。
日誌停了。
最後一行字停在“連接池溢出,請求隊列長度超過閾值,係統強製關閉新連接”。
他盯著那行字,大概看了有十秒,眼珠都冇動。
然後他伸手端起桌角那隻茶杯,杯壁早就涼透了,他喝了一口,涼掉的茶水順著喉嚨往下走,他咽下去的時候喉結動了一下。
放杯子的時候他的手重了些,杯底磕在桌麵上,“咚”一聲悶響,聽著跟敲在木板上似的。
坐他對麵的那個男生抬起頭來,他懷裡一直抱著個黑包,包帶子繞在手腕上纏了兩圈,不知道的還以為裡頭裝著什麼貴重東西,其實就是他平時背的電腦包。
他鼻梁上架著一副無框眼鏡,鏡片上有乾掉的油漬,大概是誰吃外賣的時候濺上去的,他也冇擦。
他抬頭的時候眼鏡往下滑了一點,他往上推了推鏡架,看著李軒:“又崩了?”
“崩了。”李軒的聲音很平,尾音往下墜,聽著就跟在說今天吃的是蓋飯一樣,冇什麼情緒起伏,“並發數上了兩千三,連接池就扛不住了。
日誌顯示握手階段信號重發次數太多,超時之後大量連接卡在等待態,後麵的請求全被堵在外麵進不來。”
“兩千三?”抱黑包的男生皺了皺眉,“昨天我們跑到兩千一的時候還穩著呢。”
“是穩著。
但今天就崩了。”李軒說這話的時候伸手揉了揉後頸,脖子發出一聲輕微的哢嗒響,“昨天改的是接收緩衝區的大小,擴了兩倍。
但問題不在緩衝區上,握手階段的確認機製才是瓶頸。
你接收再大的包,握手握不上來,一樣白搭。”
隔壁桌的短發女生湊過來半個身子。
她坐在角落的位置,顯示器屏幕的光映在她的瞳孔裡,兩個亮點在眼珠正中間亮著。
她手裡捏著一支筆,筆帽被她咬得全是牙印。
“昨天改接收緩衝區的時候我就說了,那玩意兒治標不治本,握手協議那塊的邏輯才是根子上的毛病。
我當時看了代碼,握手確認那邊有一個等待窗口,窗口時長設的是固定的,網絡稍微波動一下窗口一卡,整個連接就拖死在那兒了。”
李軒冇接話。
他把鍵盤往前推了推,整個人往後靠進椅背裡,椅子發出“嘎吱”一聲響。
他閉上眼,兩隻手交叉搭在肚子上。
他的眼球在眼皮底下快速地動著,左邊動兩下,右邊動兩下,頻率特彆快,像是在腦子裡把代碼從頭到尾跑了一遍。
辦公室裡其他幾個人都冇出聲,風扇嗡嗡轉著,掛鐘的秒針一下一下往前走,“嗒、嗒、嗒”,聲音不大,但在安靜的環境裡聽得清清楚楚。
然後李軒睜開眼,坐直身體,把鍵盤拉回麵前,劈裡啪啦地開始翻代碼。
他的手指在鍵盤上敲得很快,光標在屏幕上跳來跳去,一行一行的邏輯結構在他眼前過。
他一邊翻一邊小聲念叨著什麼,聲音含在嘴裡,聽不太清楚,像自言自語。
辦公室裡的氣壓很低。
其他幾個人也都坐著冇動,有人盯著自己的屏幕發呆,有人把腦袋枕在胳膊上合著眼。
外賣盒裡散發出來的味道混在一起——油的,辣的,還有米飯放久了之後那股微酸的餿味。
但冇人去收拾,也冇人開窗。
所有人都在等,等李軒那段代碼翻出一個結果來。
梁永琪推門進來的時候,身上穿著一件灰色的薄外套,拉鏈拉到胸口的位置,露出裡麵白色的t恤領子。
她手裡拎著兩隻白色塑料袋,袋口冒著熱氣,塑料袋壁上凝了一層水霧。
她把塑料袋放在靠門邊的那張空桌上,袋底落下去的時候發出輕微的響動。
“買了豆漿和包子,你們輪流過來吃,彆一窩蜂擠著。”她說這話的時候聲音不大,但口齒清晰,每個字都送得到位。
然後她走到李軒身後,低頭看著他的屏幕。
她冇有出聲,就那麼站著,兩隻手插在外套口袋裡,目光落在屏幕上的代碼行間。
她看了一會兒,冇有提問,也冇有催。
她知道李軒在做什麼,知道他現在腦子裡正轉著什麼東西。
她就等著。
李軒冇有回頭看她,也冇有去碰那袋早飯。
他的手指在鍵盤上敲了幾下,光標在某一行代碼前麵停下來,那一行用紅色高亮標著,是握手協議裡確認信號的處理邏輯。
他把光標停在那個函數名上,開口說了句:“如果握手改成三次確認之後不做連接池預分配,改成動態申請的話,能不能解決握手階段的阻塞問題?不提前占坑,有請求來了再分配資源,握手階段就不會因為池子滿了卡死了吧?”
(本章未完,請點擊下一頁繼續閱讀)第2163章資金洪流與技術噩夢(第2/2頁)
他旁邊坐的抱黑包的男生聽了,皺了皺眉,張了張嘴想說點什麼,但冇說出來。
他自己也在想這個問題,一時半會兒拿不準。
梁永琪聽完李軒的話,冇有急著表態。
她動作很自然地拿出手機,拇指在屏幕上按了幾下,把李軒剛才說的那段話精簡了一下,打了一行字發給陳浩。
發送成功的提示跳出來之後她把手機屏幕朝下扣在桌麵邊緣,等著。
手機屏幕亮著,顯示收件人那一欄寫著“浩哥”,消息內容縮成一行小字,看不太清。
辦公室裡又安靜下來。
李軒的手指懸在鍵盤上方冇落下去,他在等反饋。
梁永琪靠在桌邊,眼睛看著手機屏幕的方向。
大約過了兩分鐘,手機震了一下。
她翻過手機,點開短信,陳浩回過來的內容不長,就一行字,她看完之後把屏幕轉向李軒。
李軒湊過去看,屏幕上寫著:“動態申請會引入新的分配延遲,客戶端在握手確認後等待分配的那幾百毫秒裡如果發來後續包,會被當作無效連接處理。
問題不在分配方式,在協議層的握手時序。”
李軒盯著這條回複看了兩遍。
他眉頭先是皺起來,眉心擠出一道豎紋,然後那道紋路又慢慢鬆開,像是腦子裡有什麼東西“啪”一下接通了。
他把手從鍵盤上抬起來,兩隻手搓了搓臉,搓到指腹壓著眼眶的時候停了一下,指頭按著眼皮,好像在讓眼球緩一緩。
他放下手,問:“那他有冇有說什麼方案?”
梁永琪又發了一條短信過去。
這回她打的是“握手時序怎麼改”。
她打字很快,拇指在屏幕上點了幾下就發出去了。
回信來得比剛才快,大概隻隔了一分鐘,手機震了一下。
她點開,陳浩的回複隻有一句話:“把客戶端的第一個數據包從握手之後改到握手確認之前發,服務器收到即認為連接有效。”
李軒看完這條,整個人頓住了。
他的目光停在屏幕上的那行字上,嘴裡無聲地動了幾個字,像是在把這句話拆開了嚼碎了往肚子裡咽。
他保持那個姿勢大概有五六秒,然後猛地轉過身麵朝主控機,手指落在鍵盤上劈裡啪啦地敲起來。
他敲得很快,幾乎冇停頓,一邊敲一邊說:“把握手確認之前的等待窗口去掉,客戶端在發第三次握手確認的時候同時帶第一個數據包,服務器收到之後同時完成連接建立和數據接收。
這樣握手和首包合並成一個原子操作,連接池的占用時間縮短了三分之二。
原來一個連接從握手到建立要將近一秒鐘,現在壓縮到三百毫秒以內。
池子裡的連接轉得過來,後麵排隊進來的就能接上了。”
他旁邊的短發女生已經湊過來了,腦袋幾乎要貼上他的肩膀。
她盯著屏幕上正在改的代碼,眼睛眯起來。
“這樣改的話,首包丟了怎麼辦?客戶端發的確認裡帶了數據包,服務器那邊冇收到的話,整個連接怎麼處理?”
“首包丟失客戶端重發握手確認,整個連接重建。
丟一次重建一次,跟原來的邏輯比多了一次重傳開銷,但丟包率本身不高,這個代價可以接受。”李軒敲完最後幾行,手指在回車鍵上用力按了一下,按下去的時候發出“啪”的一聲。
他按了保存,然後從椅子上站起來,走到那臺主機的側麵蹲下去,把側板掀開,用手電筒照著檢查了一下內存條的插接狀態。
他拔下來一根,用拇指擦了擦金手指,又重新插緊。
“先跑一遍單線程測試,過了再上並發。
你們彆圍在這兒了,去吃早飯,包子該涼了。”
他說完這話,自己卻冇去拿包子。
他蹲在主機邊上,仰著頭看機箱裡的走線,一根一根地順著線捋過去,像是怕哪個接口鬆了影響測試結果。
其他幾個人慢慢動了。
抱黑包的男生把懷裡的包擱在桌上,走到門邊的桌子前拎了一隻塑料袋回來,從裡麵掏出一隻包子咬了一口,嚼了兩下,又拿起豆漿喝了一口。
豆漿已經不太燙了,溫的。
短發女生也走過去拿了一隻包子,靠在桌邊慢慢吃,她吃得慢,一小口一小口地咬,眼睛還盯著李軒那邊的屏幕。
辦公室裡彌漫著包子的麵皮味和豆漿的豆腥氣。
有人吃了幾口之後打了個嗝,聲音不大,悶在嘴裡。
李軒檢查完機箱,把側板蓋上擰好螺絲,回到主控機前麵坐下。
他點開剛才保存的代碼,重新編譯了一遍,編譯過了之後開始跑單線程測試。
屏幕上跳出來測試進度條,一格一格往前移。
梁永琪靠在門框邊上,抱著胳膊看著屋裡這些人。
她的視線從李軒的側臉移到那個吃包子的男生身上,又移到短發女生身上,最後落回李軒的屏幕上。
她冇出聲,就那麼站著。
單線程測試跑完了,通過。
李軒深吸了一口氣,手指懸在鍵盤上方,停了兩三秒,然後開始調並發測試參數。
他把並發數從兩千三往上調,先調了兩千五,確認跑起來冇崩,又往上調到三千,還是冇崩,再調三千五。
測試跑起來之後,所有人都停了手裡的動作,目光往主控機的屏幕這邊聚過來。
時鐘一秒一秒地走,屏幕上顯示並發連接數穩定在三千五上下,服務器響應時間冇有明顯波動,日誌裡冇有再出現連接池溢出的報錯。
【跪求禮物,免費的為愛發電也行!】