作者 | 中国工商银行金融科技研究院云计算实验室
前   言
互联网金融时代,金融产品和服务模式出现了日新月异的变化,新技术层出不穷,应用架构的复杂程度不断增加,系统承载的交易量也随之攀升,如何在加快企业数字化转型的同时保障业务安全稳定运行,是金融 IT 系统建设面临的重要问题,而以交易流量为切入点开展流量防护工作,则是 IT 系统在稳定性守护方面至关重要的环节。
为了进一步提升业务交易的连续性,中国工商银行(后简称工行)于 2015 年开始探索分布式流量防护能力,从最初的逐步尝试到抽取提炼,再到如今已建成了同业领先的流量防护平台,每日防护流量超百亿笔,有效守护了涉账、涉敏交易的稳定,形成了企业级的流量防护能力。本文主要介绍了工行在企业级流量防护能力建设过程中的实践经验。
发展历程
为保证系统稳定和业务连续运行,更好的应对各种异常流量情况,工行于 2015 年开始探索分布式流量防护能力,历经多年打磨,最终形成了企业级的流量防护网。
2017 年以前,初步形成应用级流量防护
在 2017 年以前,常常遇到因为异常流量冲击而导致服务稳定性下降的问题,短时间的突增流量会直接冲破服务器性能瓶颈,最终造成业务受损。为避免类似问题的发生,各核心应用分别开发了适用于各自业务场景的流量防护能力,包括并发线程控制、访问速率控制等手段,基本实现了对核心交易模块的简单防护能力。
2017 年至 2020 年,提取公共能力,形成框架级流量防护
进入 2017 年,工行大力推进统一分布式服务框架的落地工作,越来越多的新老应用开始向标准化的服务框架进行迁移。为了保障业务不受异常流量影响,工行在服务框架上增加了并发数控制能力,并强制要求应用对上线的所有服务进行配置,以保证生产运行过程中始终有防护策略兜底。
2020 年至今,搭建标准且统一的企业级流量防护平台
随着业务边界不断拓展,业务交易量不断上升,系统的稳定性成为影响交易表现的最重要因素。在核心业务的交易过程中,业务的交易整体成功率,常会因边缘环节防护能力的缺失而受到影响。为此,工行通过搭建统一的流量防护平台,整合各技术框架能力,制定标准的流量防护方案,覆盖全行流量防护场景。截至目前,流量防护平台已帮助大零售、大对公、信贷等 9 个重点产品条线的 160 余个核心应用快速构建流量防护能力,有效保障了全行交易的稳定运行。
实践心得
在流量高速膨胀的这几年里,工行逐步将小范围的应用级防护升级为企业级的流量防护能力,并通过以下 4 个方面的努力,最终实现了标准化的限流、熔断、阻断能力,横向适配了绝大多数技术栈,纵向支持对各应用、群组、单元进行实时策略调整,有效实现了对涉敏、涉账、对客场景的守护。
统一标准,形成适用且易用的防护能力
首先,需要对原有服务框架、核心应用各自提供的流量防护能力进行整合,提炼形成标准化的能力手段。
综合对比原有实现方式及业界常用的方案后,工行选择了开源的 Sentinel 作为流量防护的统一工具。对比分析情况如图 1 所示。
图 1 Sentinel 与其他工具对比
为更好的满足全行的使用场景,工行在 Sentinel 的基础上进行了二次开发,重新定义限流、熔断、阻断三种基础能力(如图 2 所示):
限流,一种保护服务提供方的常见手段,当提供方因为大量的请求而达到性能资源瓶颈时,系统根据预设的规则对超限的流量进行快速拒绝。
熔断,一种保护服务调用方的重要手段,是指当对下游服务的异常访问过多、耗时过长时,系统自动断开对下游服务的访问,以保证整体业务不被当前交易环节所拖垮。
阻断,运维人员根据实际运维需要,直接关闭某个服务资源或服务调用。
图 2 限流熔断等能力定义
除上述基础能力外,为更好的贴近业务场景,工行对限流、熔断等能力进行了维度上的扩展,即向上抽象形成节点级的全局限流,向下针对各类参数、流量标签实现精细化的场景提升(如图 3 所示)。
图 3 限流熔断能力维度设计
为了向新旧业务场景提供标准、统一的场景化能力,工行针对不同的交易场景提供了请求体参数解析的能力,方便渠道、网关等负责提供公共入口的应用快速根据请求中的参数进行不同维度的流量防护(如图 4 所示)。
图 4 参数限流说明
在判断的过程中,请求经过接口维度的限流防护后,还需要对“接口 + 参数”维度进行校验。在此过程中平台将传入接口的所有参数传递给应用编写的参数解析器,参数解析器负责将全部参数按照业务逻辑进行整合后返回,根据返回的参数值校验是否符合事先配置的参数限流策略,校验通过则放行请求。
通过开放参数解析器的形式,可以实现对请求中复杂参数的解析以及业务场景的自定义拼接。
覆盖边缘场景,打造高拓展技术组件
标准的流量防护能力基本可以解决各个场景下的异常流量问题。接下来,工行需要将标准的能力封装到公共组件中以便各应用接入使用。
首先遇到的问题是“如何才能将对多套开发框架的支持融合在同一个组件中,减少开发、维护的成本”。经过研究,工行选定了字节码增强技术,java 的字节码增强技术是一种对现有字节码进行修改或者动态生成全新字节码文件的技术,只要基于 java 语言编写的服务框架,便可以通过操纵字节码实现代码的植入,对于新旧框架共存的体系来说,是一种非常不错的方式(如图 5 所示)。
图 5 字节码增强技术说明
工行在明确了以字节码增强技术底座作为统一支撑核心后,开始对上层能力进行设计,除了流量防护外,还引入了链路追踪、指标采集、流量录制等更多运维能力,通过插拔化的形式,将各个能力模块注入到这个大的客户端中,在保证能力独立运行不互相耦合的同时,通过同一个客户端将非功能性的运维领域能力进行整合。
下面对本次全新打造的技术组件做一个简单的总结(如图 6 所示):
  1. 适配方面:通过修改字节码的方式,适配服务间调用、数据库访问等场景。
  2. 能力方面:通过对齐监控运维元数据,打通监控治理屏障,形成流量控制、链路追踪、指标采集等监控治理一体化的能力视图。
  3. 组件核心方面:通过模块化管理、统一编程 SDK 提供等,实现组件自身高解耦、高容错、高标准的特性。
