灰度生产部署方案记录

目录

灰度环境

部署架构

Nginx配置

其他


灰度环境

       什么是灰度环境?我们先看看百度上对于灰度发布的定义,如下:

       灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。

       灰度期:灰度发布开始到结束期间的这一段时间,称为灰度期。

       从产品功能角度来说,新上线某个功能,可以让一部分用户先体验,或者对某个存量功能做了改造,但是先让一部分用户进行试用,等功能稳定,并且反馈较好的时候,再到正式环境发布。

       从开发的角度来说,我理解灰度环境其实是准生产环境,也就是说数据库、中间件这些应该是和生产环境公用的。

       这里要区分测试环境和灰度环境,主要区别就是灰度环境其实也是准生产环境,也就是说在灰度环境上操作产生的数据也会同步在生产环境有体现。

部署架构

       项目基本信息:后端使用SpringBoot、dubbo,前端使用vue。前后端分离的开发方式,静态资源直接放在Nginx的html下,通过Nginx代理出去访问。

       项目包括的主要工程有:

       (1)登陆及门户框架工程

       主要是登陆校验以及登陆成功后的主框架。 主框架左侧是菜单区域,这个前端工程不区分灰度和生产,因为功能比较独立和稳定,菜单区域的菜单根据用户类型不同,url有区别。 菜单表中关于url配置有有两个字段,生产url和灰度url。 灰度用户登陆成功之后查询的是灰度url。所以对于门户工程这里,点击菜单的时候,访问的url一定待/grey,也就是到灰度环境。

       (2)所有业务功能对应的前端工程

       这是所有业务功能的前端工程。

       (3)网关应用

       主要是做请求转发和静态资源缓存的,网关是所有请求的统一入口,包括静态资源也是从网关返回的,所以网关中会配置对应静态资源的Nginx地址。 因此灰度网关和生产网关的配置会有差别。 主要体现在zk和静态资源的nginx地址不同。网关通过dubbo请求向后调用业务后端。

       (4)业务后端应用

       实际业务开发的后端应用。

       项目不同,需求肯定是有差异的,我今天要讲的灰度方案不一定适用于所有项目,仅供参考。关于这套灰度方案有以下几点要求:

       (1)用户需要区分灰度用户和生产用户,灰度用户访问灰度环境,生产用户访问生产

       (2)灰度环境和生产环境公用一套Nginx集群,有相同的系统入口

       (3)灰度发布的时候,只发布灰度环境,生产环境对应的应用版本不变。

       (4)灰度环境和生产使用相同的数据层。

       可能会有人说,如果会灰度和生产都用同一套数据库,如果新上线的功能需要对存量表进行修改,生产的应用不升级就会报错,怎么办?这种情况其实是有可能存在,但是一般情况下,对于有灰度环境的系统或者产品而言,一定是有实际的生产用户在用,这种场景下一定是会杜绝出现对现有表模型某个字段做修改的情况,因为影响范围比较大,毕竟,鱼和熊掌不可兼得嘛,所以我们也无需纠结这些细节。

              下面我们来看一张部署及请求架构图:

       实现这个灰度方案的主要关键点在于:

       (1)通过在url请求中添加/grey来区分是否是灰度请求

       (2)前端打包的时候,根据打包的命令不同,axios的请求的url地址不同,灰度环境前面有/grey

       (3)前端打包的时候,所有请求都使用相对路径,即使用浏览器当前默认域

       (4)网关节点是连接前后端的重要枢纽,生产网关配置生产的zk,配置生产Nginx的url地址,灰度网关配置灰度zk,配置灰度Nginx的地址

       (5)灰度发布的时候,只更新灰度Nginx下的前端静态资源,和灰度app。

       请求通过F5进来之后,先到Nginx,Nginx根据是否有/grey,转到对应的网关,通过这条线其实就能区分开请求了。

Nginx配置

       两个nginx的配置是一模一样的,Nginx本身不区别灰度和生产,唯一的区别就是静态有区别。

upstream api-gateway {
 sticky;
 server 10.26.80.19:18083;
 server 10.26.80.20:18083;
}
  
upstream api-gateway-grey {
 sticky;
 server 10.26.80.19:18084;
 server 10.26.80.20:18084;
}

server{
 listen 8013;
 server_name 10.20.230.158;
 
 location /grey/{
  proxy_pass http://api-gateway-grey;
 }
 
 location / {
  proxy_pass http://api-gateway;
 }
}

其他

       从我个人的理解来说:
       (1)我觉这算不上一种很好的灰度方案,理想的灰度方案应该是不区分所谓的灰度用户的,应该是松耦合灵活发布的。比如我们对功能A做了改造和升级,在灰度发布之后,某一小部分用户(随机或者灵活指定)就会发现这个功能和升级前不同了,但是其他用户看到的还是之前的功能。 这才是互联网产品的一个灰度发布效果。

       (2)大部分企业级的系统其实没必要这么复杂,为了xx而xx,完全没必要,但是很多时候甲方的负责人可能是SB,态度就是:我不管,我就是要,你弄不了你想办法。初衷是怎么把这个系统吹的很高大上,而不是切合实际的解决一线的问题。 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
灰度级饱和指的是图像中灰度值的范围。在灰度图像中,灰度级饱和表示灰度值的分布范围是否充分利用了整个灰度范围。如果灰度级饱和度高,表示图像中的灰度值在整个灰度范围内都有分布,灰度变化丰富,图像的细节和层次感比较明显。相反,如果灰度级饱和度低,表示图像中的灰度值集中在某一个范围内,灰度变化比较平坦,图像的细节和层次感可能较弱。因此,灰度级饱和度是评估图像灰度分布均匀性和细节丰富程度的一个指标。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [灰度灰度级、分辨率、像素值 概念解析](https://blog.csdn.net/weixin_44489823/article/details/116563778)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [灰度测试是什么意思](https://blog.csdn.net/londa/article/details/120171049)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值