在代码上线时如何避免多台服务器代码不一致引发脏数据呢?

大型的互联网产品总会有多台服务器支撑整个产品系统的运行,如果发布新版本代码的时候(比如我们公司还是最暴力的复制/粘贴,当然有自己的自动上线工具也不太可能避免这种问题),由于多台机器代码上线会有一定的延迟,造成的结果可能是机器代码版本不一致,导致处理请求造成不同的处理结果,引发脏数据问题,应该如何避免呢?

- 1,兼容,2,分步升级+导流控制;

- 1,兼容,2,公告+暂停服务+自动化脚本;

- 多环境的部署会导致数据差异,自动化的数据库部署脚本和上线演练很重要;

- 新代码尽量保证兼容性,如果不能看业务是否能够容忍短时间内的脏数据,不能的话需要有脚本做数据修复,灰度的时候有很多celue ,可以想办法让一部分固定用户访问到新代码;

- 新代码保证对老代码的兼容这是根本;

- 兼容性很重要,如果业务调整比较大,可以对数据做处理,再不行只能暂停服务;

- 1.发布提速,并发发布;2.上线后清除缓存;

- jenkins+haproxy+少量的部署脚本+合理的发布方案,应该可以减少问题;

- 自动化上线啊,一个shell脚本也没多难;

- 文件完全同步之后切换转发指向;

- 具体问题具体分析,拿脏数据问题举例,可以通过数据版本号解决;

- 自动化,兼容,适当暂停服务;

- 首先一份代码部署到多台是必须的吗?其次,程序实现上是否增加版本控制?

- 以交易支付系统为例,首先暂停业务方对于支付服务的调用,之后的业务方请求记录操作日志,交易系统升级,升级完毕之后恢复业务方支付调用,通过服务恢复暂停期间操作日志,起补偿作用;

- 如果出现脏数据说明你们分流出现了问题,当部署时,难道不是对于机器做有效屏障吗?比如你们决定部署到哪些机器为新版本,暂停对这些机器的访问吗?当部署成功之后将旧版本代码下线和新代码机器版本同步,保证上线下线为一个事务,确保最终都是新代码;

原文发布于微信公众号 - 服务端技术杂谈(ITIBB2014)

原文发表时间:2016-08-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FD的专栏

【架构拾集】 微前端:微应用化

微应用化与微前端架构相当的类似,它们在开发时都是独立应用,在构建时又可以按照需求单独加载。如果以微前端的单独开发、单独部署、运行时聚合的基本思想来看,微应用化就...

1173
来自专栏python开发者

Web应用多账号系统设计及微信扫码登录实现

Web应用多账号系统设计及微信扫码登录实现 1   前言概述 公司对功能测试,性能测试,安全测试等等都做了比较好的自动化后,急需要一个MIS系统来统一管理这些结...

5506
来自专栏跨界架构师

做了「负载均衡」就可以随便加机器了吗?这三招来帮你!

        这篇是《分布式关注点系列》中「负载均衡」相关的内容最后一发了,后续也会继续讲「高可用」相关的其它主题,主要是限流、降级、熔断之类的吧,具体还没定...

1425
来自专栏JAVA技术zhai

大话微服务架构的故障隔离及容错处理机制

8、限流器和负载开关(Rate Limiters and Load Shedders)

2782
来自专栏移动开发平台

零代码三步快速集成腾讯移动分析(MTA)(android)

腾讯移动分析有专业的移动应用数据分析能力,为您的应用提供实时数据统计分析服务。

5.6K9
来自专栏非著名程序员

如何用好 GitHub 中的 Watch、Star、Fork

在每个 github 项目的右上角,都有三个按钮,分别是 watch、star、fork,但是有些刚开始使用 github 的同学,可能对这三个按钮的使用却不怎...

36710
来自专栏Java架构沉思录

微服务架构下静态数据通用缓存机制

在分布式系统中,特别是最近很火的微服务架构下,有没有或者能不能总结出一个业务静态数据的通用缓存处理机制或方案,这篇文章将结合一些实际的研发经验,尝试理清其中存在...

882
来自专栏散尽浮华

网站系统架构梳理-解决高负载高并发

随着互联网业务的不断丰富,网站系统架构已经细分到方方面面,尤其对于大型网站来说,所采用的技术更是涉及面非常广,从硬件到软件、编程语言、数据库、WebServer...

47211
来自专栏韩伟的专栏

浅析海量用户的分布式系统设计(1)

为什么海量的用户访问,会让一个服务器端系统变得更复杂?本文就是想从最基本的地方开始,探寻服务器端系统技术的基础概念。

31.5K7
来自专栏微信小开发

整合微信小程序的Web API接口层的架构设计

来源:伍华聪 cnblogs.com/wuhuacong/p/7267333.html 例如:《C#开发微信门户及应用--微信各个项目模块的定义和相互关系》介绍...

39910

扫码关注云+社区

领取腾讯云代金券