大型的互联网产品总会有多台服务器支撑整个产品系统的运行,如果发布新版本代码的时候(比如我们公司还是最暴力的复制/粘贴,当然有自己的自动上线工具也不太可能避免这种问题),由于多台机器代码上线会有一定的延迟,造成的结果可能是机器代码版本不一致,导致处理请求造成不同的处理结果,引发脏数据问题,应该如何避免呢?
- 1,兼容,2,分步升级+导流控制;
- 1,兼容,2,公告+暂停服务+自动化脚本;
- 多环境的部署会导致数据差异,自动化的数据库部署脚本和上线演练很重要;
- 新代码尽量保证兼容性,如果不能看业务是否能够容忍短时间内的脏数据,不能的话需要有脚本做数据修复,灰度的时候有很多celue ,可以想办法让一部分固定用户访问到新代码;
- 新代码保证对老代码的兼容这是根本;
- 兼容性很重要,如果业务调整比较大,可以对数据做处理,再不行只能暂停服务;
- 1.发布提速,并发发布;2.上线后清除缓存;
- jenkins+haproxy+少量的部署脚本+合理的发布方案,应该可以减少问题;
- 自动化上线啊,一个shell脚本也没多难;
- 文件完全同步之后切换转发指向;
- 具体问题具体分析,拿脏数据问题举例,可以通过数据版本号解决;
- 自动化,兼容,适当暂停服务;
- 首先一份代码部署到多台是必须的吗?其次,程序实现上是否增加版本控制?
- 以交易支付系统为例,首先暂停业务方对于支付服务的调用,之后的业务方请求记录操作日志,交易系统升级,升级完毕之后恢复业务方支付调用,通过服务恢复暂停期间操作日志,起补偿作用;
- 如果出现脏数据说明你们分流出现了问题,当部署时,难道不是对于机器做有效屏障吗?比如你们决定部署到哪些机器为新版本,暂停对这些机器的访问吗?当部署成功之后将旧版本代码下线和新代码机器版本同步,保证上线下线为一个事务,确保最终都是新代码;