第023章 藏拙失敗

投票推薦 加入書籤 小說報錯

  全量壓測定在周四晚八點。這是政務雲的老規矩:汛期一過,趁著業務低峰,把三倍於日常的流量灌進核心集群,看看極限之下還剩多少餘量。窗口全長三個半小時,從晚八點到十一點半;壓測方案、灌流腳本、判停條件,提前一周就走了變更流程,編號、審批人、回退方案,一樣不缺。

  壓測不在機房裡偷偷做。通知上的說法是「公開透明,接受監督「:指揮大廳的監控大屏前公開做,甲方分管領導到場,各委辦局的運維負責人到場,兩家同行廠商的代表也請來觀摩。落到每個人頭上,這就是一場誰都別想糊弄的當面驗貨。

  七點二十,林默提前到了。例行組的主操們在主控台做最後一遍預檢。清單列印出來釘在操作台邊,一條一條打鉤;主操姓佟,口令念得又慢又清楚,每執行一步,都等對面機房的值守復誦一遍才落下一個字。空調和機房送風的低頻混在一起,待久了後頸發僵。一整面牆的拼接大屏亮著待機畫面,日光燈白得發青,把每張臉都照得少了兩分血色。

  林默照例縮在角落。桌面上擺著三樣東西:筆記本,筆,還有那隻磕了邊的保溫杯——去年搬家磕的,沒換,順手。杯里的茶是下午泡的,早涼透了。

  座位格局早就排定了。甲方分管領導坐正中,轉椅,杯子擱在扶手上;委辦局的運維頭兒們沿長桌排開,社保口那位進門前還在走廊里打電話,安排明早窗口的排班;靠門一排是兩家廠商的代表,西裝袖口露出一截錶帶,抱著胳膊,神情鬆弛——來看成色的鬆弛。

  陳志遠坐在林默斜前方,跟相鄰的科長低聲交換名片,名片夾開合的動作比平時快了半拍。二期在即,今晚這種場合,他一半是來陪同,一半是來記人。

  小趙今晚在機房值守,出發前給林默發了條消息:「默哥,大屏要是綠到底,明早豆漿我請。「林默回了個「好「,把手機扣回桌面。年輕人盼著安穩,這是好事。

  林默給自己劃的線跟往常一樣:能躲在陳志遠影子後頭就絕不往前站;能推給設備的絕不認到自己頭上;公開場合能不開口就不開口。這套分寸他守了一年多,從「臨時搭把手的「守到「救火專業戶「,越守越熟。

  耳後那陣熟悉的微熱安安靜靜的。出門前他照例掃過一遍池子的底帳:四十一台邊緣設備在線,薄設備的標誌位正常,冷頻段上沒有新的動靜。都穩。這份穩他沒有對任何人提過——今晚他是來陪綁的,陪綁的人不該帶著自己的帳本進場。

  他比平時多看了一眼大屏右上角的時鐘。二十點整,壓測準時開閘。灌流從階梯起步,一檔一檔往上加。大屏上的曲線跟著爬,綠的,穩的。頭二十分鐘波瀾不驚:走廊里有人外賣到了,被工作人員攔在門外;兩位廠商代表交換了幾個眼神,其中一個在平板上記了兩個數;領導端起杯子喝了口水,又擱回扶手上。

  大廳里的期待各有各的版本。領導等的是「餘量充足「四個字,好往上報;運維頭兒們等的是早點散會;廠商代表等的東西說不出口——最好是平穩,平穩里最好再帶一點小小的、不傷筋骨的磕絆,好讓他們回去有東西可寫。

  林默沒參與任何一種期待。他盯著的是灌流階梯的第三檔——按方案,那一檔會把核心集群推到日常負載的兩倍,是整個窗口裡最陡的一段。曲線爬到那兒的時候要是還能平著走,今晚就真的只剩散會一件事了。

  一切都在劇本之內。今晚這場壓測的劇本本來就簡單:平穩灌滿三小時,曲線畫得漂亮,各回各家。劇本在二十點二十六分翻頁。

  二十點二十五分,例行組執行壓測前的最後一道工序:全量預推——把壓測參數順著配置通道推給全鏈路,讓每個節點帶著新參數進入受壓狀態。這道工序做過十幾次,從沒出過事。問題出在這批配置包里。

  混進去的那串欄位,不是一眼假的垃圾數據。它長得規規矩矩:格式合法,編碼合法,校驗和都對。唯獨長度卡在邊界上——舊版協議定義的欄位上限,恰好比新版校驗規則認定的安全上限寬出半個身位。校驗邏輯按新規則放行,調度器按舊語義解析,兩邊都按各自的規矩辦事,誰都沒做錯,錯就錯在這串欄位兩頭不靠。

  它順著依賴鏈往下走。先帶歪一個節點,再咬住相鄰的三個;被咬的節點把畸形欄位原樣轉發給下家,一傳二,二傳四。

  症狀比來源更麻煩。它沒有把服務打死——它讓調度器在「切還是不切「之間反覆橫跳。髒流量混在正常的配置同步里,分不出你我;調度器想把髒的那部分甩掉,每甩一次,正常的同步就斷一角;斷角觸發補償,補償把髒數據又往前推一輪。震盪就這麼滾起來了,越滾越快。

  二十點三十一分,值班運維發現異常,手動觸發降級。降級腳本剛一執行,就撞上另一堵牆:調度器此刻已進入震盪保護態,拒絕一切變更指令,報錯停在半路。降,降不下去;回,回不回來。鏈路在兩種姿勢之間懸著,每一秒都在往壞里走。

  大屏上的顏色從綠到黃用了四十秒,從黃到紅,二十秒。對講機里的聲音亂了。

  「降級失敗——調度器自鎖了!「

  「備用鏈路!切備用!「

  全網首發更新𝔗𝔚看書📕𝔰𝔥𝔲.𝔱𝔴

  「切了!切不動——配置通道是同一條,髒數據還在裡面滾!「

  「手工摘節點!快摘!「

  幾個運維撲在鍵盤上,命令一行一行往裡灌,報錯一行一行往外吐。手工摘除的每一條路徑,此刻都撞在同一道自鎖上——保護機制本來是防誤操作的,現在反過來把救援的手也鎖在了門外。

  又有兩路命令灌進去,又兩路報錯退出來。有人喊了句「重啟節點「,被帶班的當場按住——重啟等於把震盪從頭再滾一遍,這個責沒人敢擔。

  指揮大廳里幾十號人。甲方領導站了起來;委辦局的頭兒們從椅子上探出身子;靠門那排廠商代表把抱著的胳膊放下來了。大屏上那片紅不是慢慢暈開的,是一寸一寸啃過來,誰都看得出要淹,誰都伸手去堵,堵不住。耳後,天樞的震顫收緊。

  【來源查到了半程。】它的聲音快而低,【畸形欄位混在預推批次里。中轉節點上,簽發標識一欄是空的——按規程,那裡必須有一個簽發人簽名。空簽名欄位,規程上不該存在。】

  林默的視線掃過大屏右上角的時間戳。這筆帳他算得很快:壓測窗口還剩不到三個小時;按眼下震盪擴散的斜率,核心集群撐不過十點。而明早八點,政務大廳開門,全市的窗口等著這套系統。今晚要是當著這一屋子的人崩了,崩的就不只是集群。

  【人工摘除的全部路徑都撞在自鎖上。】天樞把結論推過來,【除非先把震盪根因剝掉。否則,誰的腳本都進不去。】

  沒有人應聲。這間大廳里,能接住這句話的人,此刻只剩一個。林默放下保溫杯,杯底在桌面上輕輕一頓。站起來之前,他給自己三秒鐘。胸口的皮夾里,那張便簽還在——五行啟用條件:只借閒余,不碰數據,天亮歸位,全程記錄,留後手。便簽底下壓著的另一個問題,是他兩個星期前親手寫下的:這一網,值不值得被看見。

  今晚這筆帳,清算得很快。不開:三個小時內核心集群當眾崩掉,全城政務雲在幾十雙眼睛面前停擺,這口鍋沒有任何一家乙方接得住——志遠數科當場出局,二期歸零,連大數據局力挺他們時那張臉,都要一併按進地里。

  開:這張網從未在這種場合亮過相。今晚一亮,「志遠數科那個林工手裡有點東西「這句話,會寫進在場每一個人的備忘錄,再由他們各自帶進更遠的屋子。甲方、同行、更高處——每一條線都會比昨天粗一圈。

  兩頭都疼。一頭疼在帳上,一頭疼在命上。他還掃了一眼這間屋子的退路:側門兩處,監控全覆蓋,出門就是走廊;要是十分鐘內接管失敗,他備了一套說辭——預置編排執行超時,人工中止,責任在流程不在人。說辭是留給自己墊背的,他希望用不上。

  天樞把他腦子裡的後半截說完了:【開。這種場合的開,不叫暴露,叫擔責。擔責的人,比躲事的人難動。】

  他站起身。起步那幾步,離他最近的廠商代表先偏了下頭——同行對「誰突然動了「最敏感。這半寸偏頭被餘光收進去,隨即傳開:陳志遠直起了背,甲方領導的目光轉了過來,長桌盡頭幾個運維從屏幕上抬起了臉。

  經過陳志遠身側時,林默朝他極輕地點了一下頭。陳志遠的手在桌沿上收緊了一瞬,沒有出聲。

  走到主控台,他朝正中的方向開口,聲音不高,字字落地:「領導,現場接管,我來。「

  甲方領導盯著他看了半秒,抬手放行。這半秒里,程序的口子開了;同時落筆的,還有一份無形的見證名單——在場每一個人,都是名單上的一行。

  他在操作位坐下,雙手放上鍵盤。屏幕的反光里,那雙眼睛沒有慌。

  意識的最底層,一行指令壓過去。無聲,無息,沒有任何一個人聽得見:接管,全開。左耳後上方,那陣震顫應聲而起——不是提醒,是應答。晨間例行的雙層驗證早已走完,通道是現成的;此刻的天樞不帶半點慣常的鬆弛,語速快得反常:

  【編排通道確認。池內四十一台,准入核驗通過三十七台;薄設備按上限三成緩衝,入池時長硬頂三十分鐘,到點強制退出;攝像頭類,零接入。】

  【三十七台准入名單已生成,編號連續,全程可回溯。】天樞補了一句。這條確認不為別的——萬一將來有人問起今晚動了哪些設備,他要能一頁翻到底。

  十七台從未在這種場合亮過相的邊緣節點,在這個夜晚次第入池。路口的信號機、路燈杆的控制器、幾個委辦局下了班的備份終端——一條條被點亮的,是這座城市的另一副骨架。

  而在這間大廳里,這一切只呈現為屏幕上一行行滾動的指令:一套預置的自動化編排,被操作員一聲令下調了出來。執行快得不合常理,可屏幕上每一步都有據可查、有單可對。

  沒有人知道這套「編排「的判斷是誰在做、以什麼速度在做。知道的人,全場只有一個。

  他閉了一下眼。視野里,全城的節點次第攤開:哪兒在燒,哪兒在撐,哪兒剛被喚醒正待命,清清楚楚。這一眼比大屏上任何一塊面板都完整——代價是,這些畫面只存在於他一個人的視神經里,檔案里不會有,日誌里也不會有。

  二十點三十四分,接管開始。第一步,卸載。最燙的那股請求順著調用鏈被引向邊緣節點,核心調度器肩上的擔子一寸一寸卸下來。大屏上,核心集群的排隊深度曲線第一次停止上翹,在半山腰橫住了。

  【卸載完成三成五。繼續。】天樞報點的節奏穩得像節拍器。

  第二步,隔離。那個被髒數據咬死的節點,被整個圈進沙箱——不重啟,不強殺,先掐斷它的上下游,讓震盪在裡面空轉,出不了圈。切面乾淨,相鄰節點毫無察覺。主控台日誌里,這一步呈現為一條隔離指令,執行用時零點四秒。

  【沙箱收口。髒源已圈死。】

  第三步,換底。備用雙活鏈路頂上——政務雲異地容災通道,平時只做心跳巡檢,今晚第一次真刀真槍扛起主流量。切走的流量全部做了標記重放,等核心集群緩過勁,再原樣餵回去。大廳大屏之外,任何一端用戶的進度條都不會知道,自己腳下剛剛換過一次底。

  重放走的是影子隊列:切走的請求先落一條流水,邊緣側應答之後,應答內容按原時序回注核心庫;比對一致的丟棄流水,不一致的進異常桶。這一整套,在主控台上只顯示為一行「同步完成率「。

  二十點四十一分,核心集群退出震盪保護態。二十點四十七分,配置通道里的畸形欄位被定位、旁路,補丁腳本重推全鏈路。林默在鍵盤上敲下最後一行確認,動作和白天寫任何一行普通代碼沒有區別。

  二十點五十一分,大屏從紅到黃,從黃到綠。最後一塊面板恢復平直的時候,機房送風的低頻重新成了大廳里最大的聲音。【核心集群恢復承載。池子按反序退場,薄設備先走。】二十點五十六分退場開始,二十點五十八分,最後一檯燈杆控制器退出,餘量校驗做差為零。

  整個過程,人工干預只有接管與收尾兩次。中間那七分鐘,乾淨得讓人不敢眨眼——不是機器自己好了,在場的人都看得出來,是有人在七分鐘裡,做完了一支隊伍一晚上做不完的事。

  大廳里先是沒人出聲。對講機早停了。幾個運維的手懸在鍵盤上方,落不下來——怕一動,就把好不容易接回來的平穩碰碎。這種安靜持續了大約五秒,然後,甲方領導第一個鼓起掌來。

  他掌心拍得發燙。今晚真崩了,第一個挨板子的是他。掌聲隨後連成片,靠門那排廠商代表互相看了一眼,跟著拍起來——拍是拍了,眼神里的東西早換了:進場時那點「來看成色「的鬆弛沒有了,換上的是壓著驚的重新估量。這一場無聲的反殺,比任何答辯都管用——他從頭到尾沒解釋一句,紅屏卻自己褪了。

  社保口那位頭兒拍著手,側身跟同事低聲說了句什麼,同事點頭點得很用力。左側靠門的角度里,有一塊手機屏幕橫著亮起。

  【有人在錄。】天樞的聲音在他耳後輕輕點了一下,【不是對大屏。】

  林默沒有轉頭。他記住的是那個位置。主操佟工回過神來,聲音發飄:「壓測……繼續跑?「

  「跑完。「林默說,「數據別斷。「

  後半程的灌流照舊,曲線平得接近一條直線。這場壓測的後半段,成了志遠數科技術能力最誠實的一次記錄。

  陳志遠站在人群後頭,愣了很久。他不是第一次起疑。那晚無聲收網,境外痕跡被抹得乾乾淨淨;技術比武,只贏一點,鋒芒收得滴水不漏;大數據局指名要人之後,那些電話一個接一個打進來——這些碎片他撿了半年,一直擱在心裡沒拼。今晚,碎片當著他的面合攏了。合出來的東西,不是「技術好「三個字能蓋住的。

  他張了張嘴,什麼都沒說出來,只是抬起手,用力按了按自己的胸口,把跳快了的心往回壓了壓。

  林默收手時,額角有一層薄汗。不是累。他抬手按了按耳後,那陣震顫緩緩退著潮。

  【從今晚起,】天樞的聲音低而清楚,【你每一次亮相,都得配一條退路。這一條,往後是規矩。】

  「記下了。「這次他沒有補充。壓測二十三點整收窗,全程通過。

  結果欄填的是「通過「。備註欄補了一行:中途處置配置異常一處,未影響壓測結論。這個口徑是甲方分管領導親口定的——他比誰都清楚,今晚要不是有人接住,「未影響「三個字就得換成別的說法。

  處置報告按流程走:起因、處置、用時、責任人。林默的名字落在「現場處置「一欄,白紙黑字。這是他的名字第一次正式寫進雲平台的檔案——以前他的功勞都活在別人的嘴裡,從今晚起,活在紙上。

  散場時,走廊里的聲音比來時多。有運維頭兒回頭朝主控台方向又望了一眼;社保口那位跟同事並排下樓,腳步都比來時輕快;廠商代表把平板收進包里,包帶在肩上勒得比來時緊。

  林默收拾完主控台,在洗手間的鏡子前站了一會兒。水開著,他洗了手,看著鏡子裡的自己:眼下青著,頭髮有幾根翹著,跟任何一個熬了夜的技術員沒有分別。他把水關了,紙巾擦淨,出來的時候,臉上什麼都沒有。

  陳志遠在樓下等他。兩個人並肩往停車場走,走過兩排車,陳志遠終於開口,聲音壓得很低:「默子。那些回回都說'設備爭氣'的——都是今天這個?「

  林默的腳步頓了半拍。「不完全一樣。「

  「哪不一樣?「

  「今天,人多。「

  陳志遠站住了。夜風從樓與樓之間穿過來,他看了林默很久,最後把涌到嘴邊的話咽了回去,換成一句:「回去了給我來電。晚了讓小趙送你。「他上車,車門關上,隔著玻璃又看了林默一眼,才打著火走了。

  出租屋裡,燈擰亮,電腦開機。私人分區的雙層驗證走完,第九條記錄在列表最底下落座。

  四要素之外,多貼了一樣東西——那串畸形欄位的欄位特徵:長度邊界值、舊新協議的半身位、空白的簽發標識。最後這一項,他單起了一行:來源未定。預推通道有簽發規程,規程內的批次不該出現空簽名;規程外的批次,不該進得了通道。兩頭都對不上,那就只剩一種解釋:有人對這套規程,熟得過了頭。

  備註欄另有一行:與冷頻段微光暫不合併。那道光是探測的手法,這串欄位是構造的手法,兩種手法湊不進同一雙手——除非,那雙手不止一雙。

  壓測窗口、公開觀摩、飯局、咖啡、南巷的傳話人——這些日期在他腦子裡排成一列,間隔都落在同一旬之內。列得他後頸發涼。他把這一行疑點鎖進記錄,沒有讓它流進任何一份正式報告。

  然後他從鍵盤底下抽出那張便簽。五行啟用條件壓在皮夾里,鍵盤底下這張只寫著一個問題:這一網,值不值得被看見。

  他擰開筆,在問題後面寫下今天的日期,和兩個字:值得。

  寫完,便簽壓回原處。桌角的手機靜著——南巷那位沒有下文,簡訊那邊也沒有回音,三根線都還在半空中懸著。懸著就懸著,他沒有再去碰。

  窗外,凌晨的園區路空著,路燈的間隔把路面切成一段亮、一段暗。他知道從明天起,會有更多的東西順著今晚這七分鐘找過來:甲方的回訪電話,同行的觀摩申請,更高處不知以什麼名義遞來的話。躲是躲不回了。那就把每一次亮燈,都當成有退路的亮燈來做。

  而那串空著簽名的欄位,此刻正安靜地躺在他的私人分區里——它不急。它等的是一個敢在規程之內、卻又偏偏繞過規程的人,自己先露出下一截影子。從今晚起,林默的名字第一次落在了紙面上,也第一次,被某種他還叫不出名字的東西,悄悄納入了持續的監測。這一回,真正的危機不在那七分鐘的紅屏里,而在紅屏熄滅之後才剛剛浮起來的影子。


章節目錄