分布式全链路灰度发布的探索与实践

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 Prometheus 版,每月50GB免费额度
应用实时监控服务-用户体验监控,每月100OCU免费额度
简介: 在分布式系统中,由于分布式全链路灰度发布因其链路复杂、技术门槛高、落地难度高逐渐成为金融科技实现全链路灰度发布的难点所在。工行在分布式系统建设方面一直走在同业前列,积极探索分布式全链路灰度发布,致力于解决分布式架构下跨应用、跨服务的全链路灰度发布能力。

头图.png

作者|顾欣
来源|阿里巴巴云原生公众号

互联网金融时代下,金融产品和服务模式不断创新,金融系统容量需求急剧增长,为进一步满足运维标准提升工作的需求,提升服务连续性水平。中国工商银行(后简称工行)从 2014 年开始分布式架构转型的技术预研工作,通过对开源微服务框架深入调研和技术选型后,确定了基于开源 Dubbo 自主研发建设分布式服务平台,并结合金融场景,工行在 Dubbo 基础上对服务的注册、发现等核心能力进行了三十余项定制,以支持单注册中心超 70 万提供者的超大规模业务场景。分布式服务作为分布式体系的核心能力,助力工行应用架构向分布式、服务化转型,承载未来开放平台核心银行系统。

在分布式系统中,由于分布式全链路灰度发布因其链路复杂、技术门槛高、落地难度高逐渐成为金融科技实现全链路灰度发布的难点所在。工行在分布式系统建设方面一直走在同业前列,积极探索分布式全链路灰度发布,致力于解决分布式架构下跨应用、跨服务的全链路灰度发布能力。

业界传统灰度发布

灰度发布是业界一种规避发布风险的有效的手段,通常可以蓝绿部署、滚动发布、灰度发布等几种方式实现。

1. 蓝绿发布

蓝绿部署是指同时运行两个版本的应用,如图1所示,蓝绿部署的时候,原有版本不停止服务,直接部署一套新版本,新版本正常运行后,再将流量切换到新版本。但是蓝绿部署要求在升级过程中,同时运行两套程序,对硬件的要求就是日常所需的两倍。

1.png
图 1  蓝绿部署

2. 滚动发布

滚动升级就是在升级过程中,不是同时启动所有新版本,是先启动一台新版本,再停止一台老版本,以此类推,直到升级完成。但是滚动升级存在风险,在开始滚动升级后,流量会直接流向已经启动起来的新版本,但是新版本是不一定可用的,比如需要进一步的测试才能确认。那么在滚动升级期间,整个系统就处于非常不稳定的状态,如果发现了问题,也比较难以确定是新版本还是老版本造成的问题。

2.png
图 2  滚动发布

3. 灰度发布

灰度发布即先启动一个新版本应用,但是并不直接将流量切过来,而是测试人员对新版本进行线上测试。如果没有问题,那么可以将少量的用户流量导入到新版本上,然后再对新版本做运行状态观察,收集各种运行时数据,如果此时对新旧版本做各种数据对比,就是所谓的 A/B 测试。当确认新版本运行良好后,再逐步将更多的流量导入到新版本上,在此期间,还可以不断地调整新旧两个版本的运行的服务器副本数量,以使得新版本能够承受越来越大的流量压力。直到将 100% 的流量都切换到新版本上,最后关闭剩下的老版本服务,完成灰度发布。如果在灰度发布过程中(灰度期)发现了新版本有问题,就应该立即将流量切回老版本上,这样,就会将负面影响控制在最小范围内。

3.png
图 3  灰度发布

工行对企业级链路灰度发布能力探索

工行从 2015 年开启了 IT 架构转型工程,分布式体系已覆盖百余个关键应用,已有上万分布式服务节点,日均服务调用量超 60 亿,交易峰值逾 10 万 TPS,实现了远程主机性能容量的集群处理能力。截至 2019 年,工行各项目主要通过滚动升级、蓝绿发布、业务开关三种方式实施了灰度发布。

