六月十三號,早上六點十五分。
西廂房的工作站跑了一整夜,風扇嗡嗡聲沒停過。林遠從工學椅上站起來,活動了一下僵硬的脖子。
小艾筆記本分身已經把百都索引優化方案整理好了——動態閾值曲線替代固定閾值,查詢延遲降低百分之二十三,寫入放大減少百分之三十一。文檔四十七頁,包含三組對比數據和完整的參數調優建議。
逐頁看完。改了兩個措辭——把"建議"改成"方案",把"可以考慮"改成"建議實施"。給宏彥的東西不能太客氣。客氣了,對方會低估你的價值。
七點零三分,郵件發出。
八點四十分,宏彥回了。
"方案收到了。動態閾值曲線的思路很巧妙——我們沒有跑過這個方向的模擬,但你用的搜索日誌是我們自己的,結論可信度很高。明天安排聯合測試?集群團隊下午有空。"
聯合測試。從"提供方案"升級到"聯合開發",宏彥在用速度表態。
回覆:"沒問題。測試伺服器地址麻煩再確認一下。"
上午十點。切換騰迅線。
台式機分身的小艾已經完成了消息路由模塊代碼框架——昨晚預計四小時,實際用了四個半小時。兩千四百行代碼,結構清晰,注釋完整。已經傳到工作站。
林遠坐在西廂房,開始逐行審查。
前面一千八百行沒問題。邏輯嚴密,邊界條件處理得當。直到看到關係鏈緩存模塊的故障切換邏輯——手指停住了。
不對。
緩存節點故障,切換到備用節點時,備用節點需要從資料庫全量重載關係鏈數據。這個加載過程中,所有查詢會穿透緩存直接打到資料庫。三百萬條關係數據,2003年的伺服器硬碟,加載時間接近三秒。
三秒。
騰迅的峰值在線三百萬,三秒內的查詢請求全部落到資料庫——資料庫瞬間被打穿。如果同時有兩個節點故障,就是兩次打穿。連鎖雪崩。
"小艾,這裡有問題。"
"宿主說得對。這個故障切換邏輯是從小艾的分布式系統經驗里推導的。2006年以後的系統,內存充裕、網絡延遲低,全量重載不是問題。但2003年的硬體環境……磁碟隨機讀寫延遲高了將近二十倍。"
"能改嗎?"
"改緩存預加載邏輯,用增量分片替代全量加載。節點故障時先加載熱數據——最近七天有互動的關係鏈,冷數據後台異步補充。冷啟動時間從三秒壓到兩百毫秒以內。"
"代碼量呢?"
"關係鏈緩存模塊推倒重寫。總代碼量從兩千四百行增加到三千一百行。預計額外需要六小時。"
"改。"
這種坑,2003年沒有任何工程師能憑經驗避開。沒有人經歷過三千萬用戶規模的即時通訊系統。
這就是重生者最大的困境——你知道答案,但你不能用答案。你得假裝自己一步步走到了答案面前。
下午一點。母親送來的炸醬麵在桌角涼透了。
方河的第二封郵件到了。
比第一封更直接。
"守望先生,消息分級隔離的思路確實巧妙。但我注意到一個細節——您在回覆中使用的措辭是'物理隔離而非邏輯繼承'。這個表述非常精確。我想知道,您是在什麼場景下形成這個認知的?是理論上推導的,還是實際踩過坑?"
林遠盯著屏幕,慢慢靠回椅背。
方河不是在問技術了。他在畫守望的畫像。
一個工程師的措辭習慣暴露的是思維方式。"物理隔離"這個詞,只有真正被優先級反轉問題折磨過的人才會脫口而出。理論派會說"邏輯解耦",工程派才會說"物理隔離"。
方河在通過這些細節推斷——守望到底是誰,做過什麼規模的項目,踩過什麼級別的坑。畫像一旦足夠清晰,身份就呼之欲出。
花了十分鐘。寫了一條非常克制的回覆——
"工程直覺。做過嵌入式系統的人都知道,資源有限的時候,隔離比繼承更可靠。大規模系統也是一樣——簡單可靠的方案,往往比精巧的方案活得久。"
檢查了三遍。每一句話都成立,但每一句話都沒有給出任何可以追溯到具體身份的信息。
點擊發送。
下午三點半。QQ又響了。
不是方河。是蘇明遠。
"守望哥,忙不?WatchGuard這邊有個事。"
"說。"
"一個金融行業客戶部署企業版,反饋了一個邊界情況。並發連接超過五千的時候,掃描引擎的規則匹配會超時。我查了一天,初步判斷是正則回溯深度過大導致的。你之前寫過一篇內部文檔提到非回溯正則的優化思路,我試著改了一版,性能提升了百分之四十,但還有尾巴。"
林遠的手指在鍵盤上停了兩秒。
並發超過五千就超時——這不是和騰迅消息路由的問題在同一個維度上嗎?都是大規模並發下的性能瓶頸。
"把復現日誌發我看看。"
"好。另外還有個事——"蘇明遠的語氣忽然來了興致,"我最近在研究那個正則回溯的問題,順便查了一些網絡安全方向的文獻,發現中科院軟體所的周明哲教授上個月剛發了一篇論文,講的是基於流量特徵識別異常行為。我看了摘要,發現和WatchGuard的掃描邏輯其實是同一個底層思想——在攻擊者利用漏洞之前就提前封堵。你說巧不巧?"
林遠的手指停在鍵盤上。
周明哲。
他當然知道周明哲。中科院軟體所,密碼學與網絡安全方向。見過好幾次面了,前幾次去中科院交流的時候還一起吃過飯。這個人學術水平極高,嗅覺靈敏得可怕。
蘇明遠不知道周明哲和守望認識。他只是在技術研究中偶然發現了周明哲的論文,覺得和WatchGuard有關聯。
但如果蘇明遠順著這個方向繼續深挖,把WatchGuard的具體實現細節和周明哲的研究做對比——周明哲會發現WatchGuard的核心架構和自己的研究方向高度重合。然後他會好奇:守望是誰?然後他可能會和林遠提起這件事。
而林遠認識周明哲,周明哲也認識守望。這兩條線一旦在周明哲腦子裡交叉,一切全完了。
"明遠。"林遠打字的速度比平時慢了一倍,確保每一個字都不帶任何情緒,"周教授的論文方向確實有意思。但學術和工程是兩回事,不建議混在一起想。WatchGuard的技術問題我晚上幫你看,周教授那邊你自己把握分寸。"
"嗯,你說得對。那日誌我發你郵箱。"
關掉聊天窗口。
手心微微出汗。
傍晚。去了趟楠書房。
後海北沿的老院子在夕陽下很安靜。老槐樹的影子斜斜地投在青磚地上,葉子被晚風吹得沙沙響。
林遠坐在廊下的石階上,沒有看電腦。
腦子裡在過今天的幾件事。
方河的畫像。蘇明遠的周明哲。騰迅代碼的致命缺陷。百都的聯合測試。
四條線同時推進,每一條都在加速。每一條都容不得差錯。
小艾在腦海里輕聲說:"宿主,《誅仙》今天更新到了一百二十一萬字。榕樹下評論區有讀者在猜碧瑤的結局。滄浪那邊存稿八萬七千字,夠撐一周。"
"嗯。定時發布別斷。"
"另外,北達計算機系的通知——下周開始期末考試周,李教授發郵件提醒您準備下學期的研究方向選擇。"
研究方向選擇。李教授和王教授兩個導師,本質上是在選陣營——系統架構還是人工智慧。
"不急。先把騰迅的代碼審完。"
晚上十一點。
消息路由模塊完成了徹底重構。小艾工作站分身花了七個小時——比預計多了一個小時,因為重寫緩存層時發現了一個隱藏的數據競爭問題。
最終代碼三千一百行。逐行審查完畢。每一行都經得起推敲。
代碼存進工作站的加密分區。明天發給張智勇。
打開筆記本。在"騰迅"欄下加了一行——
"消息路由致命缺陷已修復。故障切換邏輯推倒重寫。"
翻到"風險"頁。把原來"方河直接來信試探"那段話用筆劃掉,重新寫——
"方河第二封。措辭更進了一步。他在畫我的畫像。不能給他更多素材。"
另起一行——
"蘇明遠研究正則回溯時發現了周明哲的論文,覺得和WatchGuard技術方向有關聯。周明哲和我熟,如果他把WatchGuard實現和自己的研究對比,遲早會注意到守望這個ID。必須限制和蘇明遠討論前沿技術方向的頻率。他是好人,但好人有時候比壞人更危險——因為好人不會懷疑自己在窺探什麼。"
窗外老槐樹的影子在月光下輕輕搖晃。
遠處傳來救護車的聲音——北京還沒有徹底摘掉SARS的帽子。六月二十四號,還有十一天。
林遠合上筆記本。
十一天。三件事。百都聯合測試。騰迅代碼交付。方河的第三次來信——如果還有第三次的話。
盤子越來越大了。而端著盤子的人,只有十七歲。