六月十二號,凌晨零點四十分。
林遠坐在西廂房的工學椅上,屏幕上攤著張智勇發來的即時通訊系統需求文檔。
一百二十八頁。
凌晨兩點看完。不是看得慢,是每一頁都得停下來想。不是想"怎麼做"——前世做過類似規模的分布式系統,架構思路清清楚楚。他想的是"怎麼藏"。
一億兩千萬行代碼,核心挑戰三個。
第一,消息路由。三千萬註冊用戶,峰值在線三百萬,每秒消息投遞兩百萬條。當前單線程隊列,所有消息排一條隊。去年除夕堆積超兩百萬封,延遲四十分鐘。用戶發的"新年快樂"過了半小時才到——這不是延遲,這是考古。
第二,關係鏈。三千萬用戶,每人平均一百五十個好友。關係鏈本質是有向圖——三千萬節點,四十五億條邊。當前方案數據存資料庫,每次查詢走磁碟。2003年伺服器硬碟隨機讀寫延遲八毫秒,三百萬人同時在線每秒九百萬次關係查詢——七萬二千秒的磁碟等待。數學不會騙人,這架構撐不住。
第三,狀態同步。每次狀態變更要推送給所有在線好友,每秒四千五百萬次推送請求。當前輪詢模式,客戶端每十秒問一次伺服器。四十五億條邊全量輪詢,伺服器不燒才怪。
"小艾,關係鏈怎麼解決?
工作站高級分身沉默兩秒。"本質是大規模圖計算。分布式圖存儲框架要到2010年以後才出現。建議分兩步——短期做分片緩存,熱數據放內存冷數據落磁碟;長期做原生分布式圖存儲引擎。"
"短期方案多久?"
"八千行代碼。小艾五天出框架,宿主三天審核,聯調兩天。十天。"
"長期方案不急,架構預留接口就行。先出短期方案文檔,今天下午給我。"
上午九點。百都對接郵箱收到宏彥的郵件。
附件十二個。搜索日誌三份,索引結構文檔兩份,查詢鏈路分析一份,分詞接口規範一份,集群拓撲一份,性能基準報告兩份,技術備忘錄一份。總大小四十七兆。
正文一段話:"索引結構文檔是核心,建議先看第三十七章的分段合併策略——現在的實現和你的思路有出入。基礎設施層面,百都可以提供三台測試伺服器做聯合開發。"
三台測試伺服器。這不是對待供應商的待遇,是合伙人級別的資源共享。宏彥在用行動表態——他不只是買方案,他在建管線。
林遠回覆:"文檔收到。分段合併策略看完後出對比分析。伺服器感謝,地址收到。"
下午兩點。十二個附件消化了一半。
索引結構第三十七章確實有東西——百都現在的分段合併用固定閾值,索引段超過五百兆觸發合併。但實際數據顯示合併頻率和查詢延遲之間有非線性拐點:太頻繁則寫入放大,太稀疏則查詢段數過多。
"小艾,用百都提供的搜索日誌跑模擬,找最優閾值曲線。"
"預計兩小時。"
他切到筆記本。輕活分身已備好騰迅即時通訊架構文檔初稿——三千六百字,十二張圖。消息路由、關係鏈緩存、狀態推送三個子系統全部覆蓋。
逐頁審。改了七處——優先級衰減曲線調整,關係鏈分片加熱點檢測,狀態推送批量窗口從兩百毫秒改一百五十毫秒。
"按這版出代碼框架。先出消息路由模塊。"
"預計兩千四百行,四小時生成。"
兩條線並行推進。底層共享同一套分布式基礎設施——消息隊列、負載均衡、容錯機制。寫一次,兩邊部署。
這才是真正的複利。每寫一行基礎代碼,兩個項目同時受益。百都的索引優化需要消息隊列,騰迅的即時通訊也需要消息隊列——寫一套,跑兩邊。工作量不是一加一等於二,是一加一等於一點五。
四點鐘,小艾筆記本分身彈了一條建議:"宿主,消息路由模塊的代碼框架里,建議把優先級隊列的實現從數組改成堆結構。查找最大值的複雜度從O(n)降到O(log n),三百萬條消息的排序速度提升十倍。"
"改。所有涉及排序的模塊都檢查一遍,統一用堆。"
"收到。已同步修改十七處。"
晚上七點。母親送來的晚飯,紅燒排骨配米飯。林遠端碗在西廂房吃,眼睛沒離屏幕。
母親在門口看了一眼滿牆的架構圖和嗡嗡作響的伺服器,沒說話。收了碗,放了一瓶礦泉水在桌上就走了。
從小到大她都是這樣。不問你忙什麼,只保證你餓不著。
晚上十一點。
模擬結果出來了。最優閾值不是固定值,而是一條隨查詢量波動的動態曲線——低峰期放寬到八百兆減少寫入放大,高峰期收緊到三百兆保證查詢速度。替代固定閾值後,查詢延遲降低百分之二十三,寫入放大減少百分之三十一。
"整理成文檔,明天發宏彥。"
正要繼續審騰迅代碼,QQ彈了消息。
不是張智勇。是方河通過張智勇轉過來的一條消息。
同時守望技術聯繫人郵箱也收到一封郵件。方河。
"守望先生,冒昧打擾。評審會上您的消息隊列方案我反覆看了三遍。關於優先級衰減模型我有一個疑問——優先級反轉場景下,如果高低優先級消息產生依賴鏈,標準解法是優先級繼承協議。但分布式環境下狀態同步成本極高,您方案里似乎迴避了這個問題。是有意為之,還是有別的思路?"
林遠盯著屏幕,沒有立刻回復。
方河在試探。
這不是普通技術提問。他在用具體細節驗證——守望到底是紙上談兵的理論家,還是真正做過大規模系統的工程師。優先級繼承協議是作業系統課的標準內容,但能精準指出"分布式環境下狀態同步成本極高"這個矛盾的,全國不超過二十個人。
方河是其中之一。
"小艾,方河什麼水平?"
"從提問質量看,分布式實戰經驗至少五年以上。能在這個時間點指出優先級繼承協議的分布式局限,不僅懂理論,還踩過坑。"
林遠閉了幾秒眼。張智勇說過——"完全不見面不現實。"
才過了兩天。方河已經開始用技術郵件試探了。這個人的嗅覺比獵犬還靈。
必須回復。不能迴避——迴避等於心虛。但也不能太完美。一個2003年的高手可以很聰明,但不該對分布式優先級繼承了如指掌。
花了十五分鐘寫回復。
"方河你好。優先級繼承在單機下確實是標準解法。但你說得對,分布式環境下狀態同步成本太高。我的思路是換一種方式——不做優先級繼承,做消息分級隔離。不同優先級走完全獨立的隊列通道,物理隔離而非邏輯繼承。從根本上消除優先級反轉的可能,代價是隊列數量增加三倍。"
檢查一遍。技術深度剛好——展示了解決思路,沒暴露不該知道的東西。"消息分級隔離"在2003年不是新概念,但很少有人想到用在消息隊列優先級管理上。分寸感剛好。
點擊發送。
打開筆記本,在"騰迅"欄加了一行——
"方河直接來信試探。技術水平極高。遲早會猜出什麼。回復已做控制,但不能完全消除風險。時間窗口比預想更短。"
窗外老槐樹葉子在夜風裡沙沙響。
十七歲的身體,二十六年的記憶,三個巨頭的技術命脈。
盤子越下越大了。