週一清晨,暴雨如約而至。
林夕站在會議室外的走廊上,透過玻璃幕牆看著外麵被雨水模糊的城市。雨滴瘋狂地砸在窗上,拉出一道道扭曲的水痕,像某種預兆。
會議室裏已經坐了一半的人。長桌盡頭是張總監的位置,還空著。周凱坐在左側第一個位置,正低頭看手機,表情平靜。李工坐在他旁邊,麵前攤著筆記本。右側是產品、運營的代表,蘇晴也在,正和旁邊的人低聲交談。
最讓林夕注意的是長桌另一端的那個男人——張維。投資部的張維,四十出頭,穿著深灰色的POLO衫,沒有打領帶,手裏轉著一支金屬外殼的鋼筆。他看起來很放鬆,甚至有點心不在焉,但林夕注意到,他的目光正緩緩掃過每一個進入會議室的人。
就像在評估什麽。
九點整,張總監到了。他五十歲上下,頭發花白,穿著簡單的襯衫西褲,沒有寒暄,直接落座:“開始吧。”
周凱主持會議:“感謝各位參加。今天的議題是會員積分係統優化方案評審。首先請小林——我們技術部的新同事,也是這次問題分析和方案設計的主要負責人,給大家匯報。”
所有目光投向林夕。
他站起身,走到投影儀前。U盤插入,PPT開啟,第一頁標題:“會員積分係統穩定性優化方案”。
“各位領導、同事,大家上午好。”林夕的聲音比預想的平穩,“我將從三部分匯報:問題分析、優化方案、後續規劃。”
他點開下一頁,是一張簡潔的監控圖表,展示了兌換介麵在上週的錯誤率波動。
“上週四下午,積分兌換功能出現異常。核心表現是資料庫唯一約束衝突,共327次,影響89名使用者,其中41人出現重複扣款。”他直接說出了真實數字。
會議室裏響起輕微的騷動。周凱抬起頭,看了林夕一眼,眼神裏有瞬間的驚訝,但很快恢複平靜。
林夕繼續:“經過分析,問題根因是係統在高並發場景下的兩個設計缺陷疊加:第一,防重複提交機製的時間視窗過長;第二,前端彈窗增加了使用者等待時間,放大了重試概率。”
他完全按照周凱要求的“技術層麵”在講,沒有提曆史,沒有提架構缺陷。
“針對這兩個問題,我們提出三方麵的優化措施。”林夕切換到下一頁,“第一,將防重複提交時間視窗從60秒調整為5秒,立即生效。第二,在後端兌換介麵增加冪等性校驗,確保同一訂單號不會重複處理。第三,優化資料庫連線池配置,減少長尾請求對連線資源的占用。”
每一頁都有詳細的資料支撐、工作量評估、風險分析。方案嚴謹得像一份學術論文。
十五分鍾,匯報結束。
會議室裏安靜了幾秒。張總監開口:“方案很清晰。周凱,技術部評估需要多長時間落地?”
周凱接話:“第一部分今天就可以完成,引數調整已經準備好。第二部分需要一週,我們已經安排了後端人力。第三部分需要三天,運維組配合。”
“使用者補償處理完了嗎?”
“處理完了。”周凱說,“所有受影響使用者都已聯係,完成積分補償。客訴工單全部關閉。”
張總監點點頭,看向蘇晴:“產品側對這個方案有什麽意見?”
蘇晴清了清嗓子:“從產品角度,我們支援優化。但我們希望技術側能給出一個承諾:類似問題在下次大促前徹底解決。我們不能每次都靠事後補償。”
“可以承諾。”周凱立即回應,“我們會在‘雙十一’前完成係統級的並發控製改造。”
看起來一切順利。方案通過,責任明確,時間表清晰。典型的成功評審會。
但林夕知道,這才剛開始。
張維忽然放下了手裏的鋼筆。金屬筆身碰到桌麵,發出清脆的“哢”一聲。
“我有個問題。”他說。
所有人的目光轉向他。張維的聲音不高,但帶著一種天然的權威感:“小林,你剛才說問題根因是兩個設計缺陷疊加。我想確認一下——這兩個缺陷,是這次才發現的,還是之前就存在?”
問題很尖銳。
林夕看了周凱一眼。周凱微微點頭,示意他按準備好的說。
“防重複提交機製的設計,從係統上線初期就是這樣。時間視窗的調整,是在三年前的一次優化中從5秒改為60秒。”林夕如實回答,但沒提是誰改的,“彈窗功能是上週新上線的。”
“所以,”張維身體前傾,“核心缺陷已經存在至少三年。為什麽到現在才暴露問題?”
會議室裏的空氣彷彿凝固了。
周凱接話:“因為之前沒有彈窗這個觸發因素。而且我們的並發量在逐年增長,今年達到了一個新的臨界點。”
“沒有彈窗,就沒有問題?”張維笑了笑,那笑容裏有些冷意,“上週的並發量,對比去年‘雙十一’的峰值,哪個高?”
林夕知道資料:“去年‘雙十一’峰值是上週的三倍。”
“那麽,按照你的說法,去年‘雙十一’就應該出問題,為什麽沒有?”張維追問。
林夕沉默了。他當然知道為什麽——因為去年“雙十一”前,運維組緊急增加了臨時從庫,扛過了峰值。但那是臨時方案,沒有解決根本問題。
而且,那個臨時方案的申請人是陳啟明,批準人是周凱。陳啟明離開後,臨時方案沒有轉為永久方案,因為“成本太高”。
這些他都不能說。
“可能……去年有一些臨時優化措施。”林夕選擇了模糊的回答。
張維不再追問,轉了個方向:“我看了你提供的優化方案,很專業。但我想知道,這些措施能保證同樣的問題不再發生嗎?”
“能大幅降低概率,但不能保證100%。”林夕實話實說,“如果要徹底解決,需要重構整個兌換流程的並發控製,甚至需要考慮分散式事務方案。那需要更大的投入和更長的時間。”
“需要多久?”
“至少三個月,需要專門的專案組。”
張維點點頭,靠回椅背,手指又開始轉那支鋼筆。他沒有再問問題,但剛才那幾個問題,已經像刀子一樣剖開了表麵。
張總監看了看錶:“如果沒有其他問題,今天的評審就到這裏。周凱,你負責方案落地,每週向我匯報進展。散會。”
人們開始收拾東西。林夕拔下U盤,準備離開。周凱走過來,拍拍他的肩:“講得很好。”
語氣平靜,但林夕感覺到那隻手的力量有點重。
就在大部分人走到門口時,張維忽然開口:“小林,留一下,我還有個技術細節想跟你確認。”
已經走到門邊的周凱停住了腳步。李工也回頭看過來。
張總監揮揮手:“你們先走,投資部關心技術細節是好事。”
門關上了。會議室裏隻剩下張維和林夕。
雨聲透過隔音玻璃傳來,悶悶的,像遠方的鼓點。
張維沒有立刻說話。他走到窗邊,看著外麵被雨水洗刷的城市,背影顯得很放鬆。
“雨真大。”他說,像是自言自語。
林夕站著,沒接話。他不知道這個投資部的大佬到底想幹什麽。
“坐。”張維轉過身,指了指椅子,“不用緊張,我就是好奇。你在分析這個問題的時候,有沒有查過係統的曆史?比如三年前的那次事故?”
來了。
林夕心跳加速,但臉上盡量保持平靜:“查過一些檔案。”
“查到什麽?”
“查到那次事故的規模比這次大很多,根本原因也是資料庫單點和並發控製問題。”林夕選擇說公開資訊。
張維笑了笑,那笑容裏有種瞭然:“隻是這些?”
林夕猶豫了。他在判斷:張維是真的想知道,還是在試探?這個人是周凱的盟友,還是……
他想起了照片裏那個站在邊緣的側臉。2018年3月,專案啟動會,張維在場。他是創始團隊成員,早期做技術出身。
那麽,他可能認識陳啟明。他可能知道三年前的真相。
“我還查到,”林夕緩緩開口,“那次事故前,有人提出過完整的擴容方案,但被駁回了。事故後,有人建議徹底重構,但最後選擇了臨時補丁。”
張維臉上的笑容消失了。他盯著林夕,眼神變得銳利:“誰告訴你的?”
“檔案裏有記錄。”
“哪份檔案?”
“《2019年雙十一積分兌換係統故障複盤報告》。”
張維沉默了很久。雨水在窗上瘋狂流淌,會議室裏的光線因此忽明忽暗。
“那份報告,”他最後說,“你應該沒有許可權看到。”
“我申請了許可權,批了。”林夕說。
“誰批的?”
“不知道。係統通知。”
張維又笑了,這次是真正的笑,有點苦澀:“有意思。有人想讓你看到。”
他走回會議桌,拿起那支鋼筆:“小林,你知道在職場裏,有時候真相就像這支筆。你可以用它寫字,也可以用它傷人。關鍵看你怎麽用,為什麽用。”
“您覺得我應該怎麽用?”林夕反問。
“這要問你自己。”張維看著他,“你想保護什麽?又想改變什麽?”
林夕沒有立刻回答。他想保護什麽?使用者的利益?公司的長遠發展?還是僅僅是自己不被當成替罪羊?
他想改變什麽?一個係統的缺陷?一個部門的作風?還是某種更深的、腐爛的東西?
“我不知道。”他誠實地說,“我隻知道問題在那裏,應該被解決。”
“很樸素的答案。”張維點點頭,“但往往樸素的答案最有力。好了,我的問題問完了。你可以走了。”
林夕站起身,走到門口時,身後傳來張維的聲音:
“哦對了,有個人你可能想聯係一下。陳啟明,他現在在新加坡,在一家雲服務公司做架構師。如果你有技術問題想請教,我可以給你他的郵箱。”
林夕轉過身。張維正看著他,眼神裏有一種複雜的情緒——是提醒,也是考驗。
“謝謝。”林夕說。
“不用謝我。”張維揮揮手,“要謝就謝你自己——至少你願意去看那份報告。”
走出會議室時,走廊空無一人。評審會結束了,人們都回到了工位。窗外的雨依然在下,但似乎小了一些。
林夕走回自己的位置,開啟電腦。郵箱裏有一封新郵件,發件人是張維,標題空著,正文隻有一個海外郵箱地址。
他盯著那個地址,沒有立刻儲存。
手機震動,是周凱發來的微信:“來我辦公室。”
短短四個字,沒有任何表情符號。
林夕關掉郵箱,起身。他知道,真正的對話現在才開始。
而窗外的雨,還沒有停。
遠處的天際,隱隱有雷聲滾動。
像某種更巨大的東西,正在逼近。