什么是灰度发布?灰度发布几种类型

这篇具有很好参考价值的文章主要介绍了什么是灰度发布?灰度发布几种类型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、方案背景介绍

1. 什么是灰度发布

灰度发布是指在 黑和白(0和1)之间,能够平滑过渡的一种发布方式。

AB test就是一种灰度发布方式,指为产品已发布A版本,在发布B版本时,在同一时间维度,
让一部分用户继续用A版本,一部分用户开始用B版本,如果用户对B版本没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B版本上面来。灰度发布可以保证整体系统的稳定,在初始灰度发布时就可以发现及调整问题,以保证其影响度。

1.2 灰度发布好处

  • 降低发布影响面: 就算出问题,也只会影响部分用户,从而可以提前发现新版本中的 bug,然后在下一次发布前提前修复,避免影响更多用户;
  • 提升用户体验: 除了能发现 bug,还能很好的收集新版本的用户使用反馈,从而提前调整系统,提升用户体验,也能给后续的产品演进带来参考价值。
  • 可以做到不停机的热迁移,版本回滚便捷(速度快)

1.3 背景

针对我们当前现状,使用灰度发布的背景:
在目前app完成测试,准备上线发布时候,就需要运维支持了,其中的挑战点在于如何不影响当前在线业务的情况下来进行升级。
系统升级就会有风险,系统宕机风险,用户使用习惯改变而造成用户流失的风险,服务错误不可用等等风险。
利用灰度发布, 降低发布带来的影响,虽然功能都在test环境测过,但毕竟没发布到prod环境,如果先让少部分用户先使用新版本,提前发现bug,或者性能问题,提前做好修复,就可以降低新版本带来的影响。
其主要思想就是把影响集中到一个点,然后再发散到一个面,出现意外情况后很容易就回退,即使影响也是可控的。

二、灰度发布几种类型

灰度发布的主要分类:

  • 金丝雀发布
  • 滚动发布
  • 蓝绿发布

1)金丝雀发布
金丝雀发布成本较低,只需要一个实例即可降低新版本存在的风险,适合缺乏足够的发布工具研发能力及成长型的小公司。但是,金丝雀发布也有缺点,当升级全部剩余实例时,如果流量过多,可能会导致服务中断。
灰度发布,java,java,服务器,运维

2)滚动发布
滚动发布则是在金丝雀发布的基础上进行的改进和优化,第一次也是使用金丝雀发布,后续则使用多批次的形式发布剩余实例,每次批次之间会进行观察,如果有问题,再进行回滚。
灰度发布,java,java,服务器,运维

3)蓝绿发布

蓝绿发布比较简单,只是对全量发布的一种优化而已,发布前不用全部停机,而是另外部署新版本全部实例,然后再把流量全部再切换到新版本。
灰度发布,java,java,服务器,运维

三、选型

灰度发布,java,java,服务器,运维

全量发布:不建议使用

蓝绿发布:适合于对于资源预算比较充足的业务,或者是比较简单的单体应用,可以快速实现系统的整体变更

金丝雀和全链路灰度:适合需要针对特定用户或者人群进行现网请求验证的业务,可以显著减低风险

综上,建议选择 金丝雀或者全链路灰度 进行服务的升级发布。

四、灰度发布流程及实现思路

用户请求————> 网关----->服务a----->服务b
1、用户会发送请求
2、经过网关分发请求到具体的服务A
3、服务A 调用服务B
[图片]
灰度发布的核心就是路由转发,如果我们能够自定义网关到 服务A 及 服务A到服务B中间的路由策略,就可以实现用户引流,灰度发布。

五、几种实现方案

1)SpringCloud+Redis 实现灰度发布

通过网关寻找下层服务之前,通过拦截器处理请求头的参数信息,通过判断Redis数据当前请求是否符合灰度的要求,如果符合,走灰度服务;否则走正常服务。

灰度发布,java,java,服务器,运维

2)Nginx +Lua + Redis 实现灰度发布

原理:使用nginx做负载均衡和反向代理,nginx内嵌lua模块,解析并执行lua编写的脚本逻辑,可以通过lua解析cookie以及访问redis,而一些灰度发布分流的策略就是放在redis里通过cookie关联

执行过程:

  • 当用户请求到达前段代理服务nginx,內嵌的lua模块解析nginx配置文件中的lua脚本代码
  • lua变量获取到客户端的ip地址,去查询redis缓存内是否有该建值,如果有返回值执行@client_test,否则执行@client
  • location @client_test把请求转发给灰度发布服务,location@client把请求转发给正常服务,服务器返回结果。
    灰度发布,java,java,服务器,运维

3)Openresty+Lua+Redis灰度发布

OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项,用于方便地搭建能够处理高并发、高扩展性的动态 Web 应用、Web 服务和动态网关。
Http协议的灰度功能主要基于ngx_http_lua_module模块实现,Tcp协议的灰度功能主要基于ngx_stream_lua_module模块实现。

本系统实现了对Http协议和Tcp协议的灰度功能,并且提供后台管理系统对灰度白名单进行管理。
三种方式灰度实现:
Http协议灰度实现如下功能:

  • 通过IP或者IP段验证客户端IP是否灰度白名单;
  • 通过获取header头中的userid,验证是否灰度白名单;
  • 通过获取header头中的device-id,验证是否灰度白名单。
    TCP协议灰度实现如下功能:
  • 通过IP或者IP段验证客户端IP是否灰度白名单;
    后台管理系统实现如下功能:
  • 支持对设备deviceId灰度白名单新增、删除和查询功能;
  • 支持对客户端IP灰度白名单新增、删除和查询功能;
  • 支持对用户userId灰度白名单新增、删除和查询功能,同时可以根据配置灰度策略,将满足条件的用户自动导入灰度白名单中。
    灰度发布,java,java,服务器,运维