随着 IT 架构转型,分布式体系支撑的服务的底层架构和平台系统日益复杂,生产运行不确定因素相较于主机明显增加,这就对生产系统稳定运行提出了更高的要求。工行于 2020 年上半年已支持分布式全链路灰度发布方式,旨在复杂分布式场景中,针对行内重点产品线、重点应用、公共支撑平台,形成统一的灰度发布规范,为重点产品线提供了全链路灰度发布能力的技术支撑。

1. 面对多样化金融业务场景,构建企业级全链路灰度能力

工行目前已有近 10 亿账户,每日通过多种渠道处理近 2 亿笔支付结算业务,对系统的高可用能力要求极高。面对不同产品线,迫切需要端到端的全链路灰度发布,来降低版本发布的风险。工行全链路灰度发布能力通过对业务流量进行染色,联合软负载均衡、网关、服务框架等多个组件,实现染色流量按标签进行路由,支持跨应用、跨节点的全链路灰度路由能力,并建立灰度发布运维监控体系和管控机制。

4.png
图 4  工行全链路灰度流程

2. 流量标签级灰度路由能力,驾驭金融业务场景

全链路灰度发布采用标签路由的方式,通过软负载和服务框架识别染色流量中的标签和灰度环境节点标签,实现对应染色流量只在对应标签的灰度环境中流转。

1)软负载灰度流量分发

软负载通过识别流量中的灰度标签,把灰度流量路由发送至对应标签的灰度环境,实现灰度流量的第一级分发。

5.png
图 5  软负载灰度路由

2)服务框架灰度路由

灰度请求流量流转到业务层服务化节点后,后续流量就由服务框架代管,通过 RPC(Dubbo)协议流转,服务框架的标签路由层会自动识别本次请求是否携带灰度流量标识,并筛选特定的灰度环境并转发请求。

6.png
图 6  服务框架灰度路由

3)灰度标签链路透明传递

在业务服务层,服务框架负责灰度标签的传递。Dubbo 提供了优雅的隐式参数机制,方便地传递上下游的一些标记和控制消息,而实现对业务无感的能力。工行微服务框架在此机制上,将灰度标签作为一隐式参数,在消费方发起请求切面中自动将该参数设置在请求中,使得灰度流量在链路传递过程中,其携带的灰度标识能被层层传递下去,实现全链路灰度发布能力。

7.png
图 7  灰度标识透明传递

4)灰度降级保障业务交易安全执行

当链路中存在环节所有服务节点灰度标识均无法匹配灰度请求标识,则灰度请求在该环境通过正常节点处理,且保证灰度标识能继续向下游传递。保障系统高可用能力,防止流量找不到对应标识节点而出现交易失败的情况。

8.png
图 8  灰度降级

3. 总结

目前工行已建设统一的全链路灰度发布标准,降低了各应用实现灰度发布的改造人力成本及灰度环境建设难度,提高了研发效率,最终实现跨应用、跨服务的一致性灰度发布能力。已在聚合支付业务线、手机银行业务线等二十余个应用实现了全链路灰度发布能力。

未来展望

随着工行 IT 架构转型的持续推进,工行将持续构建以主机和平台双核心的金融信息系统,保证金融服务的稳定运行,支撑高频业务快速增长。以“开放性、高容量、易扩展、成本可控、安全稳定、便捷研发”为建设理念,在分布式全链路灰度发布领域积极推动技术创新、管控升级,覆盖银行核心交易链路场景,持续完善全链路灰度发布模式,减少应用接入成本,提升全链路灰度发布中各组件兼容适配能力,以适应复杂的分布式金融交易场景,为智慧银行建设提供有力支撑。

