2000年 5月下旬
广州的梅雨季节裹挟着潮湿的热气。
广欣电力通信公司的服务器机房里,机柜指示灯像一串警惕的眼睛,忽明忽暗。
基于 Lotus Notes 5的 mIS客户端刚刚部署完毕。
我用袖口擦了擦额角的汗,看着屏幕上闪烁的部署完成提示,长舒了一口气。
旁边的 berry正弯腰检查最后一台终端的连接线,蓝色圆领短袖衫的后背已洇出深色汗渍。
“Java编译器还在后台跑,”
她直起身揉了揉膝盖,“oracle 8i的表空间扩容得盯着点,二次开发要是崩了库,咱们俩这个月奖金就悬了。”
我点点头,指尖在键盘上敲出一行指令,调出系统拓扑图。
内网的财务数据、外网的电力生产报表、互联网端的客户查询页面像三条奔涌的河流,即将汇入 mIS这个蓄水池。
但屏幕右下角的网络监控软件正跳着刺眼的红色——动态页面加载耗时已经突破 8秒,这在 2000年 56K拨号上网为主的环境里,简直是不可接受的数字。
“得给动态页面瘦个身。”
我指着屏幕对凑过来的 berry说。
她的鼻尖几乎要碰到显示器,食指在布满指纹的屏幕上划出一道弧线:“你看这些实时生成的用电曲线,每刷新一次就要调用三次数据库。咱们能不能把非实时数据做成静态 htmL缓存?”
话音未落,财务部的刘姐抱着一摞凭证闯进来,文件夹边缘的金属夹在日光灯下闪着冷光:“你们的系统要是把电费明细裸奔在网上,审计那边能扒了咱们的皮。”
她把凭证“啪”地拍在机房办公桌上,封皮上“绝密”二字格外醒目。
我注意到 berry的喉结动了动,伸手把桌上的玻璃杯往刘姐那边推了推。
更棘手的事在三天后浮出水面。
当华为的工程师谢工带着 ctI设备图纸走进会议室时,摊开的蓝图上密密麻麻的接口标注让我倒吸一口凉气。
“广州本部 500个坐席,每秒钟至少 30次呼入,”
谢工用红笔圈出 pbx交换机的位置,“你们的 mIS得实时抓取来电号码,还要同步调出客户的用电档案,这延迟不能超过 2秒。”
会议室的空调刚好出了故障,临时搬来2台风扇,有气无力地转着,扬起的灰尘在光束里翻滚。
我盯着图纸上思科路由器与华为交换机的连接线,忽然注意到 berry的手指正无意识地摸鼻子,那是她思考时的习惯动作。
解决方案的拼凑始于一场七方参与的混战。
用友的工程师万工穿着熨帖的白衬衫,把笔记本电脑摆在会议桌正中央,屏幕上财务系统的加密模块流程图泛着蓝光。
“dES加密算法足够应付财务数据,”他推了推鼻梁上的眼镜。
我把身子往前倾,问道:“密钥怎么存放?”
“密钥得存在硬件加密狗里,这是财政部的规定。”他说道。
berry立刻从帆布包里掏出记事本,铅笔在纸上划出急促的沙沙声,她握笔的指节因为用力而白里透红,就像她的脸蛋一样。
科林电气的工程师李工是个皮肤黝黑的北方人。
他从工具包掏出一卷数据线,放在桌上:“ScAdA的实时曲线得转成 mIS能认的格式。”
然后拿出一本技术手册,用指甲在手册边缘划出折痕。
“我给你们留了 ddE接口,用 Vb6写个小程序定时抓数,每 15分钟生成一帧 GIF,存在\\192.168.1.10\\scada_shared目录。”他说。
我赶紧把笔记本转过来,他的钢笔尖在屏幕上点出残影:“用 mSchart控件生成趋势图时,把 Y轴量程固定在 0-500mw,超过阈值就自动标红。记得给文件夹加共享密码,上个月城郊变电站的曲线图就被人误删过。”
berry突然把铅笔横咬在嘴里,腾出双手比划数据流向:“是不是像这样?ScAdA实时库→Vb转换程序→共享文件夹→Lotus代理程序定期导入?”
李工笑着竖起大拇指:“没错,代理程序用 LotusScript写,我这有现成的时间触发模板。”
“那你们数据完整性怎么保证呢?”我问道。
“我们的 ScAdA系统有自己的校验机制,”
李工边说边扯松领带,“你们得在 Java代码里加个校验位算法,我现在就写给你。”
我立刻给他递过去一张便签纸。
berry已经搬了把椅子凑到他身边,两人的肩膀几乎贴在一起。
他的钢笔尖在纸上快速移动,偶尔停顿下来,指尖在桌面上比划着数据流转的路径。
华为的 ctI方案讨论持续到深夜。
“call center数据要走两条路,”谢工说道。
他在笔记本上临时画图,“通话记录用 odbc直连 oracle,每 5分钟执行一次同步脚本,用 SqL*Loader导批量数据。”
笔尖戳在“客户投诉”那栏特别用力,“但坐席备注这种非结构化数据,得打包成 xmL通过 Notes的 dxL接口传,记得在根节点加时间戳,不然 mIS那边会乱序。”
我注意到他食指关节处有块烫伤疤痕,正随着握笔的动作微微发白。
berry突然凑过来,兰蔻香水味混着汗味飘过来:“那来电号码解析呢?要和客户档案自动匹配。”
谢工忽然笑了,从工具包摸出张 3.5英寸软盘:“这是我写的 Vb正则表达式模块,能拆区号和本地号,拿去改改就能用。”
实验室里空调发出嗡嗡的低鸣,500个模拟坐席的指示灯在黑暗中像一片星海。
“坐席终端的串口协议是 RS232,”谢工蹲在机柜前调试设备。
我赶紧搬了个小马扎坐在他旁边,膝盖几乎碰到他的工装裤。
berry正举着万用表测量电压,听见这话立刻回过头,发梢上还沾着机房的灰尘:“那我们用 Java m ApI来开发接口?”
谢工猛地抬起头,眼里闪过一丝惊讶。
随即对berry竖起大拇指:“靓女懂行啊,这个包得用 1.3版本,我这有备份盘。”
思科的网络优化方案藏在厚厚的手册里。
工程师黄工指着 VLAN划分示意图时,我注意到他无名指上的婚戒在荧光灯下反光。
“把动态页面服务器单独划到一个子网,”
黄工用激光笔在图上划出一道红线,我赶紧把笔记本电脑转过去,让屏幕正对着他,“用 cache Engine做静态内容缓存,能省 40%的带宽。”
berry突然站起来,椅子腿在地板上划出刺耳的声音,她跑到白板前抓起马克笔:“是不是像这样?”
她画的拓扑图歪歪扭扭,却精准地抓住了核心。
黄工笑着接过笔,在旁边添上几个参数。
两人的手臂在白板上交错,墨痕叠着墨痕。
蓝盾信息公司的工程师秦工带来的加密狗像块黑色的橡皮擦,插在服务器 USb口上时发出轻微的“咔哒”声。
“3dES算法比 dES抗暴力破解强多了,”秦工演示着加密流程。
我突然发现他操作鼠标的手势很特别,食指总是悬在左键上方,像随时准备扣动扳机。
berry悄悄碰了碰我的胳膊,递来一张折起来的便签。
上面是她刚才速记的密钥轮换机制,字迹被汗水晕开了一小片。
一个月后的清晨
所有系统首次联动测试成功。
我和 berry背靠背坐在服务器旁,她的帆布运动鞋上还沾着实验室的灰尘,我的衬衫第二颗纽扣在移动设备时不小心扯掉了。
“原来 ctI的呼叫排队算法是这样的。”她边说边用手指在我的笔记本上画着队列模型。
我突然想起昨晚她为了弄懂这个,在实验室的白板上写满了公式,直到晨光爬上她的黑眼圈。
当庆祝的喧嚣散去,我望着屏幕上不断跳动的系统日志,突然注意到 berry正对着服务器指示灯出神。
她伸手抚摸着华为交换机冰冷的外壳,就像触摸着某种尚未可知的未来。
那些由七家厂商的代码编织成的网络,此刻正安静地流淌着数据。
而我们都明白,真正的战役才刚刚开始