九点整,办公室门被敲响。菲奥娜探头进来:“老板,要咖啡吗?”
“两杯,黑咖啡。”凌云说。
菲奥娜端进来两个白色马克杯,放下后离开,带上了门。
凌云端起咖啡喝了一口,没加糖也没加奶。艾瑞克也喝了一口,然后继续翻看技术文件。
“开发阶段分三期,”凌云走到白板前,指着右边那张空白日程表,“第一期,三个月,出核心框架。支持基本的http请求处理,静态文件服务,达到一万并发目标。”
他在日程表上写下:
- 事件驱动模型
- 基础http解析
- 静态文件模块
- 1万并发达标
“第二期,”凌云继续写,“两个月,完善功能。加反向代理、负载均衡、日志模块,达到五万并发。”
- 反向代理
- 负载均衡
- 访问日志
- 5万并发达标
“第三期,一个月,优化和稳定。压测,调优,文档,准备发布。”
- 性能调优
- 稳定性测试
- 文档编写
- 正式发布
艾瑞克看着日程表,眉头微皱:“时间很紧,尤其是第一期,三个月要从零搭出框架,还要达到一万并发。光事件驱动模型和http解析,就至少需要两个月。”
“所以需要抓紧时间。”凌云说,“项目组实行弹性工作制,但核心期晚上和周末可能要搭进去,奖金和期权会体现。”
艾瑞克在笔记本上计算了一下:“如果按每天十小时,每周六天算……技术上可能,但人会很累。”
“累就累三个月。”凌云说,“做成了,这个产品能定义未来十年的web服务器市场。做不成,我们可能错过一个关键机会窗口。”
艾瑞克没再反驳。表旁边写下几个关键日期:12/20 团队组建完成、1/15 原型演示、2/28 一期验收。
“团队组成,”凌云回到办公桌,打开笔记本电脑,调出一张组织结构图,“总共十人。你负责整体架构和核心模块。下面分四个小组。”
投影仪亮起,屏幕上显示:
nex 项目组 (20人)
“事件与网络组负责事件驱动模型、tcp连接管理、内存池。”凌云用激光笔点着屏幕,“http组负责协议解析、模块接口、反向代理。测试组写压测脚本、做性能分析、辅助调试。”
艾瑞克盯着屏幕看了会儿:“人员分配你有建议吗?”
“有。”凌云切换幻灯片,显示每个人名和背景,“事件组建议让戴维手下那个俄罗斯工程师负责,安德烈。他写过底层网络库。http组从星语团队调一个,熟悉协议。测试组新招。”
“戴维会放人吗?”
“已经谈过了。”凌云说,“安德烈下周转过来。”
艾瑞克在笔记本上写下人名,并在旁边标注分组。写完他抬头:“开发环境呢?用什么工具链?”
“统一用g,c语言,”凌云说,“代码风格参照lux内核,4空格缩进,k&r风格。版本控制用cvs,每天自动构建。测试服务器已经订了,下周到货,双cpu,4g内存,够初期用了。”
“文档标准?”
“每个模块必须有设计文档,注释率不低于30。接口文档用doxygen生成。用户手册单独写,要能让运维看懂。”
艾瑞克记下。他翻到笔记本新的一页,画了一个简单的甘特图,把三个阶段的起止日期填进去,然后标出几个关键里程碑。
“风险点,”他边画边说,“事件驱动模型的稳定性是最大的。如果事件循环出bug,整个服务器会挂。需要大量测试。”
“所以测试组要尽早介入,”凌云说,“让他们写自动化测试,覆盖边界情况。特别是高并发下的内存泄漏和文件描述符耗尽。”
“性能调优怎么做?”
“用oprofile采样,找热点函数。抓包分析。关键路径的汇编代码要审查。”
艾瑞克点头,在甘特图上标记了几个性能测试的时间点。
办公室安静下来,只有艾瑞克写字的沙沙声,和窗外偶尔传来的汽车声。
九点三十分,菲奥娜再次敲门:“老板,十点你有会,和暴雪的电话会议。”
“知道了。”凌云说。
艾瑞克合上笔记本,站起来:“我下午出详细的任务分解,明早发给你。”
“好。”凌云也站起来,从桌上拿起一个u盘递给艾瑞克,“这里面有更详细的设计文档,还有我收集的一些论文,关于事件驱动和高并发架构。你有空看看。”
艾瑞克接过u盘,插进口袋。
“另外,”凌云说,“下周三开项目启动会,全体成员参加。你准备一下技术宣讲。”
“明白。”
艾瑞克走到门口,手放在门把上,又停住,回头:“老板。”
凌云抬头。
“这个项目,”艾瑞克说,“如果做成了,星辰系统在服务器市场就有了一席之地。但如果失败了……”
“不会失败。”凌云打断他。
艾瑞克看着他,几秒钟后,点了点头,拉开门走了出去。
办公室重新安静。凌云走到白板前,看着那张日程表。他拿起红笔,在“正式发布”旁边画了一个小小的星号。
然后他擦掉白板上所有的字迹,只留下那个星号。
窗外的阳光完全照进来了,在橡木地板上投出明亮的光斑。
十点的电话会议,要跟暴雪谈战网扩容。他们等不了六个月,可能要求先用临时方案。
临时方案……也许可以先做一个简化版,只处理长连接,撑过这几个月。
他走回办公桌,打开笔记本,新建一个文档。临时方案”。
手指放在键盘上,停顿片刻,然后开始敲击。他想起后世那个叫ngx的服务器。1997年,它还没诞生。赛索耶夫,现在可能还在俄罗斯某家公司写代码。
但等不到2004年了。互联网的发展速度比记忆中更快,需求已经冒头。谁先解决,谁就占住这个关键位置。
他转身走回白板前,看着那六条开发目标。然后拿起红笔,在“高并发处理能力”下面划了两道横线。
五万并发,只是开始。
未来的互联网,会有千万人在线同时抢购,会有亿级并发的消息推送,会有实时互动的全球直播。那个世界需要新的基础设施。
而星辰要做的,就是提前把它建好。
他擦掉白板上的所有字迹,收拾好自己的东西,离开会议室。
走廊里,几个工程师正围在一起讨论星际争霸的战术,看到他,停下来打招呼。
“凌总。”
凌云点头,走过时停了一步:“艾瑞克在办公室吗?”
“在,刚回来。”
“让他半小时后到我办公室。带上内核组和网络组的人。”
“好的。”
凌云继续往前走,经过星语团队的区域时,他听见有人在抱怨:“apache又崩了,上午高峰期,掉了两百个连接。”
“日志报什么?”
“内存不足,fork失败。”
“得重启了。”
“正在重启。”
需求就在那里,真实,而且很迫切。
现在,就要去解决了。