我要讲的是一次网站建设项目中的经典惨痛教训,我们忽视了网站系统发出的所有告警信号,最后导致整个网站瘫痪近48小时,首先不说造成了多大的经济损失,就一家深圳网站建设的技术型公司而言,在技术口碑和公司信誉度来说,就已经是很“杯具”了。
作为CTO,我们收到过几乎每个项目经理,架构师和程序员的汇报:网站程序太复杂了,不能进行回退。自己对此也确信无疑。代码发布后曾经出现过几次中断或问题,先是疯狂地迅速修复,之后在同一天中得到了一个热修复补丁以便完全恢复网站服务。我们忍受了这种小小的不方便,因为我们认为这个网站太复杂了,即便是使用了SVN代码管理器,也无法完全回退代码。
和之前发布的所有版本一样,一个主要的基础设施的版本发布后,也不能进行回退。但是这次的发布简直是场灾难。凌晨时,一切看起来都没什么问题,但天亮后,由于客户之前三个月的推广和SEO凑效了,网络流量一星期前就开始激增,这个网站开始招架不住了。但是一星期里面我们已经对代码进行了5次升级和更新,但是现在出现了问题。如果回退数据和代码,只会让部分用户不高兴,给自己留点小伤痕,但不会发生更加不可控制的事情。但问题是对于这个网站建设项目,我们进行了这么多次更新后,由于依赖的外部程序和控件太多,很多组件都不能在SVN中控制,所以我们也不能再回退了,所以只好又花一整天的功夫,为这个网站做点增加容量,限制流量的工作,以便在得到一些修复补丁之前保持一切安然无恙。而在那天晚上我们又更新了一次,当时网站并没有太多流量,所以我们认为问题已经修复了。可是谁知道第二天早上,当流量激增之后,这个网站有开始发疯了,只好又在晚上没有流量的时候再去修补。。。。。。后来,我们整个网站建设团队就以这样的模式持续工作了一个礼拜。
接连折腾这么一段时间后,到那周结束时,所有人都已经精疲力竭。最后,我们又更新了一次,完全忽略之前的所有修改,终于使网站稳定了。虽然从这次网站建设的惨痛教训中可以学到很多东西,我们也深深意识到无论是网站制作团队本身还是客户所经历的所有痛苦都是可以通过回退代码和数据避免的。
时候总结经验教训,我们确定日后不允许再发布不可回退数据和代码的版本。当时除了指定这个规定外,我们没有其它选择,作为一家较有诚信的深圳网站建设公司,我们的客户无法容忍这种性质的问题,每个程序员也都了解这种要求的必要性。于是,2个月后,当下一个版本准备好时,程序和数据已经可以回退了。我们曾经都认为难以克服的困难变得相当简单了。