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

2021年01月15日 阅读数:1
这篇文章主要向大家介绍分布式全链路灰度发布的探索与实践,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

头图.png

做者|顾欣
来源|阿里巴巴云原生公众号安全

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

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

业界传统灰度发布

灰度发布是业界一种规避发布风险的有效的手段,一般能够蓝绿部署、滚动发布、灰度发布等几种方式实现。负载均衡

1. 蓝绿发布

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

1.png
图 1  蓝绿部署运维

2. 滚动发布

滚动升级就是在升级过程当中,不是同时启动全部新版本,是先启动一台新版本,再中止一台老版本,以此类推,直到升级完成。可是滚动升级存在风险,在开始滚动升级后,流量会直接流向已经启动起来的新版本,可是新版本是不必定可用的,好比须要进一步的测试才能确认。那么在滚动升级期间,整个系统就处于很是不稳定的状态,若是发现了问题,也比较难以肯定是新版本仍是老版本形成的问题。分布式

2.png
图 2  滚动发布ide

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