2000年 12月广州
潮湿的晚风裹挟着珠江三角洲特有的咸腥味,吹进了中信广场68层办公室。
我盯着 cRt显示器上不断跳动的系统日志,屏幕右下角的时间已经跳过了晚上十点。
办公室里只剩下我和老谭的工位还亮着灯,空调吹出的风力渐渐变小了。
“又崩了?”
老谭端着搪瓷杯走过来,杯沿结着圈褐色的茶渍。
他指着我屏幕上突然停滞的进度条,眉头拧成个疙瘩,“这是今晚第三次了。”
我敲下最后一行命令,烦躁地抓了抓头发:“21cN那边怕是又在搞动作。上午收到用户投诉,说发往 21cN的邮件总被退回,下午就开始频繁丢包。”
老谭呷了口茶,杯底的茶叶渣沉在杯底。
“他们的机房在石牌桥那边,电信直属的 Idc机房,带宽是我们的三倍。”
他往窗外瞥了眼,夜色里的电信大厦像座沉默的巨塔,“上个月升级后,他们的服务器集群已经能扛住千万级用户并发了。”
我想起三个月前行业峰会上见过的 21cN展台,穿着深绿色工服的工程师们演示着实时邮件转发。
背景板上“中国电信全资控股”的字样格外刺眼。
世纪龙公司的名头下,21cN邮箱从 1999年上线起就握着别人没有的王牌——中国电信遍布全国的节点机房和主干网络。
这次升级更是把老式的 SUN小型机换成了 hp的 dL380服务器集群,用 cisco的负载均衡器做了七层分流,光是存储阵列就扩容到了 50tb。
“王蒙在的时候,我们的邮件队列处理比他们快。”
老谭的声音低了些,他从抽屉里翻出张泛黄的软盘。
标签上“1997.03核心模块 v1.2”的字迹已经模糊。
“这小子当年用 c写的 Smtp处理引擎,单线程能跑三百个并发。”
软盘插进驱动器的瞬间,发出咔嗒的机械声。
我调出王蒙留下的代码,屏幕上密密麻麻的指针操作看得人眼晕。
1997年的代码里还留着不少汇编级的优化。
内存池管理用的是最原始的链表结构,在当时 64mb内存的服务器上确实高效。
但现在面对每秒两千次的连接请求,就像用小舢板对抗海啸。
“你看这里。”
老谭指着屏幕上的循环体,“他把用户认证和邮件投递塞在同一个进程里,现在用户量上来,只要有一个垃圾邮件堵塞队列,整个系统就跟着卡壳。”
我看着王蒙师兄、网益前任软件工程师写的核心代码,陷入了沉思。
老谭说,还记得1999年3月份的那个暴雨天,王蒙抱着主机箱从办公室冲出去的背影。
当时,21cN的人开着辆白色雅阁在楼下等他。
传闻开出的薪水是我们的五倍,还承诺给他独立的研发团队。
现在想来,那些和我们系统高度相似的缓存机制、索引算法,恐怕都带着王蒙的编程习惯。
比如总在注释里画小恐龙的癖好。
“得把认证模块拆出来。”
我摸出铅笔在打印纸上演算,“用多线程重构投递队列,每个域分配独立的处理进程。”
笔尖划过王蒙当年画的恐龙涂鸦,纸页发出沙沙的声响。
老谭突然起身,翻找服务器机房的钥匙:“我去看看那批新到的 Ibm服务器,上周刚从香港运过来的。把 pop3服务迁移过去,至少能分流三成压力。”
他的皮鞋踩在防静电地板上,发出空洞的回响。
机房里的空调冷得刺骨,机架上的服务器指示灯像排星星。
老谭摸着那台还没拆封的 Ibm xSeries,突然叹了口气:“王蒙当年总说,等我们的用户过了五百万,就把存储换成光纤阵列。”
我蹲下来检查线缆,发现角落里堆着的旧硬盘上还贴着网益的 Logo。
1998年的时候,网益就是用这些 IdE硬盘搭起了最初的邮件系统,王蒙亲手焊的 ScSI转接卡现在还能用。
可现在 21cN那边已经用上了最新型的 Fc交换机,光模块的传输速率是我们的十倍。
老谭突然用袖口擦了擦旁边架子上服务器的灰,露出下面贴着的资产标签:“你注意到没?21cN用的是 oracle 8i集群,我们还在死守 Sybase 11.9。”
他从工具包里翻出本翻烂的《数据库优化大全》,“他们的 dbA团队能做到表空间实时扩容,我们上个月那次宕机,就是因为用户表满了没及时清日志。”
我想起上周调试时看到的邮件存储结构。
王蒙当年为了省空间,把邮件内容和附件存在同一个数据文件里。
现在单表已经涨到 15Gb,每次查询都像在拖一艘生锈的船。
而 21cN那边早就用了分离存储。
正文存在关系库,附件扔到专门的文件服务器,用 NFS共享访问。
连备份都快我们三个小时。
“还有服务器集群。”
老谭指着机架最上层那台孤零零的 Sun E450,“人家是 16台 dL380做的负载均衡,用 cisco Localdirector做会话保持,我们这台老 Sun既要跑 Smtp又要扛 pop3,就像让老黄牛拉火车。”
他突然压低声音,“听说他们从美国挖了个搞集群的专家,光安家费就够买我们半机房设备。”
开发框架的差距更刺眼。
我打开网益邮箱的后台代码目录,满屏都是 c写的 cGI程序,连个像样的模块划分都没有。
王蒙当年为了追求速度,把所有逻辑都揉在一块,现在想加个自动回复功能都得改十几处地方。
而 21cN那边已经用上了自己开发的 c++框架,把协议解析、用户管理、邮件处理拆成了独立服务。
上周他们推出的定时发送功能,据说只花了三天就上线了。
“加密这块更头疼。”
老谭调出用户登录的代码片段,屏幕上清晰地显示着密码用明文传输。
“王蒙当年觉得 md5加密太费时间,现在 21cN早就用了 SSLv3加密传输,用户登录时地址栏会跳出那个小锁图标,咱们这……”
他敲了下键盘,登录日志里赤裸裸的密码像在嘲笑我们。
机房外突然传来楼层保安对讲机的声音。
老谭慌忙把加密对比表塞进抽屉:“市场部说用户投诉我们密码容易被盗,其实就是因为这个。但要改加密就得动核心模块,王蒙这代码写得跟蜘蛛网似的,牵一发动全身。”
我摸出手机看了眼时间,凌晨三点的摩托罗拉屏幕泛着绿光。
信号栏旁边跳出条短信。
我打开一看,是匿名的:“21cN今晚升级了反垃圾邮件网关,用的是 brightmail引擎,据说能拦截七成垃圾邮件。”
我想起我们还在用最原始的关键词过滤,昨天有用户投诉说“发票”两个字都被当成垃圾邮件拦截了。
老谭突然从口袋里掏出个优盘,是 32mb sandisk。
“这是我托人从 21cN内部弄来的架构图,你看他们的邮件队列用了消息中间件,我们还在靠文件锁做队列同步。”
优盘里的 Visio图上,21cN的架构像条流畅的河流,而我们的系统图上布满了红色的堵塞点,像张被虫蛀的网。
“前端也得改。”
回到办公室,我打开 Frontpage,指着满屏的表格嵌套,“这些嵌套太深了,IE5.0渲染起来能卡三秒。换成 div+css吧,虽然浏览器支持还不太好,但至少能省一半代码量。”
老谭盯着屏幕上闪烁的光标,突然笑了:“还记得 97年我们在石牌村租的民房。王蒙就在那张掉漆的木桌上写出了第一版代码,蚊子比 bug还多。”
窗外的天开始泛白,早班的公交车已经驶过天河北路。
我保存好最后一个优化方案,突然听见邮件客户端弹出新消息提示音。
是市场部发来的报表,21cN的用户数已经突破八百七十万,而我们的系统昨晚又崩溃了六次。
老谭把搪瓷杯重重放在桌上:“先把用户登录模块的缓存加上,用 memcached,虽然这东西还在测试阶段,但总比看着用户流失强。”
他的手指在键盘上敲得飞快,键帽上的字母早就磨没了。
晨光从窗缝里斜射进来,照在我们脚边堆成小山的代码打印纸上。
老谭突然想起王蒙临走前说的话:“邮箱这东西,比的不是谁服务器好,是看谁能扛过每个下暴雨的夜晚。”
机房的 UpS发出低低的蜂鸣,像是在回应这句话。
我知道这场仗才刚刚开始,就像广州永远不会结束的潮湿雨季。
我们得在代码里种出片晴天来。
请大家记得我们的网站:品书中文(m.pinshuzw.com)人生何处是归途:花城网事三十年更新速度全网最快。