相关文章
|
1月前
|
数据采集 人工智能 分布式计算
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
阿里云推出的MaxFrame是链接大数据与AI的分布式Python计算框架,提供类似Pandas的操作接口和分布式处理能力。本文从部署、功能验证到实际场景全面评测MaxFrame,涵盖分布式Pandas操作、大语言模型数据预处理及企业级应用。结果显示,MaxFrame在处理大规模数据时性能显著提升,代码兼容性强,适合从数据清洗到训练数据生成的全链路场景...
94 5
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
|
1月前
|
存储 运维 安全
盘古分布式存储系统的稳定性实践
本文介绍了阿里云飞天盘古分布式存储系统的稳定性实践。盘古作为阿里云的核心组件,支撑了阿里巴巴集团的众多业务,确保数据高可靠性、系统高可用性和安全生产运维是其关键目标。文章详细探讨了数据不丢不错、系统高可用性的实现方法,以及通过故障演练、自动化发布和健康检查等手段保障生产安全。总结指出,稳定性是一项系统工程,需要持续迭代演进,盘古经过十年以上的线上锤炼,积累了丰富的实践经验。
|
2月前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
2月前
|
机器学习/深度学习 存储 运维
分布式机器学习系统:设计原理、优化策略与实践经验
本文详细探讨了分布式机器学习系统的发展现状与挑战,重点分析了数据并行、模型并行等核心训练范式,以及参数服务器、优化器等关键组件的设计与实现。文章还深入讨论了混合精度训练、梯度累积、ZeRO优化器等高级特性,旨在提供一套全面的技术解决方案,以应对超大规模模型训练中的计算、存储及通信挑战。
119 4
|
3月前
|
NoSQL Java 数据处理
基于Redis海量数据场景分布式ID架构实践
【11月更文挑战第30天】在现代分布式系统中,生成全局唯一的ID是一个常见且重要的需求。在微服务架构中,各个服务可能需要生成唯一标识符,如用户ID、订单ID等。传统的自增ID已经无法满足在集群环境下保持唯一性的要求,而分布式ID解决方案能够确保即使在多个实例间也能生成全局唯一的标识符。本文将深入探讨如何利用Redis实现分布式ID生成,并通过Java语言展示多个示例,同时分析每个实践方案的优缺点。
101 8
|
5月前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
3年前的云栖大会,我们发布分布式云容器平台ACK One,随着3年的发展,很高兴看到ACK One在混合云,分布式云领域帮助到越来越多的客户,今天给大家汇报下ACK One 3年来的发展演进,以及如何帮助客户解决分布式领域多云多集群管理的挑战。
阿里云容器服务 ACK One 分布式云容器企业落地实践
|
6月前
|
存储 分布式计算 Hadoop
【揭秘Hadoop背后的秘密!】HDFS读写流程大曝光:从理论到实践,带你深入了解Hadoop分布式文件系统!
【8月更文挑战第24天】Hadoop分布式文件系统(HDFS)是Hadoop生态系统的关键组件,专为大规模数据集提供高效率存储及访问。本文深入解析HDFS数据读写流程并附带示例代码。HDFS采用NameNode和DataNode架构,前者负责元数据管理,后者承担数据块存储任务。文章通过Java示例演示了如何利用Hadoop API实现数据的写入与读取,有助于理解HDFS的工作原理及其在大数据处理中的应用价值。
147 1
|
6月前
|
机器学习/深度学习 人工智能 负载均衡
【AI大模型】分布式训练:深入探索与实践优化
在人工智能的浩瀚宇宙中,AI大模型以其惊人的性能和广泛的应用前景,正引领着技术创新的浪潮。然而,随着模型参数的指数级增长,传统的单机训练方式已难以满足需求。分布式训练作为应对这一挑战的关键技术,正逐渐成为AI研发中的标配。
240 5
|
6月前
|
存储 Kubernetes 监控
深入浅出分布式事务:理论与实践
在数字化时代的浪潮中,分布式系统如同星辰大海般浩瀚而深邃。本文将带你航行于这片星辰大海,探索分布式事务的奥秘。我们将从事务的基本概念出发,逐步深入到分布式事务的核心机制,最后通过一个实战案例,让你亲自体验分布式事务的魅力。让我们一起揭开分布式事务的神秘面纱,领略其背后的科学与艺术。
109 1
|
6月前
|
Go API 数据库
[go 面试] 分布式事务框架选择与实践
[go 面试] 分布式事务框架选择与实践