清晨六點,實驗室的門鎖哢噠一聲被擰開。陳帆推門而入,手指還殘留著鑰匙金屬的涼意。他徑直走向角落的工作台,將背包放下,目光落在那兩個加厚紙箱上。紙箱表麵印著物流公司的標簽,封口膠帶整齊壓緊,搬運途中沒有破損。
他蹲下身,用裁紙刀劃開封條,一層層剝開防靜電泡沫墊。第一台服務器露出銀灰色機箱,前麵板的電源指示燈孔漆黑未亮。他伸手摸了摸側板螺絲,確認原廠封裝未動,才緩緩鬆了口氣。
身後傳來腳步聲。林悅提著一個工具包走進來,發尾微濕,像是剛洗過頭。“我帶了萬用表和備用網線。”她把包放在桌上,挽起袖子,“開始吧。”
陳帆點頭,兩人合力將第一台機器抬上工作台。機箱沉重,底部橡膠墊已經磨損,顯然是出廠前經過嚴格測試的型號。他們戴上防靜電手套,逐一拆卸運輸支架,檢查硬盤托架是否鬆動。當看到主板上的雙電源模塊時,陳帆停頓了一下,低聲說:“這配置比合同裡的高一級。”
“說明他們沒糊弄你。”
他沒回應,轉而去查電源規格。老舊實驗室的插座線路隻能承受兩千瓦負載,而兩台服務器滿載接近一千八。他先接上萬用表,測出電壓穩定在二百二十伏上下,波動不到三伏。確認無誤後,才將第一條電源線插入插座。
啟動第一台服務器時,風扇轉動的聲音比舊設備低沉許多。自檢通過後,屏幕跳出BIOS信息,識彆出SCSI陣列卡和五百一十二兆內存。陳帆插進WindowsNT4.0安裝光盤,重啟進入安裝程序。
係統加載到硬件檢測階段,屏幕突然變藍,錯誤代碼一閃而過。他立刻按下電源鍵強製關機。
“驅動問題?”林悅問。
“主板芯片組不在默認支持列表裡。”他從抽屜取出一張軟盤,上麵貼著手寫標簽,“得手動加載OEM驅動。”
第三次嘗試,安裝程序終於跳過硬件識彆障礙,開始複製文件。整個過程耗時四十七分鐘。期間林悅負責記錄每一步操作時間,連重啟次數都標注清楚。當桌麵圖標出現時,她輕聲說:“成了。”
陳帆沒停下,立刻放入SQLServer7.0光盤。光驅讀取片刻後彈出提示:光盤數據損壞。他皺眉,換上另一張備份盤,用校驗工具掃描完整後重新運行安裝程序。數據庫服務配置完成後,他在命令行輸入測試指令。
屏幕返回一行綠色文字:“ServiceStarted”。
“現在可以遷移數據了。”林悅說。
他打開舊電腦,連接局域網,開始將核心數據庫導出為標準格式。原始數據來自過去三個月的手動錄入與網頁抓取,包含上千家上市公司基本信息、財務摘要和行情快照。Access數據庫結構鬆散,字段索引混亂,直接導入SQLServer會導致查詢效率下降。
“不能硬搬。”他說,“要重建表結構。”
他新建腳本,定義主鍵、外鍵關係,為常用查詢字段添加複合索引。隨後編寫轉換程序,自動清洗空值、統一日期格式,並將文本型數值轉為浮點類型。整個過程持續兩個小時,期間服務器CPU占用一度飆升至百分之九十五,散熱風扇轉速提升,機箱發出輕微嗡鳴。
數據導入完成後,他調用測試模塊,準備運行第一個曆史回測任務——統計1998年第一季度全部A股的周波動率,並篩選出趨勢強度超過閾值的個股。
“以前在筆記本上跑這個,要十分鐘。”林悅站在旁邊看著。
“現在看能壓到多少。”
他點擊執行按鈕。界麵進度條緩慢推進,但遠比以往流暢。日誌窗口實時刷新處理狀態,每秒完成約六十隻股票的數據解析。五分鐘後,結果集生成完畢。
“六十二秒。”她盯著計時器,“快了近十倍。”
陳帆調出資源監控麵板。CPU峰值出現在任務啟動瞬間,隨後回落至穩定區間;內存使用量保持在三百兆左右,磁盤讀寫速率始終在線。係統沒有出現卡頓或超時。
“不隻是速度快。”他指著數據庫連接池參數,“響應延遲從原來的八百毫秒降到四十以內。這意味著我們可以同時處理更多任務。”
林悅翻開記錄本,在“性能對比”一欄寫下新數據。寫完後抬頭:“下一步是不是要把Web服務也遷過來?”
“先不動前端。”他搖頭,“先把底層算力驗證透。今晚我要做一輪壓力測試,模擬同時加載五年行情數據和千股回測。”
他打開任務調度器,設置新的測試流程:從本地緩存中讀取完整曆史K線,逐日計算移動平均、成交量異動和MACD信號交叉點。這是目前係統最複雜的分析模型,過去隻能分批運行。
剛保存配置,門外響起敲門聲。
“彆開門。”陳帆忽然說。
林悅動作一頓。
敲門聲又響了一次,節奏平穩,不是催促。
他起身走到門邊,透過貓眼看了兩秒,拉開門鎖。快遞員站在外麵,手裡拿著一個信封:“您的簽收回執,請簽個字。”
陳帆接過筆,在單據上寫下名字。對方離開後,他關上門,拆開信封。裡麵是一份物流簽收證明,顯示深圳總部已收到第一批打包設備,簽收時間為昨日下午三點十七分。
他把紙片折好放進口袋,回到電腦前。
“他們在等你過去。”林悅說。
“等係統真正跑起來再說。”
他雙擊啟動壓力測試任務。屏幕彈出確認框,提示本次運算預計消耗內存七百兆,持續時間約三小時。他點了確定。
進度條開始移動。服務器風扇轉速再次提升,機箱表麵傳來細微震動。數據庫連接數迅速攀升至二十以上,所有索引均處於活躍狀態。
林悅看了看表:“我去買些吃的,你估計得通宵。”
“嗯。”
她走到門口,手搭上門把時停下:“上次你說,係統的目標是讓人看清市場本來的樣子。”
陳帆望著屏幕,沒有回頭。
“現在它看得更清了。”
門關上後,他調出後台日誌監控界麵。各項指標平穩上升,未出現異常報錯。他打開另一個終端窗口,準備編寫自動化巡檢腳本,用於實時捕捉性能瓶頸。
鍵盤敲擊聲在安靜的房間裡清晰可聞。每隔三十秒,他抬頭看一眼主屏的任務進度。數字不斷跳動,處理完成率從百分之一升至百分之五。
突然,CPU占用率曲線陡然拉升至百分之百,持續超過十秒未回落。他立即切換進程管理器,發現某個後台查詢線程陷入死循環,正瘋狂調用磁盤資源。
他快速輸入中斷指令,終止異常進程。日誌自動記錄故障代碼。重啟任務後,係統恢複穩定。
他盯著那條突兀的峰值曲線,眉頭微皺。這不是硬件問題,而是邏輯缺陷——某個邊界條件未被正確處理。
拿起筆,在便簽紙上寫下:“增加任務超時熔斷機製”。
窗外天色漸亮,陽光斜照進來,落在兩台服務器的前麵板上。指示燈有節奏地閃爍,黃綠交替,像呼吸一般。