说明:
1、当用户请求到达前端web(代理)服务器Openresty,内嵌的lua模块解析Nginx配置文件中的lua脚本代码;
2、Lua获取客户端IP地址、userId和设备ID,去查询Redis中是否有该键值,如果有则转发到灰度环境,否则转发到生产环境中;
3、后端管理系统提供可视化界面,可以管理redis中的白名单信息,包括:客户端IP白名单、userId白名单、设备Id白名单。文章来源地址https://www.toymoban.com/news/detail-780916.html

到了这里,关于什么是灰度发布?灰度发布几种类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 常用的几种服务器端口转发实现方式

    Windows和Linux服务器上实现端口转发的几种常用方式: 硬件路由器转发:这个是2种系统都可以使用的方式。可以通过在硬件路由器上设置端口转发规则,将外部请求转发到内部服务器的指定端口上。 以下为Linux系统实现端口转发的几种方式: iptables命令实现端口转发:iptable

    2024年02月09日
    浏览(44)
  • 有哪几种行为会导致服务器被入侵

    导致服务器被入侵的行为有很多种,以下是一些常见的行为: 系统漏洞:服务器操作系统或软件存在漏洞,攻击者可以通过利用这些漏洞获取系统权限,从而入侵服务器。 弱口令:服务器的账号密码过于简单或者未及时更新,攻击者可以通过暴力破解等手段获取系统权限,

    2024年02月22日
    浏览(54)
  • PostgreSQL 查看服务器版本的几种方法

    本文介绍一下查看 PostgreSQL 服务器版本的几种方法。 如果已经连接到 PostgreSQL 服务器,可以执行以下查询语句获取服务器版本信息: 以下是一个返回结果的示例: 如果只需要获取简单的服务器版本号,可以利用配置选项 server_version: 以下是一个输出示例: 另外,配置选项

    2024年02月11日
    浏览(63)
  • 网络socket服务器开发几种并发模型详解

    目录 一、socket创建流程。 二、I/O多路复用 三、服务器开发常见的并发模型 1、模型一:单线程——无IO复用 1.1 模型分析 2、模型二:单线程accept + 多线程读写业务(无IO复用) 模型分析 3、模型三:单线程多路IO复用 模型分析  4、模型四:单线程多路IO复用 + 多线程业务工作

    2024年02月11日
    浏览(38)
  • MacBook 往服务器上传、下载文件的几种操作

    往服务器传文件、下载文件有很多种方法,可以使用scp、rsync或者rs/sz MacBook上的rz和sz 配置起来比较麻烦 这里就不说了 另外 研发和测试同学可能对于scp命令和rsync命令并不了解 这里也不说了 这里直说两种图形化界面的工具 通过jumpserver登录服务器后 可以简单快速实现上传和

    2024年02月16日
    浏览(64)
  • 两台linux服务器之间传输文件的几种方法

    打开powershell, 开始连接服务器 然后输入密码后就进来了,进入之后找到你要传输文件的位置 接下来我要将这个包传到另一个环境中去,有以下几种方法 scp 示例: 将本地服务器的文件传向另一个服务器 wget 【用法】 wget是一个从网络上自动下载文件的自由工具,支持通过HT

    2024年02月12日
    浏览(59)
  • 腾讯云服务器+宝塔+后端+前端发布

    1、申请云服务器。登陆。 https://cloud.tencent.com/   创建实例 最好重置密码,并记住。  配置安全组,当我们是学习的时候,全部开放好了。   有些版本是去“防火墙”那里配置。 轻量应用服务器(试用的)     2、安装Docker。在安装云服务时,我选了Centos7.8+Docker。这里就不

    2024年02月13日
    浏览(63)
  • nodejs发布静态https服务器

    2、执行npm install  新建public目录,并且随便在 public 目录下放个什么 html 文件,比如 test.html 。 用 npm start 启动服务,可以在 Chrome 浏览器内输入地址  https://127.0.0.1:8000/test.html 测试一下。 如果能看到,说明服务正常。

    2024年02月10日
    浏览(46)
  • 发布文件到ubuntu服务器上

    在Xshell连接ubuntu服务器,执行以下代码 ssh ubuntu@服务器ip 1. apt-get update 从服务器拉取可用的包到本地 2. sudo apt-get install apache2 安装apache2 3. ls /var/www 查看该目录下是否有html文件 4. 打开File Zilla Client,打开站点管理,协议那选择SFTP, 主机那输入ubuntu的服务器ip,端口可以写22也可

    2024年02月05日
    浏览(24)
  • 项目发布部署:如何发布.NETCore项目到IIS服务器?

    前言:本文将详细介绍如何发布.NET Core项目到IIS服务器。首先,第一步需要安装IIS,介绍了在本地电脑和服务器中进行安装。然后需要安装SDK和运行时才能发布.NETCore项目。其次介绍了如何发布.NETCore项目和Vue项目,并配置IIS。最后介绍了如何将项目部署到Service服务中。 (

    2024年02月13日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包