图 6 统一客户端架构设计
联动实时监控,实现异常快速止血
除应用在服务上线前配置的常态化的限流策略外,工行还针对生产运行过程中可能出现的异常流量,提供快速应急调整的能力。
利用分布式配置中心支持快速调整配置并实时通知到节点的特性,运维人员现在可以通过生产监控视图快速地跳转到限流规则配置页面,根据观测到的监控指标,对限流、熔断等策略进行实时的配置下发(如图 7 所示)。
图 7  监控治理一体化视图
通过页面提交限流策略后,策略会被下发到远程配置中心,配置中心实时推送到应用节点后生效情况出现在监控视图中(如图 8 所示)。
图 8  在线应急实时生效
总结场景规律,提炼相应技术规范
长期的实践证明平台在具备了强大技术组件和完善的功能机制后,还需要制定标准的使用规范指导应用更加正确地使用相关能力。为此,工行整理了一套适用于行内现有场景下的标准规范,在这里简单介绍。
应用内所有服务应对外配置限流策略
限流是一种保护提供方节点性能资源的重要手段,在分布式场景下,每个节点的所有服务都应对外配置限流策略,保障节点自身性能容量冗余。
重点交易功能中对于非关键服务的访问应配置熔断策略
熔断作为一种杀伤性较强的手段,适用于对重点交易功能中的非关键服务调用进行配置,如对转账功能中的积分增减进行熔断的配置,以免积分接口的调用影响转账交易的成功率(如图 9 所示)。
图 9 非关键服务熔断示意图
对数据缓存类的访问(如 Redis)应配置熔断策略
分布式数据库的调用是现有生态下非常重要的组成部分,为了避免缓存访问异常,对交易造成较大干扰,需快速启用缓存备份方案(访问主数据库或其他),因此平台应对数据缓存类的访问配置熔断策略,确保请求能够及时断开并恢复交易(如图 10 所示)。
图 10 数据缓存类调用熔断示意图
随着应用架构的不断转型和新业态新模式的不断出现,工行将不断提炼完善,指导应用更加正确的使用流量防护能力,最终保证服务运行稳定。
现有成果
流量防护平台作为分布式系统稳定性保障的重要支撑平台,深度对齐工行架构转型各项工作要求,覆盖全行核心及边缘场景,截至目前已完成全行所有重点应用的推广,重点业务场景覆盖率已超 60%,在零售、对公、信贷、国际化等多个产品条线均有相关能力的落地。
平台目前处于推广的高峰期,每日监控流量 150 亿笔,每月拦截异常流量百万笔以上,通过提供标准化的流量防护能力,帮助多个涉敏、涉账、对客的业务系统在出现故障时(如网络抖动、Ceph 存储故障)保障自身性能冗余,有效守护了交易的连续与稳定(如图 11 所示)。
图 11 平台流量监控效果
未来展望
随着分布式体系的不断壮大,流量防护体系的构建已成为保证系统稳定的最基本要求。未来,工行将继续对标业界优秀实践,探索流量防护能力在保障服务稳定可靠的同时,实现与研发效率、服务规模的互相平衡。重点探索流量防护能力的智能化转型,加大对现有运行数据的萃取与利用,形成运行指标预测、智能流量控制等能力,帮助应用更正确的使用相关能力,进一步夯实工行系统稳定性的支撑能力。
今日好文推荐
继续阅读
阅读原文