JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

「方法」灰度发布的几种方案,代码层,接入层,网关等

wys521 2024-10-19 09:43:37 精选教程 21 ℃ 0 评论

一、前言

近期有一个项目,客户方要求进行灰度发布。分析了几种方案,最终选择nginx+lua方案。几种方案各有优缺点,大家根据自己的业务场景选择即可。

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


二、实现思路

1、在代码中进行控制

一套线上环境,代码中做开关,对于不同的用户走不同的逻辑。

2、在转发层做

多套(隔离的)线上环境,接入层针对不同用户转发到不同的环境中。当然,如果不严格考虑原环境针对用户的并发问题,可以不使用多套环境。比如原来是4台机器集群,发布时只发布一台,设定规则某些用户的请求转发到这一台,其他的用户走原来的3台(当然这对抗并发性是有影响的,要具体情况具体分析)。


两套方案的优缺点:


在接入层使用的方式,第一是在nginx层实现(使用nginx+lua),第二是在网关层实现(spring-cloud-zuul)。第三是dubbo的灰度,项目中如果使用dubbo,有可能会需要dubbo服务的灰度实现。

我们的场景是要根据用户,区域等多个纬度进行动态灰度。框架是使用的MVC架构的,所以最终采用nginx+lua方式。而要修改nginx,达到动态灰度,是要用C开发的。所以借助了第三方库。下面介绍两个。

OpenResty:是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关

ABTestingGateway:是一个可以动态设置分流策略的灰度发布系统,工作在7层,基于nginx和ngx-lua开发,使用 redis 作为分流策略数据库,可以实现动态调度功能。

ABTestingGateway是在 nginx 转发的框架内,在转向 upstream 前,根据 用户请求特征 和 系统的分流策略 ,查找出目标upstream,进而实现分流。


本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表