`
海浪儿
  • 浏览: 274634 次
  • 性别: 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值不相等,则不进行匹配

    互联网产品灰度发布流程

    灰度发布的核心思想是将新功能的影响范围控制在一个较小的范围内,以便在出现问题时能够迅速回滚,减少负面影响。这种策略通常分为以下几个阶段: 1. **内部测试**:首先在公司内部进行测试,确保新功能的基本稳定...

    使用Nginx实现灰度发布1

    以下是一个简单的Nginx配置示例,用于展示如何配置灰度发布: ```nginx upstream hilinux_01 { server 192.168.1.100:8080 max_fails=1 fail_timeout=60; } upstream hilinux_02 { server 192.168.1.200:8080 ...

    Devops灰度发布介绍.pdf

    灰度发布是指在软件发布过程中,逐步将新版本部署到生产环境中,以减少风险和影响范围。本文将介绍DevOps灰度发布的概念和实践,了解其在软件开发和发布过程中的应用和优点。 DevOps灰度发布的概念 DevOps灰度发布...

    灰度图像数据集.zip

    标题中的“灰度图像数据集.zip”表明这是一个包含灰度图像的数据集合,通常用于图像处理、分析或机器学习任务。灰度图像不同于彩色图像,它只有一个颜色通道,呈现出从黑到白的不同灰度层次,因此在计算上更为简单,...

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

    2. 背景:在快速迭代的互联网环境中,灰度发布作为一种渐进式部署策略,允许产品团队逐步推出新功能,同时减少对用户的影响,降低系统风险。通过结合lua脚本与nginx服务器,我们可以实现灵活、高效的灰度发布方案。 ...

    互联网产品的灰度发布

    在这个过程中,产品团队会密切关注用户反馈,并据此不断完善产品功能,这种发布方式在中国被称为“灰度发布”。 #### 二、灰度发布的作用 1. **及早获得用户反馈**:通过早期用户的使用体验,可以迅速发现产品中的...

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

    灰度发布是一种常见的软件发布方式,它允许开发者在生产环境中发布新的版本,同时仍然保留旧版本,以便在出现问题时快速回退。 pierwszym krokiem 是安装 Lua 环境及相关库。在安装之前,需要安装 gcc 和 gcc-c++...

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

    在本文中,我们将深入探讨如何使用Halcon与MFC(Microsoft Foundation Classes)库结合,从TXT文本文件中读取数据并将其转换为灰度值,最终生成灰度图像。Halcon是一款强大的机器视觉软件,而MFC是微软提供的C++类库...

    服务灰度发布方案.docx

    在灰度发布中,OpenResty 的配置文件 nginx.conf 需要进行修改,以适应灰度发布的需求。例如,可以在配置文件中添加灰度发布的规则,以便控制流量的分配。 OpenResty 的 AB Testing Gateway 是基于 OpenResty 的...

    夜光灯数据灰度值提取

    为了进行灰度值提取,这里仅加载一个波段。 2. **设置符号系统** 在加载图片后,通过右键点击图片属性,选择“符号系统”选项,然后进入“已分类”模式,并将分类中的类别数设置为2。这样做的目的是将图像中的...

    基于 Nginx 的 Java Web 项目灰度发布框架.zip

    在这个场景中,我们讨论的是一个基于Nginx的Java Web项目灰度发布框架。下面将详细介绍这个框架的关键知识点。 首先,**Nginx** 是一个高性能的HTTP和反向代理服务器,广泛用于负载均衡、缓存和内容分发等任务。在...

    完整MINIST数据集BMP灰度格式(60000训练数据, 10000测试数据)

    标题中的“完整MINIST数据集BMP灰度格式(60000训练数据, 10000测试数据)”是指一个经过处理的MINIST数据集,它包含60,000个用于训练的图像和10,000个用于测试的图像。这些图像都是手写数字,被转化为BMP灰度格式,这...

    springcloud灰度发布方案

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

    互联网应用灰度发布建设实践.pdf

    在互联网应用中,灰度发布通过让一部分用户先使用新版本,根据这些用户的反馈来调整和优化新版本,再逐步扩大新版本的使用范围,从而确保应用的稳定性和质量。 灰度发布的优点主要体现在以下几个方面: 1. 提高...

    900张灰度图片数据集.zip

    通过以上步骤,我们可以利用这个灰度图片负样本数据集,有效地训练出一个能准确识别特定目标的模型,为实际应用提供强大的支持。无论是学术研究还是工业实践,这个数据集都是一个宝贵的资源,有助于提升计算机视觉...

    灰度发布系统一次实践

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

    景观颜色和灰度图像数据集

    景观颜色和灰度图像...这个数据集包括街道,建筑物,山脉,冰川,树木等和他们相应的灰度图像在两个不同的文件夹。创建这个数据集的主要目的是创建自动编码器网络,可以彩色灰度景观图像。该数据集共有14.3K张照片。

Global site tag (gtag.js) - Google Analytics