九点整,办公室门被敲响。菲奥娜探头进来:“老板,要咖啡吗?”
“两杯,黑咖啡。”凌云说。
菲奥娜端进来两个白色马克杯,放下后离开,带上了门。
凌云端起咖啡喝了一口,没加糖也没加奶。艾瑞克也喝了一口,然后继续翻看技术文件。
“开发阶段分三期,”凌云走到白板前,指着右边那张空白日程表,“第一期,三个月,出核心框架。支持基本的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 一期验收。
“团队组成,”凌云回到办公桌,打开笔记本电脑,调出一张组织结构图,“总共十人。你负责整体架构和核心模块。
投影仪亮起,屏幕上显示:
Nex 项目组 (20人)
├── 架构设计 (艾瑞克 + 1)
├── 事件与网络组 (8人)
├── HTTP与模块组 (8人)
├── 测试与工具组 (2人)
“事件与网络组负责事件驱动模型、TCP连接管理、内存池。”凌云用激光笔点着屏幕,“HTTP组负责协议解析、模块接口、反向代理。测试组写压测脚本、做性能分析、辅助调试。”
艾瑞克盯着屏幕看了会儿:“人员分配你有建议吗?”
“有。”凌云切换幻灯片,显示每个人名和背景,“事件组建议让戴维手下那个俄罗斯工程师负责,安德烈。他写过底层网络库。HTTP组从星语团队调一个,熟悉协议。测试组新招。”
“戴维会放人吗?”
“已经谈过了。”凌云说,“安德烈下周转过来。”
艾瑞克在笔记本上写下人名,并在旁边标注分组。写完他抬头:“开发环境呢?用什么工具链?”
“统一用GCC,C语言,”凌云说,“代码风格参照Lux内核,4空格缩进,K&R风格。版本控制用CVS,每天自动构建。测试服务器已经订了,下周到货,双CPU,4G内存,够初期用了。”
“文档标准?”
“每个模块必须有设计文档,注释率不低于30%。接口文档用Doxygen生成。用户手册单独写,要能让运维看懂。”
艾瑞克记下。他翻到笔记本新的一页,画了一个简单的甘特图,把三个阶段的起止日期填进去,然后标出几个关键里程碑。