週五下午,林夕提交了使用者服務分庫分表方案的終稿。
老陳隻看了十分鍾就通過了:“沒問題,下週一開工。你這效率可以,我還以為要拖到下週三。”
“加了兩天班。”林夕說。他沒說加班的另一部分時間是在研究技術風險審計框架,也沒說那輛神秘的黑色轎車和匿名郵件。
“辛苦了。”老陳拍拍他的肩,“下週一你還要去技術委員會那邊吧?楊帆說了,每週一你去三十樓工作。”
“嗯。”
“好好幹,這是個機會。”老陳頓了頓,“不過也小心點,技術委員會那幫人,個個都是人精。”
林夕點頭。他當然知道。
下班前,他收到了技術委員會秘書處的正式郵件,確認了下週一的工作安排:上午九點,三十樓B會議室,與CTO助理對接,開始梳理公司技術事故案例庫。
郵件抄送了徐遠峰、楊帆,還有周凱。
周凱的名字出現在抄送欄裏,讓林夕的手指在滑鼠上停頓了一下。然後他關掉郵箱,收拾東西準備離開。
走到電梯口時,小雨追了上來:“林夕,週末有空嗎?我們產品組幾個同事約了去爬山,一起?”
“這週末要回家。”林夕說,“下次吧。”
“好吧。”小雨有點失望,“那你路上小心。”
電梯來了,裏麵站著張維。他看到林夕,點點頭:“下班了?”
“嗯。張總還沒走?”
“開了個會,剛結束。”張維按了一樓,“回家?”
“嗯。”
電梯下行。密閉空間裏,張維忽然說:“技術風險審計的事,聽說了。徐總親自點的你。”
“是,週一去報到。”
“好事。”張維笑了笑,“不過,審計這種事情,難免要翻舊賬。翻舊賬就容易得罪人。”
林夕沒說話。
“我給你的建議是:專注於建立框架和方**,具體案例的分析,讓委員會的人自己去做。”張維說,“你隻提供工具,不提供結論。”
這是個聰明的建議。工具是中性的,結論是有立場的。
“我會考慮的,謝謝張總。”
電梯到達一樓。門開了,大廳裏人來人往。
“對了,”張維在走出電梯前回頭,“最近小心點,別加班太晚。聽說這一帶晚上不太安全。”
說完,他就走了。
林夕站在原地。張維的提醒,和那輛黑色轎車,和匿名郵件,連成了一條模糊的線。
有人在盯著他。不止一個人。
他走出大廈,下意識地看向街道對麵。今天那裏沒有車,隻有幾個等公交的人。
但他還是繞了遠路,從另一個地鐵口進去。在站台上,他仔細觀察周圍,沒發現異常。
回到出租屋,他先檢查了門鎖——完好。進屋後,他沒有開大燈,隻開了桌燈。然後,他做了一件自己都覺得有點誇張的事:用手機攝像頭,仔細檢查了房間的各個角落。
沒有攝像頭,沒有竊聽器。
他鬆了口氣,又覺得自己有點神經質。
週六,他回了家。三小時的車程,他睡了半路。醒來時,大巴已經駛入熟悉的縣城街道。路邊的梧桐樹,街角的小賣部,廣場上的老年舞蹈隊——一切都是記憶裏的樣子。
父母很高興,做了滿滿一桌菜。父親問他工作怎麽樣,他說“挺好的,領導重視”。母親問他有沒有交女朋友,他說“太忙了,沒時間”。
飯桌上,父親喝了點酒,話多了起來:“小夕,你在外頭工作,要記住三件事:第一,對得起良心;第二,學真本事;第三,別得罪小人。”
“怎麽算小人?”林夕問。
“小人就是那些當麵一套、背後一套,為了自己利益什麽都幹得出來的人。”父親說,“你爺爺當年在單位,就是太耿直,得罪了小人,最後被排擠。但他從沒後悔過,他說‘人活著,總有些事不能退’。”
母親瞪了父親一眼:“你跟孩子說這些幹嘛。”
“該說。”父親放下酒杯,“小夕,我知道你現在在大公司,環境複雜。但再複雜,道理是一樣的:做好自己的事,守住自己的底線。其他的,隨它去。”
林夕點頭:“我記住了。”
晚上,他躺在自己從小睡到大的床上,看著天花板上熟悉的水漬。這裏很安全,很踏實。沒有匿名郵件,沒有黑色轎車,沒有複雜的職場博弈。
但明天,他還要回到那個世界。
週日晚上,他坐最後一班車回城。大巴駛入市區時,霓虹漸次亮起,像一張巨大的網,網住了所有追逐夢想和生存的人。
回到出租屋已經十一點。他簡單洗漱,準備睡覺時,手機震動。
是楊帆,直接打來的電話。
“林夕,睡了嗎?”
“還沒,楊老師。”
“有件事要跟你說。”楊帆的語氣很嚴肅,“你週五提交的分庫分表方案,今天下午被人匿名舉報了,說存在重大安全隱患。”
林夕心裏一緊:“什麽隱患?”
“舉報信說,你的分片演演算法存在嚴重的資料傾斜風險,會導致某個分片過熱,最終引發整個係統崩潰。”楊帆頓了頓,“舉報信直接發給了技術委員會,抄送了徐總和周凱。”
“我的演演算法是標準的取模分片,不會傾斜……”
“我知道。”楊帆打斷他,“但舉報信附了一份所謂的‘壓力測試報告’,顯示在某種特定使用者ID分佈下,80%的請求會落到同一個分片。”
“使用者ID是隨機的……”
“舉報信說,如果使用者ID生成演演算法有缺陷,或者被惡意利用,就會導致這種分佈。”楊帆說,“林夕,這是個很專業的攻擊點。寫信的人懂技術,而且研究過你的方案。”
林夕感到後背發涼:“誰舉報的?”
“匿名。用的是臨時郵箱。”楊帆說,“周凱剛才給我打電話,說這件事影響很壞,建議暫停你的分庫分表改造,重新評審方案。”
“他要把我從專案裏調走?”
“沒那麽直接,但效果差不多。”楊帆說,“明天週一,你去技術委員會的時候,可能會被問起這件事。你要做好準備。”
“我該怎麽說?”
“拿出資料,證明你的方案沒問題。”楊帆說,“我已經讓老陳幫你調取使用者ID的曆史分佈資料,證明是均勻的。但更重要的是,你要解釋清楚為什麽舉報信的說法不成立。”
“我明白。”
“還有,”楊帆停頓了一下,“這件事可能隻是個開始。有人想搞你,你要小心。”
電話結束通話。
林夕坐在黑暗裏,很久沒動。
窗外,城市的夜晚從不真正安靜。遠處有警笛聲,近處有車輛駛過的聲音,樓上傳來隱約的音樂聲。
但這些聲音都模糊了,隻有心跳聲在耳邊轟鳴。
他開啟電腦,重新看自己的分庫分表方案。他寫了二十頁,詳細說明瞭分片演演算法、擴容方案、資料遷移策略。每一頁都是他反複推敲過的。
現在,這篇心血之作,成了攻擊他的武器。
《孫子兵法·謀攻篇》說:“知彼知己,百戰不殆。”
他現在知道“彼”在暗處,知道他懂技術,知道他熟悉公司的流程,知道他善於利用規則打擊對手。
但“彼”是誰?周凱?還是周凱指使的某人?或者是完全不相幹的人?
他不知道。
他隻知道,自己必須應戰。
他開啟使用者ID的曆史資料——老陳已經發過來了。十萬個樣本,分佈確實均勻。他又寫了個指令碼,模擬了各種可能的惡意ID生成策略,測試分片均勻性。
結果證明,除非有人能控製使用者註冊的ID生成演演算法(這不可能),否則不可能造成嚴重傾斜。
資料在手,他稍微安心了一些。
但問題不在這裏。
問題在於:為什麽有人要這麽做?
隻是為了拖延專案進度?還是為了打擊他這個人?還是為了別的?
他想起張維的提醒:“審計這種事情,難免要翻舊賬。翻舊賬就容易得罪人。”
技術風險審計還沒開始,隻是公佈了名單,攻擊就來了。
這說明,有人怕了。
怕什麽?怕他翻舊賬?怕他查出什麽?
林夕的腦海裏閃過那些2019年之後質量下降的事故報告,閃過積分係統那些被掩蓋的問題,閃過周凱溫和笑容下的計算。
他忽然明白了。
有些人,有些事,經不起審計。
而他,被徐遠峰選中去做審計的人,成了某些人的眼中釘。
所以,在他真正開始翻舊賬之前,先給他一個下馬威:用技術手段質疑他的專業能力,讓他自顧不暇。
這招很毒。
如果他不能自證清白,他在技術委員會的信任度會大打折扣,審計工作可能被邊緣化。
如果他證明瞭自己,也會消耗大量精力,耽誤審計進度。
無論哪種結果,攻擊者都贏了。
林夕關掉電腦,走到窗邊。
夜很深了。對麵的樓還有幾盞燈亮著,像黑暗中不肯閉上的眼睛。
他看著那些燈光,忽然想起祖父教他下棋時說的話:
“小夕,你看,棋局裏最危險的時候,不是被將軍,而是看起來風平浪靜,但你的每一步都被對方算死了。”
他現在就在這樣的棋局裏。
對方在暗處,算著他的每一步。
而他,才剛剛看見棋盤。
但他不能退。
就像父親說的:“人活著,總有些事不能退。”
他回到桌前,開啟一個新的檔案。標題:“關於分庫分表方案被舉報問題的澄清說明”。
開始寫。
寫資料,寫演演算法,寫論證。
寫到淩晨三點,他完成了十頁的澄清報告,附上了所有的測試資料和程式碼。
然後,他做了三件事:
第一,把報告發給楊帆、老陳,抄送技術委員會。
第二,把所有的原始資料、程式碼、郵件記錄,備份到雲端和U盤。
第三,在備忘錄裏記下今天發生的一切,包括時間、人物、事件。
做完這些,天快亮了。
他躺到床上,閉上眼睛。
但睡不著。
腦海裏是明天可能麵對的場景:技術委員會的質詢,周凱可能的發難,徐遠峰的審視。
他必須應對。
而且,要應對得漂亮。
因為從明天起,
這場暗處的戰爭,
正式開始了。
而他,
既是獵物,
也是獵人。
窗外的天色漸漸泛白。
新的一週,
新的戰場。
他深吸一口氣,
睜開眼睛。
準備好了。