搭建具备灰度发布能力的技术架构

简介: 随着微服务架构的普及,服务数量激增,版本更新频繁,如果缺少灰度的能力,容易对现有的生产运行业务造成影响,并且新上线的系统和功能也需要灰度的能力来验证可行性和效果,简而言之,无论是对于系统运行稳定安全还是对于验证业务效果,灰度发布/验证的能力都是现代软件架构所必须的。本文讨论并建议了几种灰度发布的实现机制。
一、为什么需要具备灰度发布能力?

随着微服务架构的普及,服务数量激增,版本更新频繁,如果缺少灰度的能力,容易对现有的生产运行业务造成影响,并且新上线的系统和功能也需要灰度的能力来验证可行性和效果,简而言之,无论是对于系统运行稳定安全还是对于验证业务效果,灰度发布/验证的能力都是现代软件架构所必须的。

二、现代应用发布有哪些模式?
  1. 蓝绿发布
  • 定义
    蓝绿发布,是在生产环境稳定集群之外,额外部署一个与稳定集群规模相同的新集群,并通过流量控制,逐步引入流量至新集群直至100%,原先稳定集群将与新集群同时保持在线一段时间,期间发生任何异常,可立刻将所有流量切回至原稳定集群,实现快速回滚。直到全部验证成功后,下线旧集群,流量全部切换到新的集群。
  • 优点
    老版本应用不需要停机,可以实现快速回退。
  • 缺点
    需要两倍的机器资源用于部署相同规模的集群。
  1. 滚动发布
  • 定义
    取出应用集群中的一个或者多个应用实例停止服务并进行新版本的更新,然后将新版本投入使用,通过逐个替换实例来逐步部署新版本的应用,直到所有实例都被替换完成为止。例如第一批次10%的实例更新版本,第二批次30%的实例更新版本,最后一批次60%的实例更新版本。一般来说前面的批次需要比较长的验证时间,在验证通过风险降低以后逐步放大更新的比例。滚动发布期间,新旧版本共存。
  • 优点
    用户体验平滑、自动化程度高,无需额外的资源投入。
  • 缺点
    由于滚动更新的过程一般分成多个批次,需要等待验证的时间间隔较长,发布和回退的时间比较长;按照批次更新,需要平滑的流量过度机制,发布工具复杂。
  1. 灰度发布
  • 定义
    灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。与蓝绿发布有明显区别的是蓝绿发布需要两倍的机器资源,其主要目的在于安全的发布应用,而灰度发布的目的在于小流量的测试来获得一定的验证结论。
    金丝雀发布名称的由来:17世纪,英国矿井工人发现金丝雀对于瓦斯十分敏感,于是下井时都会带上一只金丝雀作为瓦斯危险程度的提示指标。
    一般情况下,灰度发布是额外部署一个金丝雀的服务实例为新版本,如果验证金丝雀实例验证通过,则一次性更新其他的版本,发布期间新旧版本共存。
    灰度发布.png
  • 优点
    部署新的金丝雀版本进行验证,对于用户体验影响较小,只影响灰度部分的用户流量,资源的损耗比较小。
  • 缺点
    占用少量的资源。
三、前端应用的灰度发布
  1. 使用nginx upstram或者split_clients使用nginx upstram模块或者或者split_clients模块实现前端应用按照一定的比例进行分流,从而实现灰度,具体可以参考文章:《使用nginx split_clients实现AB测试》。
  • 优点
    路由配置简单,不引入新的组件。
  • 缺点
    配置不够灵活,逐步调整灰度的比例时需要人工介入,分流和发布流程割裂。
  1. 开源组件ABTestingGatewayABTestingGateway 是一个可以动态设置分流策略的灰度发布系统,工作在7层负载,基于nginxngx-lua 开发,使用 redis 作为分流策略数据库,可以实现动态分流调度功能。

ABTestingGateway.png

  • 优点:
  • 支持多种分流方式,目前包括iprange、uidrange、uid尾数和指定uid分流
  • 动态设置分流策略,即时生效,无需重启
  • 可扩展性,提供了开发框架,开发者可以灵活添加新的分流方式,实现二次开发
  • 高性能,压测数据接近原生nginx转发
  • 灰度系统配置写在nginx配置文件中,有页面可以方便管理员配置
  • 适用于多种场景:灰度发布、AB测试和负载均衡等
  • 缺点:
  • 引入了新的组件,包括nginx-lua和redis,架构变得复杂,维护起来比较困难。
  • 分流和发布流程割裂。
  1. 由服务端进行灰度决策返回前端资源灰度策略保存在服务后端,每次请求发往后端,由后端应用根据策略决策返回不同版本的对应的前端资源,这种方式需要独立开发后端的策略配置服务,并且前后端耦合比较高。
  • 优点
    可以比较灵活的配置,可以配置多版本并行。
  • 缺点
  • 不适用于前后端分离的应用
  • 分流和发布流程割裂。
四、后端应用的灰度发布
  1. 使用nginx upstram或者split_clients
    同前端应用分流类似,可以使用nginx的负载均衡或者客户端分流模块进行分流。
  2. 使用API网关实现灰度
    可以在API网关编写filter,在filter中根据一定的策略进行分流转发,例如根据用户id、根据请求头参数、url参数等,在spring cloud体系中一般是基于ribbon进行转发。
  3. Spring Cloud Gray组件
    Spring Cloud Gray 是一套开源的微服务灰度路由解决方案,是面向于spring cloud体系架构的,它抽象出了spring-cloud-gray-webui提供策略配置页面,spring-cloud-gray-server负责灰度决策、灰度追踪等信息的管理以及持久化,spring-cloud-gray-client定义了一套灰度路由决策模型,灰度信息追踪模型,以及和spring-cloud-gray-server的基本通信功能。
    spring cloud gray组件既可以支持灰度发布,还可以支持蓝绿发布。
    gray.png
    整体架构如上所示,webui提供策略配置,client端从admin获取灰度策略,从注册中心获取到所有的服务实例,根据灰度策略进行灰度分流。

