`
海浪儿
  • 浏览: 271706 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

数据灰度发布中碰到的一个坑

阅读更多

在一个产品研发过程中,一般在发布前都有线下测试阶段,那么是不是线下测试验证通过后,就可以直接将产品的新代码发布上线,覆盖原来的版本呢?这样做其实有很大的风险,因为线下测试的运行环境和线上环境不是完全一致的,可能线下运行OK,到线上就出问题;另外,对于用户体验方面,在线下测试阶段的用户是不全的,只有测试、开发和PD等人,他们的体验不能完全代表线上的大量用户。另外还有性能方面的原因等等。所以,一般线下测试通过后,在发布阶段会采用灰度发布的方式,选用线上的部分服务器部署新代码,剩下的服务器仍然部署老代码,然后进行引流,部分请求采用部署了新代码的服务器处理,剩下的请求采用仍然部署着老代码的服务器处理。经过一段时间的线上观察,没问题后,再更新所有的服务器。

本文要说的是数据方面的灰度发布,先介绍一下项目背景:项目中,需要新建一个表,原来已发布的api通过新建的管控平台发布后,api配置数据会落在新表里。系统发布后,需要将原来老表中已存在的几十个api通过新建的管控平台进行发布。为了降低风险,采用灰度发布,即不是一次性发布完所有的api,而是慢慢切换,一个api发布后,经过线上观察OK后,再接着发布下一个api。这样就导致在运行过程中,api的数据会来自两个表,部分来自老表,部分来自新表。

灰度发布中忽略了一个问题,由于新的发布顺序和老的发布顺序不一致,会导致老表和新表中不同名称的api可能会具有相同的主键id,譬如:老数据中,名称为A的api是第一个发布的,所以在老表中的主键id就为1,B是第二个发布的,则主键ID就为2;而在新数据中,B是第一个发布的,所以在新表中的主键id就为1,A是第二个发布的,所以在新表中的主键id就为2。因此,在老表和新表中,A和B的主键id都为1。不幸的是,系统中就有其他地方根据主键ID来查询api的功能,这样,对于同一个id,就会对应两条不同的api,导致业务异常。

规避方案:

  1. 新表中的api的发布顺序与老表中保持一致
  2. 新表中的主键初始值>老表中的最大主键值;

       在发布前,可以采用以上两种方案的任何一种。但如果发布前没有意识到主键冲突的问题,没有采用以上两种方案,则发布后的紧急解决方案就是:立即将导致主键冲突的老表中的api发布,使之移到新表中。在成功发布前,如果仅仅只是读操作,那还比较幸运,只会产生一定量的错误日志,但如果还有写操作,那就悲剧了,会产生脏数据,这时候就需要数据订正了。

 

本文为原创,转载请注明出处

0
4
分享到:
评论

相关推荐

    基于Nacos元数据实现灰度发布,可以按照最小粒度灰度发布

    使用方式 案例1: Nacos元数据配置 {"idDeptSign":"040101","ip":"192.168.1.2",...前端请求头的json内容key值如果和Nacos元数据json的key值相等,则value值必须相等,否则不走灰度服务。如果key值不相等,则不进行匹配

    互联网产品灰度发布流程

    在互联网产品的发布过程中也较多采用此种发布方式:产品的发布过程不是一蹴而就,而是逐步扩大使用用户的范围,从公司内部用户-...此种发布方式,按照中国特色的叫法被冠 以”灰度发布“、”灰度放量“、”分流发布“。

    互联网产品的灰度发布

    在传统软件产品发布过程中(例如微软的Windows 7的发布过程中),一般都会经历Pre-Alpha、Alpha、Beta、Release candidate(RC)、RTM、...因此对于灰度发布实际上就是从不发布,然后逐渐过渡到正式发布的一个过程。

    使用Nginx实现灰度发布1

    使Nginx实现灰度发布 -weifengCorp - 博客园upstream hilinux_01 { server 192.168.1.100:8080 m

    nginx+lua+redis通过匹配客户端ip进行灰度发布

    nginx+lua+redis通过匹配客户端ip进行灰度发布

    Devops灰度发布介绍.pdf

    Devops灰度发布介绍.pdf

    springcloud灰度发布方案

    springcloud灰度发布方案。包含网关、服务间调用灰度发布代码。详情请参考博客:https://blog.csdn.net/han949417140/article/details/121420529

    灰度发布系统一次实践

    本文档基于新浪的基于动态发布的灰度系统的学习研究笔记 此外,git上有源码和相关文档

    Halcon联合MFC 从txt中读取数据并将数据转成灰度值之后,生成灰度图像

    Halcon联合MFC对话框应用程序,从txt文件中读取数据,通过平移和缩放将所有数据控制到0——255之间,生成灰度图像

    灰度图像数据集.zip

    68张适用于图像处理领域的灰度图像

    灰度发布经验分享

    灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大...

    灰度数据图片转换器

    一、灰度数据导出:把图片文件拖放到outputgray.exe上,即可以输出8位的灰度数据。 格式: 原图片名=图片宽=图片高=.dat 二、显示灰度数据:把IMG_008.jpg=800=600=.dat拖放到showdat.exe上即可。 本软件是软能动力...

    灰度直方图(字符串数组).cpp

    一幅m×n的灰度图像可以用一个二维矩阵表示,矩阵中的每个元素表示对应像素的灰度值。 灰度直方图表示图像中具有每种灰度级的象素的个数,反映图像中每种灰度出现的频率。 假设图像灰度为16级(灰度值从0-15),现...

    灰度发布技术实现报告模板

    灰度发布 技术实现 报告 可行性研究报告 很好的资源 采用lua+nginx方式

    服务灰度发布方案.docx

    灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,提供了最简单例子,详细配置与测试。出自一线大厂技术大牛之手

    istio灰度发布探索.mp4

    讲解istio灰度发布,A/B Test, istio应用架构的视频,从nginx ingress带入到istio的微服务治理架构。

    qt实现数据转灰度图及伪彩图

    本例子将800*600的double类型的数据先进行归一化成0-255的quint8类型的数据,然后将归一化后的数据生成一个QImage,然后将qimage放到qlabel中显示,可以切换灰度图或伪彩图

    图像处理灰度图像数据集Set12.zip

    图像处理灰度图像数据集Set12.zip

    灰度图像中字符切分方法的研究

    灰度图像中字符切分方法的研究 灰度图像中字符切分方法的研究

    夜光灯数据灰度值提取

    绝对的原创,也是我第一次做类似的数据处理,里面有我做这个数据原创图片,希望大家能够满意。。。。。。

Global site tag (gtag.js) - Google Analytics