09月09, 2010

如何减少代码上线过程中对线上服务的影响

目前现状

在一些大公司中,每个服务几乎都有CDN,也就是说一个服务都有很多很多的服务器。并且一般做服务优化的话往往是把程序和静态资源放在不同的服务器上。

在实际开发中,一般是按功能将代码分成不同的模块。上线时OP一般是一个模块一个模块的上线。虽然上线时是并行上线的,但每个模块以及模板与静态资源生效是有时间差的。尤其是模块之间依赖程度很高,如:模板和静态资源依赖程度很高,上线有时间差极有可能出现JS报错或者一些点击不能响应。 所以在上线这个时间差内,用户在操作过程中极有可能出现问题。

解决方案

改变已有的一个模块一个模块的上线方案,而是先将所有要上线的文件都传到各个机器上去,并不是直接覆盖线上文件,而是通过一个的规则成为新建的文件。

如:我要上线覆盖的文件夹为 vote,那么先将代码都拷贝到vote.online文件下(各个机器),其他模块的代码拷贝到其他对应的文件夹下。待所有要上线的代码都准备好后,然后执行mv的操作,将要上线的代码覆盖到真正的文件夹下。在这个过程中,虽然要有时长,但这个时间要小很多。

借助自动化上线,这种方式要比现有的上线要快很多。上线时间差越小,对线上服务的影响越小。

特殊情况

上面讲的方式虽然将时间差缩小了很多,但还是有一些很小的时间差。对于一般的服务大家都是可以接受的,但对于一些交易类的服务(如:电子商务,金融),这种时间差还是不能接受的。对于这种要求非常严格的服务估计还是只能夜里停服务上线了。

本文链接:http://welefen.com/post/reduce-bad-online-service-on-upgrade.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。