在一个产品研发过程中,一般在发布前都有线下测试阶段,那么是不是线下测试验证通过后,就可以直接将产品的新代码发布上线,覆盖原来的版本呢?这样做其实有很大的风险,因为线下测试的运行环境和线上环境不是完全一致的,可能线下运行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,导致业务异常。
规避方案:
- 新表中的api的发布顺序与老表中保持一致
- 新表中的主键初始值>老表中的最大主键值;
在发布前,可以采用以上两种方案的任何一种。但如果发布前没有意识到主键冲突的问题,没有采用以上两种方案,则发布后的紧急解决方案就是:立即将导致主键冲突的老表中的api发布,使之移到新表中。在成功发布前,如果仅仅只是读操作,那还比较幸运,只会产生一定量的错误日志,但如果还有写操作,那就悲剧了,会产生脏数据,这时候就需要数据订正了。
本文为原创,转载请注明出处
相关推荐
使用方式 案例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实现灰度发布 -weifengCorp - 博客园upstream hilinux_01 { server 192.168.1.100:8080 m
nginx+lua+redis通过匹配客户端ip进行灰度发布
Devops灰度发布介绍.pdf
springcloud灰度发布方案。包含网关、服务间调用灰度发布代码。详情请参考博客:https://blog.csdn.net/han949417140/article/details/121420529
本文档基于新浪的基于动态发布的灰度系统的学习研究笔记 此外,git上有源码和相关文档
Halcon联合MFC对话框应用程序,从txt文件中读取数据,通过平移和缩放将所有数据控制到0——255之间,生成灰度图像
68张适用于图像处理领域的灰度图像
灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大...
一、灰度数据导出:把图片文件拖放到outputgray.exe上,即可以输出8位的灰度数据。 格式: 原图片名=图片宽=图片高=.dat 二、显示灰度数据:把IMG_008.jpg=800=600=.dat拖放到showdat.exe上即可。 本软件是软能动力...
一幅m×n的灰度图像可以用一个二维矩阵表示,矩阵中的每个元素表示对应像素的灰度值。 灰度直方图表示图像中具有每种灰度级的象素的个数,反映图像中每种灰度出现的频率。 假设图像灰度为16级(灰度值从0-15),现...
灰度发布 技术实现 报告 可行性研究报告 很好的资源 采用lua+nginx方式
灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,提供了最简单例子,详细配置与测试。出自一线大厂技术大牛之手
讲解istio灰度发布,A/B Test, istio应用架构的视频,从nginx ingress带入到istio的微服务治理架构。
本例子将800*600的double类型的数据先进行归一化成0-255的quint8类型的数据,然后将归一化后的数据生成一个QImage,然后将qimage放到qlabel中显示,可以切换灰度图或伪彩图
图像处理灰度图像数据集Set12.zip
灰度图像中字符切分方法的研究 灰度图像中字符切分方法的研究
绝对的原创,也是我第一次做类似的数据处理,里面有我做这个数据原创图片,希望大家能够满意。。。。。。