全都是操蛋的
我当时被这个所谓的“生命竞赛”搞得差点吐血。倒不是说项目本身有多难,而是我们用的那一套部署流程,简直就是垃圾堆里捡出来的,每一步都是坑。那会儿公司刚接了个大活,要求我们开发的那个内部审批系统,必须在两个小时内,把更新包推到全国所有分公司的客户端电脑上,而且不能出任何差错。这他妈就是“生命竞赛”的由来,时间一到,系统必须切换,不然上亿的业务就得卡住。
我们以前是怎么搞的?就是最简单粗暴的FTP,或者共享文件夹。文件一打包,往服务器上一扔,然后让各地的网管自己去下载,自己去跑安装脚本。结果你们猜怎么着?每次都出事!
- 文件大一点,下载慢,几百个分公司同时拉取,服务器直接
瘫痪,连着崩了三次。
本站为89游戏官网游戏攻略分站,89游戏每日更新热门游戏,下载请前往主站地址(www.game519.com) - 有的地方网络差,下载下来的文件总是
损坏,SHA校验一直报错。
- 最要命的是,网管那帮人,水平参差不齐,手动安装时经常
搞错脚本顺序,装完后系统卡死。
那次“竞赛”开始前十分钟,北方一个重要的分公司直接反馈文件校验失败。我当时就懵了,知道这回肯定要砸锅。老板的脸黑得像锅底一样,损失没法估量。活儿是干完了,但是是靠着我们十几个人连夜远程救火,差点把头发薅光才勉强收场。那一晚上,我明白了,以前那套部署方案,屁用没有,根本扛不住压。
硬着头皮,我们搞了“立即下载”
出了这么大的篓子,公司给的命令很简单:三天内,必须搞出一个能保证在任何网络环境下都能瞬间完成下载且保证文件绝对不会被污染的部署方案。这听起来跟科幻片一样,但没办法,硬着头皮上。
我做的就是把那套破烂不堪的FTP直接给砍了,连带着那些手动校验的脚本也扔进了垃圾桶。我知道,要保证“立即下载”,光靠我们自己的服务器肯定不行,网络波动是我们控制不了的。我们必须找个“特快的管道”。
我把目光投向了内容分发网络(CDN),但这玩意儿贵得要死,而且我们内部系统的数据又敏感。所以我们采取了一个折中的办法:自己组建一个内部加速网。我从公司淘汰下来的机器里扒拉出来几台性能还行的服务器,利用它们在各地分公司的地理优势,手动配置了几个边缘节点。这不是专业的CDN,但对我们这种小打小闹的内部系统来说,足够用了。
具体的实现过程,我用最土的办法去解决了速度问题:
- 我们把以前一个GB的大包,拆成了几十个小的块,每个块都独立传输,任何一块传输失败,只会重新传输那一个块,
大大降低了重试的成本。
- 我找了个据说压缩率最高的工具,
把所有文件都压到最小,能省一兆是一兆。
- 最关键的是,我写了一个只有几十行代码的
“下载器”小工具,这个工具不干别的,就干一件事:它一旦发现网络速度下降,就会自动切换到下一个可用的边缘节点,保证下载永不停止。
“绿色下载”的秘密:谁也别想动
解决了速度,接下来就是“绿色下载”的问题,也就是如何确保文件是干净的、没被损坏的。以前我们靠人工校验,这回必须自动化。
“绿色”这个词,就是信任。我们不信任操作系统的文件系统,不信任员工的杀毒软件,只信任我们自己。我们的策略是:从打包机出来的那一刻起,这个文件的指纹就被锁死了。
每当文件被打包完成后,我的工具会立刻计算出一个复杂的哈希值(我管它叫“文件的身份证”)。这个身份证会被加密,并且直接嵌入到那个下载器小工具的代码里。小工具下载完一个文件块,立马就拿它的“身份证”去比对。只要有一个字节不对,它就
立刻报废重下,绝不含糊。
更绝的是,我们的这个小工具在安装前,会先在本地的环境里跑一遍自检。它会检查本地有没有我们不信任的DLL文件,有没有我们不想要的注入。一旦发现环境不干净,它连下载都不启动,直接提示用户“环境不安全,请先清理”。我们把这种
“先验尸,后入土”的机制,彻底推行了下去。
竞赛结束了,但新的麻烦来了
这套系统部署完毕后,我们在下一次季度更新中进行了实战。那次更新包比上次大了两倍,但所有的客户端,竟然在不到一个小时内全部完成了下载、校验和自动安装。下载失败率,从以前的15%直接降到了几乎为零。老板高兴坏了,当天就给我们发了奖金,把我们这帮干活的都吹上了天。
但成功这事儿,有时候比失败还麻烦。我们这套系统太好用了,成功得太彻底了。结果就是,技术部的主管盯上了我们。他觉得我们这个“立即下载_绿色下载”的架构应该推广到全公司所有项目去,要求我们无偿、无条件地把所有的工具和代码贡献出来,由他那边统一管理和维护。我当时就觉得不对劲,这不是摘桃子吗?
我当然不愿意,这套东西是我带着几个兄弟没日没夜肝出来的,里面的门道只有我们懂。我明确拒绝了,态度有点强硬。结果?他没法直接把我怎么样,但开始搞小动作,天天在例会上给我们穿小鞋,给我们安排一些根本没法完成的垃圾项目,美其名曰“技术优化”。
那段时间我过得特别憋屈。我的项目成功了,但我的人际关系彻底搞砸了。每天在公司都像打仗一样,活儿是干好了,但心力交瘁。我做了一个决定:辞职。我把那套“生命竞赛”的系统文档整理得清清楚楚,打包扔给了老板,然后头也不回地走了。
现在我在家门口找了个轻松点的活儿,虽然工资少了一点,但是没人管,清净。那个主管现在还在为全面推广那套系统而焦头烂额,听说因为交接得不彻底,系统老是出小毛病。他就开始四处打电话找我,想让我回去“指导”一下。我看到是他号码,直接拉黑,根本不接。有些竞赛,赢了技术,却输了人情,但我现在觉得,值了。