网站首页 > 精选教程 正文
一、前言
近期有一个项目,客户方要求进行灰度发布。分析了几种方案,最终选择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,进而实现分流。
猜你喜欢
- 2024-10-19 3 种发布策略,解决 K8s 中快速交付应用的难题
- 2024-10-19 Nginx 一个牛X的功能,流量拷贝! nginx 流量统计
- 2024-10-19 「技术干货」Argo Rollouts argocd rollout
- 2024-10-19 zero down-time update服务的方案
- 2024-10-19 面试官竟然问我Nginx如何生成缩略图,还好我看了这篇文章
- 2024-10-19 应用拆分、解耦与灰度发布的探索与实践
- 2024-10-19 Nginx 又一牛 X 功能!流量拷贝 nginx复制转发tcp
- 2024-10-19 tke nginx 操作实例 nginxkeepalive
- 2024-10-19 高可用集群——业务分发和灰度发布
- 2024-10-19 阿里云 MSE + ZadigX ,无门槛实现云原生全链路灰度发布
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)