第212章 Nexus項目
早上八點十分,艾瑞克推開凌雲辦公室的門時,凌雲已經站在白板前。
白板上貼了三張列印紙,左邊一張是昨天董事會通過的項目提案封面,中間一張畫著粗略的分層架構圖,右邊一張是空白的日程表。白板本身用黑色馬克筆寫了幾個詞:事件驅動、異步、非阻塞。
「早。」艾瑞克說,手裡拿著筆記本和一支萬寶龍鋼筆。
「早。」凌雲沒回頭,繼續在白板上畫一個流程圖。箭頭方框,連接線筆直。畫完最後一筆,他才轉身,從桌上拿起兩份裝訂好的文件,遞一份給艾瑞克。
文件封面寫著:「項目代號 Nexus – 技術架構 v0.1」。
「坐。」凌雲指向辦公桌對面的椅子。
艾瑞克坐下,翻開文件。第一頁是目錄:架構概覽、核心模塊、性能指標、開發階段、團隊組成。他快速翻到架構概覽,眼睛掃過那些圖表。
凌雲走到白板前,敲了敲中間那張架構圖。
「昨天董事會通過了,」他說,「現在進入執行階段。你是技術負責人。」
艾瑞克點頭,沒抬頭,還在看文件。
「有問題現在問。」凌雲說。
艾瑞克翻到性能指標頁,手指點在一行數字上:「五萬並發連接。測試環境怎麼模擬?」
「租用機房,」凌雲說,「找ISP拉專線,用腳本模擬連接。初期測試可以降低標準,但最終驗收必須達到。」
「內存占用,」艾瑞克繼續,「每個連接不超過10KB。Apache現在平均是150KB。十倍差距。怎麼做到?」
「連接池復用,」凌雲走到白板前,在空白處畫了個簡單的內存布局,「不每個連接單獨分配完整結構體,用共享內存區域,工作進程通過指針引用。事件通知用epoll,避免頻繁上下文切換。」
艾瑞克在筆記本上記下幾個詞:連接池、共享內存、epoll。他抬頭:「epoll是Linux特有的。FreeBSD用kqueue,Solaris用/dev/poll。我們要做多平台支持?」
「項目只支持星辰系統,」凌雲說,「優先保證我們的生態,其他平台後續考慮。」
「內核需要改多少?」
「不多。」凌雲走回辦公桌,從抽屜里拿出一疊列印紙,上面是手繪的內核調用圖,「主要在網絡棧,優化TCP連接建立和關閉的路徑,減少鎖競爭。還有事件通知機制的封裝,提供統一API。」
艾瑞克接過那疊紙,翻看。圖上標註了函數名和參數,有些地方用紅筆圈出,寫了優化建議。他看了兩分鐘,然後放下。
「時間表,」他說,「三個月出可用版本。按這個複雜度,至少需要十五個全職工程師。我現在團隊抽不出這麼多人。」
「新招。」凌雲從桌上拿起另一份文件,是獵頭公司提供的候選人名單,「已經讓馬克聯繫了。下周一安排面試,你主面。」
艾瑞克看了眼名單,大約二十個人,來自Sun、IBM、網景,甚至有一個來自微軟的IIS團隊。他抬眉:「能挖動?」
「錢給夠。」凌雲說,「項目優先級最高,預算充足。」
艾瑞克合上文件,身體往後靠了靠:「項目目標清楚了。但我想知道,為什麼是現在?Apache還能撐一段時間。我們完全可以等市場更成熟再介入。」
凌雲沒有馬上回答。他走到窗前,拉開百葉窗。
「星際爭霸,」凌雲說,背對著艾瑞克,「昨天一天,星火網咖的伺服器日誌顯示,Apache崩潰了三次。高峰期在線一萬兩千人,響應延遲超過兩秒。」
艾瑞克沒說話。
「星語即時通信,」凌雲繼續說,「上周用戶突破六十萬。我們的後台用Apache搭的,現在每晚上線高峰,CPU就飆到90%。運維半夜被叫起來重啟。」
他轉過身,走回白板前,用紅筆在「五萬並發連接」下面劃了一道橫線。
「需求不是未來式,」凌雲說,「是現在進行時。暴雪下周要找我們談戰網擴容,雅虎那邊也在問,他們的新聞站點能不能用我們的方案。市場在等,但我們沒產品。」
艾瑞克沉默了幾秒,然後點頭:「明白了。」
他打開筆記本新的一頁,寫下日期:1997年12月12日。然後抬頭:「架構我基本同意。但有個技術點要確認——你寫的『主進程-工作進程模型』,工作進程之間完全獨立?」
「對。」
「那共享配置怎麼同步?如果運行時修改配置,難道每個工作進程都重新解析一遍?」
「主進程負責配置解析,」凌雲走回白板,在架構圖旁邊畫了一個簡單的進程關係圖,「工作進程啟動時,從主進程繼承配置。熱更新時,主進程重新解析配置,然後通知工作進程逐步重啟。舊進程處理完現有連接後再退出,新進程用新配置。」
「平滑重啟。」
「對。」
「信號機制?」
「SIGHUP觸發重載,SIGTERM優雅關閉,SIGQUIT快速關閉。」
艾瑞克快速記錄。他的筆跡工整,每個技術點都編號。「內存管理模塊,」他邊寫邊說,「需要專門的人。內核組抽不出。」
「新招的人里有一個專攻內存優化,」凌雲說,「從IBM來的,以前做資料庫緩存層,面試時你重點問。」
「好。」
白板上貼了三張列印紙,左邊一張是昨天董事會通過的項目提案封面,中間一張畫著粗略的分層架構圖,右邊一張是空白的日程表。白板本身用黑色馬克筆寫了幾個詞:事件驅動、異步、非阻塞。
「早。」艾瑞克說,手裡拿著筆記本和一支萬寶龍鋼筆。
「早。」凌雲沒回頭,繼續在白板上畫一個流程圖。箭頭方框,連接線筆直。畫完最後一筆,他才轉身,從桌上拿起兩份裝訂好的文件,遞一份給艾瑞克。
文件封面寫著:「項目代號 Nexus – 技術架構 v0.1」。
「坐。」凌雲指向辦公桌對面的椅子。
艾瑞克坐下,翻開文件。第一頁是目錄:架構概覽、核心模塊、性能指標、開發階段、團隊組成。他快速翻到架構概覽,眼睛掃過那些圖表。
凌雲走到白板前,敲了敲中間那張架構圖。
「昨天董事會通過了,」他說,「現在進入執行階段。你是技術負責人。」
艾瑞克點頭,沒抬頭,還在看文件。
「有問題現在問。」凌雲說。
艾瑞克翻到性能指標頁,手指點在一行數字上:「五萬並發連接。測試環境怎麼模擬?」
「租用機房,」凌雲說,「找ISP拉專線,用腳本模擬連接。初期測試可以降低標準,但最終驗收必須達到。」
「內存占用,」艾瑞克繼續,「每個連接不超過10KB。Apache現在平均是150KB。十倍差距。怎麼做到?」
「連接池復用,」凌雲走到白板前,在空白處畫了個簡單的內存布局,「不每個連接單獨分配完整結構體,用共享內存區域,工作進程通過指針引用。事件通知用epoll,避免頻繁上下文切換。」
艾瑞克在筆記本上記下幾個詞:連接池、共享內存、epoll。他抬頭:「epoll是Linux特有的。FreeBSD用kqueue,Solaris用/dev/poll。我們要做多平台支持?」
「項目只支持星辰系統,」凌雲說,「優先保證我們的生態,其他平台後續考慮。」
「內核需要改多少?」
「不多。」凌雲走回辦公桌,從抽屜里拿出一疊列印紙,上面是手繪的內核調用圖,「主要在網絡棧,優化TCP連接建立和關閉的路徑,減少鎖競爭。還有事件通知機制的封裝,提供統一API。」
艾瑞克接過那疊紙,翻看。圖上標註了函數名和參數,有些地方用紅筆圈出,寫了優化建議。他看了兩分鐘,然後放下。
「時間表,」他說,「三個月出可用版本。按這個複雜度,至少需要十五個全職工程師。我現在團隊抽不出這麼多人。」
「新招。」凌雲從桌上拿起另一份文件,是獵頭公司提供的候選人名單,「已經讓馬克聯繫了。下周一安排面試,你主面。」
艾瑞克看了眼名單,大約二十個人,來自Sun、IBM、網景,甚至有一個來自微軟的IIS團隊。他抬眉:「能挖動?」
「錢給夠。」凌雲說,「項目優先級最高,預算充足。」
艾瑞克合上文件,身體往後靠了靠:「項目目標清楚了。但我想知道,為什麼是現在?Apache還能撐一段時間。我們完全可以等市場更成熟再介入。」
凌雲沒有馬上回答。他走到窗前,拉開百葉窗。
「星際爭霸,」凌雲說,背對著艾瑞克,「昨天一天,星火網咖的伺服器日誌顯示,Apache崩潰了三次。高峰期在線一萬兩千人,響應延遲超過兩秒。」
艾瑞克沒說話。
「星語即時通信,」凌雲繼續說,「上周用戶突破六十萬。我們的後台用Apache搭的,現在每晚上線高峰,CPU就飆到90%。運維半夜被叫起來重啟。」
他轉過身,走回白板前,用紅筆在「五萬並發連接」下面劃了一道橫線。
「需求不是未來式,」凌雲說,「是現在進行時。暴雪下周要找我們談戰網擴容,雅虎那邊也在問,他們的新聞站點能不能用我們的方案。市場在等,但我們沒產品。」
艾瑞克沉默了幾秒,然後點頭:「明白了。」
他打開筆記本新的一頁,寫下日期:1997年12月12日。然後抬頭:「架構我基本同意。但有個技術點要確認——你寫的『主進程-工作進程模型』,工作進程之間完全獨立?」
「對。」
「那共享配置怎麼同步?如果運行時修改配置,難道每個工作進程都重新解析一遍?」
「主進程負責配置解析,」凌雲走回白板,在架構圖旁邊畫了一個簡單的進程關係圖,「工作進程啟動時,從主進程繼承配置。熱更新時,主進程重新解析配置,然後通知工作進程逐步重啟。舊進程處理完現有連接後再退出,新進程用新配置。」
「平滑重啟。」
「對。」
「信號機制?」
「SIGHUP觸發重載,SIGTERM優雅關閉,SIGQUIT快速關閉。」
艾瑞克快速記錄。他的筆跡工整,每個技術點都編號。「內存管理模塊,」他邊寫邊說,「需要專門的人。內核組抽不出。」
「新招的人里有一個專攻內存優化,」凌雲說,「從IBM來的,以前做資料庫緩存層,面試時你重點問。」
「好。」