第213章 項目安排
九點整,辦公室門被敲響。菲奧娜探頭進來:「老闆,要咖啡嗎?」
「兩杯,黑咖啡。」凌雲說。
菲奧娜端進來兩個白色馬克杯,放下後離開,帶上了門。
凌雲端起咖啡喝了一口,沒加糖也沒加奶。艾瑞克也喝了一口,然後繼續翻看技術文件。
「開發階段分三期,」凌雲走到白板前,指著右邊那張空白日程表,「第一期,三個月,出核心框架。支持基本的HTTP請求處理,靜態文件服務,達到一萬並發目標。」
他在日程表上寫下:
Phase 1 (12/15-3/15): 核心框架
- 事件驅動模型
- 基礎HTTP解析
- 靜態文件模塊
- 1萬並發達標
「第二期,」凌雲繼續寫,「兩個月,完善功能。加反向代理、負載均衡、日誌模塊,達到五萬並發。」
Phase 2 (3/16-5/15): 功能完善
- 反向代理
- 負載均衡
- 訪問日誌
- 5萬並發達標
「第三期,一個月,優化和穩定。壓測,調優,文檔,準備發布。」
Phase 3 (5/16-6/15): 優化發布
- 性能調優
- 穩定性測試
- 文檔編寫
- 正式發布
艾瑞克看著日程表,眉頭微皺:「時間很緊,尤其是第一期,三個月要從零搭出框架,還要達到一萬並發。光事件驅動模型和HTTP解析,就至少需要兩個月。」
「所以需要抓緊時間。」凌雲說,「項目組實行彈性工作制,但核心期晚上和周末可能要搭進去,獎金和期權會體現。」
艾瑞克在筆記本上計算了一下:「如果按每天十小時,每周六天算……技術上可能,但人會很累。」
「累就累三個月。」凌雲說,「做成了,這個產品能定義未來十年的Web伺服器市場。做不成,我們可能錯過一個關鍵機會窗口。」
艾瑞克沒再反駁。他在日程表旁邊寫下幾個關鍵日期:12/20 團隊組建完成、1/15 原型演示、2/28 一期驗收。
「團隊組成,」凌雲回到辦公桌,打開筆記本電腦,調出一張組織結構圖,「總共十人。你負責整體架構和核心模塊。下面分四個小組。」
投影儀亮起,屏幕上顯示:
Nexus 項目組 (20人)
├── 架構設計 (艾瑞克 + 1)
├── 事件與網絡組 (8人)
├── HTTP與模塊組 (8人)
├── 測試與工具組 (2人)
「事件與網絡組負責事件驅動模型、TCP連接管理、內存池。」凌雲用雷射筆點著屏幕,「HTTP組負責協議解析、模塊接口、反向代理。測試組寫壓測腳本、做性能分析、輔助調試。」
艾瑞克盯著屏幕看了會兒:「人員分配你有建議嗎?」
「有。」凌雲切換幻燈片,顯示每個人名和背景,「事件組建議讓戴維手下那個俄羅斯工程師負責,安德烈。他寫過底層網絡庫。HTTP組從星語團隊調一個,熟悉協議。測試組新招。」
「戴維會放人嗎?」
「已經談過了。」凌雲說,「安德烈下周轉過來。」
艾瑞克在筆記本上寫下人名,並在旁邊標註分組。寫完他抬頭:「開發環境呢?用什麼工具鏈?」
「統一用GCC,C語言,」凌雲說,「代碼風格參照Linux內核,4空格縮進,K&R風格。版本控制用CVS,每天自動構建。測試伺服器已經訂了,下周到貨,雙CPU,4G內存,夠初期用了。」
「文檔標準?」
「每個模塊必須有設計文檔,注釋率不低於30%。接口文檔用Doxygen生成。用戶手冊單獨寫,要能讓運維看懂。」
艾瑞克記下。他翻到筆記本新的一頁,畫了一個簡單的甘特圖,把三個階段的起止日期填進去,然後標出幾個關鍵里程碑。
「風險點,」他邊畫邊說,「事件驅動模型的穩定性是最大的。如果事件循環出bug,整個伺服器會掛。需要大量測試。」
「所以測試組要儘早介入,」凌雲說,「讓他們寫自動化測試,覆蓋邊界情況。特別是高並發下的內存泄漏和文件描述符耗盡。」
「性能調優怎麼做?」
「用oprofile採樣,找熱點函數。網絡I/O用tcpdump抓包分析。關鍵路徑的彙編代碼要審查。」
艾瑞克點頭,在甘特圖上標記了幾個性能測試的時間點。
辦公室安靜下來,只有艾瑞克寫字的沙沙聲,和窗外偶爾傳來的汽車聲。
九點三十分,菲奧娜再次敲門:「老闆,十點你有會,和暴雪的電話會議。」
「知道了。」凌雲說。
艾瑞克合上筆記本,站起來:「我下午出詳細的任務分解,明早發給你。」
「好。」凌雲也站起來,從桌上拿起一個U盤遞給艾瑞克,「這裡面有更詳細的設計文檔,還有我收集的一些論文,關於事件驅動和高並發架構。你有空看看。」
艾瑞克接過U盤,插進口袋。
「另外,」凌雲說,「下周三開項目啟動會,全體成員參加。你準備一下技術宣講。」
「明白。」
艾瑞克走到門口,手放在門把上,又停住,回頭:「老闆。」
凌雲抬頭。
「這個項目,」艾瑞克說,「如果做成了,星辰系統在伺服器市場就有了一席之地。但如果失敗了……」
「不會失敗。」凌雲打斷他。
艾瑞克看著他,幾秒鐘後,點了點頭,拉開門走了出去。
辦公室重新安靜。凌雲走到白板前,看著那張日程表。他拿起紅筆,在「正式發布」旁邊畫了一個小小的星號。
然後他擦掉白板上所有的字跡,只留下那個星號。
窗外的陽光完全照進來了,在橡木地板上投出明亮的光斑。
十點的電話會議,要跟暴雪談戰網擴容。他們等不了六個月,可能要求先用臨時方案。
臨時方案……也許可以先做一個簡化版,只處理長連接,撐過這幾個月。
他走回辦公桌,打開筆記本,新建一個文檔。標題:「Nexus Lite – 臨時方案」。
手指放在鍵盤上,停頓片刻,然後開始敲擊。他想起後世那個叫Nginx的伺服器。1997年,它還沒誕生。它的作者,伊戈爾·賽索耶夫,現在可能還在俄羅斯某家公司寫代碼。
但等不到2004年了。網際網路的發展速度比記憶中更快,需求已經冒頭。誰先解決,誰就占住這個關鍵位置。
他轉身走回白板前,看著那六條開發目標。然後拿起紅筆,在「高並發處理能力」下面劃了兩道橫線。
五萬並發,只是開始。
未來的網際網路,會有千萬人在線同時搶購,會有億級並發的消息推送,會有實時互動的全球直播。那個世界需要新的基礎設施。
而星辰要做的,就是提前把它建好。
他擦掉白板上的所有字跡,收拾好自己的東西,離開會議室。
走廊里,幾個工程師正圍在一起討論星際爭霸的戰術,看到他,停下來打招呼。
「凌總。」
凌雲點頭,走過時停了一步:「艾瑞克在辦公室嗎?」
「在,剛回來。」
「讓他半小時後到我辦公室。帶上內核組和網絡組的人。」
「好的。」
凌雲繼續往前走,經過星語團隊的區域時,他聽見有人在抱怨:「Apache又崩了,上午高峰期,掉了兩百個連接。」
「日誌報什麼?」
「內存不足,fork失敗。」
「得重啟了。」
「正在重啟。」
需求就在那裡,真實,而且很迫切。
現在,就要去解決了。
「兩杯,黑咖啡。」凌雲說。
菲奧娜端進來兩個白色馬克杯,放下後離開,帶上了門。
凌雲端起咖啡喝了一口,沒加糖也沒加奶。艾瑞克也喝了一口,然後繼續翻看技術文件。
「開發階段分三期,」凌雲走到白板前,指著右邊那張空白日程表,「第一期,三個月,出核心框架。支持基本的HTTP請求處理,靜態文件服務,達到一萬並發目標。」
他在日程表上寫下:
Phase 1 (12/15-3/15): 核心框架
- 事件驅動模型
- 基礎HTTP解析
- 靜態文件模塊
- 1萬並發達標
「第二期,」凌雲繼續寫,「兩個月,完善功能。加反向代理、負載均衡、日誌模塊,達到五萬並發。」
Phase 2 (3/16-5/15): 功能完善
- 反向代理
- 負載均衡
- 訪問日誌
- 5萬並發達標
「第三期,一個月,優化和穩定。壓測,調優,文檔,準備發布。」
Phase 3 (5/16-6/15): 優化發布
- 性能調優
- 穩定性測試
- 文檔編寫
- 正式發布
艾瑞克看著日程表,眉頭微皺:「時間很緊,尤其是第一期,三個月要從零搭出框架,還要達到一萬並發。光事件驅動模型和HTTP解析,就至少需要兩個月。」
「所以需要抓緊時間。」凌雲說,「項目組實行彈性工作制,但核心期晚上和周末可能要搭進去,獎金和期權會體現。」
艾瑞克在筆記本上計算了一下:「如果按每天十小時,每周六天算……技術上可能,但人會很累。」
「累就累三個月。」凌雲說,「做成了,這個產品能定義未來十年的Web伺服器市場。做不成,我們可能錯過一個關鍵機會窗口。」
艾瑞克沒再反駁。他在日程表旁邊寫下幾個關鍵日期:12/20 團隊組建完成、1/15 原型演示、2/28 一期驗收。
「團隊組成,」凌雲回到辦公桌,打開筆記本電腦,調出一張組織結構圖,「總共十人。你負責整體架構和核心模塊。下面分四個小組。」
投影儀亮起,屏幕上顯示:
Nexus 項目組 (20人)
├── 架構設計 (艾瑞克 + 1)
├── 事件與網絡組 (8人)
├── HTTP與模塊組 (8人)
├── 測試與工具組 (2人)
「事件與網絡組負責事件驅動模型、TCP連接管理、內存池。」凌雲用雷射筆點著屏幕,「HTTP組負責協議解析、模塊接口、反向代理。測試組寫壓測腳本、做性能分析、輔助調試。」
艾瑞克盯著屏幕看了會兒:「人員分配你有建議嗎?」
「有。」凌雲切換幻燈片,顯示每個人名和背景,「事件組建議讓戴維手下那個俄羅斯工程師負責,安德烈。他寫過底層網絡庫。HTTP組從星語團隊調一個,熟悉協議。測試組新招。」
「戴維會放人嗎?」
「已經談過了。」凌雲說,「安德烈下周轉過來。」
艾瑞克在筆記本上寫下人名,並在旁邊標註分組。寫完他抬頭:「開發環境呢?用什麼工具鏈?」
「統一用GCC,C語言,」凌雲說,「代碼風格參照Linux內核,4空格縮進,K&R風格。版本控制用CVS,每天自動構建。測試伺服器已經訂了,下周到貨,雙CPU,4G內存,夠初期用了。」
「文檔標準?」
「每個模塊必須有設計文檔,注釋率不低於30%。接口文檔用Doxygen生成。用戶手冊單獨寫,要能讓運維看懂。」
艾瑞克記下。他翻到筆記本新的一頁,畫了一個簡單的甘特圖,把三個階段的起止日期填進去,然後標出幾個關鍵里程碑。
「風險點,」他邊畫邊說,「事件驅動模型的穩定性是最大的。如果事件循環出bug,整個伺服器會掛。需要大量測試。」
「所以測試組要儘早介入,」凌雲說,「讓他們寫自動化測試,覆蓋邊界情況。特別是高並發下的內存泄漏和文件描述符耗盡。」
「性能調優怎麼做?」
「用oprofile採樣,找熱點函數。網絡I/O用tcpdump抓包分析。關鍵路徑的彙編代碼要審查。」
艾瑞克點頭,在甘特圖上標記了幾個性能測試的時間點。
辦公室安靜下來,只有艾瑞克寫字的沙沙聲,和窗外偶爾傳來的汽車聲。
九點三十分,菲奧娜再次敲門:「老闆,十點你有會,和暴雪的電話會議。」
「知道了。」凌雲說。
艾瑞克合上筆記本,站起來:「我下午出詳細的任務分解,明早發給你。」
「好。」凌雲也站起來,從桌上拿起一個U盤遞給艾瑞克,「這裡面有更詳細的設計文檔,還有我收集的一些論文,關於事件驅動和高並發架構。你有空看看。」
艾瑞克接過U盤,插進口袋。
「另外,」凌雲說,「下周三開項目啟動會,全體成員參加。你準備一下技術宣講。」
「明白。」
艾瑞克走到門口,手放在門把上,又停住,回頭:「老闆。」
凌雲抬頭。
「這個項目,」艾瑞克說,「如果做成了,星辰系統在伺服器市場就有了一席之地。但如果失敗了……」
「不會失敗。」凌雲打斷他。
艾瑞克看著他,幾秒鐘後,點了點頭,拉開門走了出去。
辦公室重新安靜。凌雲走到白板前,看著那張日程表。他拿起紅筆,在「正式發布」旁邊畫了一個小小的星號。
然後他擦掉白板上所有的字跡,只留下那個星號。
窗外的陽光完全照進來了,在橡木地板上投出明亮的光斑。
十點的電話會議,要跟暴雪談戰網擴容。他們等不了六個月,可能要求先用臨時方案。
臨時方案……也許可以先做一個簡化版,只處理長連接,撐過這幾個月。
他走回辦公桌,打開筆記本,新建一個文檔。標題:「Nexus Lite – 臨時方案」。
手指放在鍵盤上,停頓片刻,然後開始敲擊。他想起後世那個叫Nginx的伺服器。1997年,它還沒誕生。它的作者,伊戈爾·賽索耶夫,現在可能還在俄羅斯某家公司寫代碼。
但等不到2004年了。網際網路的發展速度比記憶中更快,需求已經冒頭。誰先解決,誰就占住這個關鍵位置。
他轉身走回白板前,看著那六條開發目標。然後拿起紅筆,在「高並發處理能力」下面劃了兩道橫線。
五萬並發,只是開始。
未來的網際網路,會有千萬人在線同時搶購,會有億級並發的消息推送,會有實時互動的全球直播。那個世界需要新的基礎設施。
而星辰要做的,就是提前把它建好。
他擦掉白板上的所有字跡,收拾好自己的東西,離開會議室。
走廊里,幾個工程師正圍在一起討論星際爭霸的戰術,看到他,停下來打招呼。
「凌總。」
凌雲點頭,走過時停了一步:「艾瑞克在辦公室嗎?」
「在,剛回來。」
「讓他半小時後到我辦公室。帶上內核組和網絡組的人。」
「好的。」
凌雲繼續往前走,經過星語團隊的區域時,他聽見有人在抱怨:「Apache又崩了,上午高峰期,掉了兩百個連接。」
「日誌報什麼?」
「內存不足,fork失敗。」
「得重啟了。」
「正在重啟。」
需求就在那裡,真實,而且很迫切。
現在,就要去解決了。