gray-all.png

spring cloud gray类似的方案整体比较完善,有对应的平台可以进行方便的操作,也支持比较细力度的灰度流程,需要比较关注的是引入了一整套的灰度发布的平台,需要多出额外的维护成本,并且一般情况下公司内部都会有自己的发布系统,比较难直接引入在发布流程中使用,这也是上面一直提到的发布和灰度流程割裂的情况,从组件不耦合的角度来看,灰度组件独立是很好的,但也有不少的公司是希望能够结合发布系统在统一的流程管理里面去实现灰度的发布和验证,这也是比较好理解的。针对这种情况建议有条件的可以根据spring cloud gray的实现方案进行内部开发。

五、预发布/沙箱灰度发布

以上的各类方案都是针对前端、后端应用的单独灰度发布方案,在底层数据库结构变更等场景下也不适用,无法实现全流程的灰度,在有条件的情况下,建议搭建独立预发布/沙箱环境,从前端入口、静态资源、后端应用、数据库等全面部署一整套全新的环境,此环境数据库可以通过一些数据库迁移工具如canal等进行数据迁移同步,保证底层数据的一致性,从而可以进行比较全面的灰度发布验证。

相关文章
|
2月前
|
人工智能 运维 监控
构建高性能微服务架构:现代后端开发的挑战与策略构建高效自动化运维系统的关键策略
【2月更文挑战第30天】 随着企业应用的复杂性增加,传统的单体应用架构已经难以满足快速迭代和高可用性的需求。微服务架构作为解决方案,以其服务的细粒度、独立性和弹性而受到青睐。本文将深入探讨如何构建一个高性能的微服务系统,包括关键的设计原则、常用的技术栈选择以及性能优化的最佳实践。我们将分析微服务在处理分布式事务、数据一致性以及服务发现等方面的挑战,并提出相应的解决策略。通过实例分析和案例研究,我们的目标是为后端开发人员提供一套实用的指南,帮助他们构建出既能快速响应市场变化,又能保持高效率和稳定性的微服务系统。 【2月更文挑战第30天】随着信息技术的飞速发展,企业对于信息系统的稳定性和效率要求
|
15天前
|
监控 测试技术 持续交付
构建高效微服务架构的五大关键策略
【4月更文挑战第28天】 在当今快速迭代和竞争激烈的软件市场中,微服务架构已成为组织追求敏捷性、可扩展性和技术多样性的重要解决方案。本文将深入探讨构建高效微服务架构的五大关键策略,涵盖从服务划分到持续集成、监控、安全性以及部署实践。这些策略旨在指导开发者和架构师优化其微服务实施,确保系统的稳定性、性能和安全。
|
2月前
|
Java 开发者 微服务
构建高性能微服务架构:挑战与策略
【2月更文挑战第24天】 在当今快速演变的技术景观中,微服务架构已成为支持复杂应用程序的主流模式。它承诺通过服务的细粒度和独立部署来实现灵活性和可伸缩性。然而,随之而来的是一系列的技术挑战,包括服务发现、配置管理、网络延迟及数据一致性等问题。本文将深入探讨在设计高性能微服务系统时所面临的挑战,并提出一系列切实可行的解决策略,以帮助开发团队优化其架构决策,确保系统的高响应性和可靠性。
12 0
|
2月前
|
监控 NoSQL 测试技术
构建高性能后端服务的关键因素与最佳实践
本文将介绍构建高性能后端服务的关键因素和最佳实践,包括服务器选型、数据库设计、代码优化等方面,帮助开发人员在后端开发中提升性能并满足高并发需求。
132 15
|
4月前
|
SQL 运维 调度
Dataphin V3.14 版本升级|研发平台更易用,治理能力更完备,企业级适配更灵活
Dataphin V3.14 重磅升级,平台支持企业级适配,适配企业特色;研发体验易用性提升,数据研发更高效、任务运维更便捷;数据治理能力更完备,支持多对象批量操作,规则级告警配置、分级分类自动继承继承!
316 0
|
12月前
|
运维 Cloud Native 微服务
带你读《云原生架构白皮书2022新版》——组织能力视角
带你读《云原生架构白皮书2022新版》——组织能力视角
112 0
|
12月前
|
运维 Cloud Native 安全
带你读《云原生架构白皮书2022新版》——业务发展视角
带你读《云原生架构白皮书2022新版》——业务发展视角
199 0
|
12月前
|
运维 Kubernetes Cloud Native
《云原生架构容器&微服务优秀案例集》——05 金融—— 费芮互动 通过 MSE 完成移动支付应用稳定性和安全性双提升
《云原生架构容器&微服务优秀案例集》——05 金融—— 费芮互动 通过 MSE 完成移动支付应用稳定性和安全性双提升
252 0
《云原生架构容器&微服务优秀案例集》——05 金融—— 费芮互动 通过 MSE 完成移动支付应用稳定性和安全性双提升
|
12月前
|
容灾 云计算
《云上容灾交付服务白皮书》——5.交付典型案例——5.1 项目背景
《云上容灾交付服务白皮书》——5.交付典型案例——5.1 项目背景
66 0
|
监控 架构师 中间件
微服务架构转型的一把手需要具备哪些能力?
微服务架构转型的一把手需要具备哪些能力?
116 0