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

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

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

二、现代应用发布有哪些模式?
  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等进行数据迁移同步,保证底层数据的一致性,从而可以进行比较全面的灰度发布验证。

相关文章
|
测试技术 应用服务中间件 数据库
灰度发布的系统架构设计
互联网产品需要快速迭代开发上线,又要保证质量,保证刚上线的系统,一旦出现问题可以很快控制影响面,就需要设计一套灰度发布系统。
灰度发布的系统架构设计
|
4月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
417 3
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
7月前
|
缓存 Cloud Native Java
Java 面试微服务架构与云原生技术实操内容及核心考点梳理 Java 面试
本内容涵盖Java面试核心技术实操,包括微服务架构(Spring Cloud Alibaba)、响应式编程(WebFlux)、容器化(Docker+K8s)、函数式编程、多级缓存、分库分表、链路追踪(Skywalking)等大厂高频考点,助你系统提升面试能力。
610 0
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
1511 69
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
10月前
|
Cloud Native Serverless 流计算
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
544 12
|
传感器 监控 安全
智慧工地云平台的技术架构解析:微服务+Spring Cloud如何支撑海量数据?
慧工地解决方案依托AI、物联网和BIM技术,实现对施工现场的全方位、立体化管理。通过规范施工、减少安全隐患、节省人力、降低运营成本,提升工地管理的安全性、效率和精益度。该方案适用于大型建筑、基础设施、房地产开发等场景,具备微服务架构、大数据与AI分析、物联网设备联网、多端协同等创新点,推动建筑行业向数字化、智能化转型。未来将融合5G、区块链等技术,助力智慧城市建设。
622 1

热门文章

最新文章