Bootstrap

天翼账号网关系统架构演进历程

1、前言

天翼账号是中国电信打造的互联网账号体系产品,利用中国电信管道优势为企业提供用户身份认证能力。 其中网关系统是天翼账号对外能力开放体系的重要组成:业务侧它以集中入口、集中计费、集中鉴权管控为目标,技术侧它支持隔离性、可配置、易开发、动态路由、可降级、高并发等场景。

自2017年天翼账号网关系统上线以来,历经数次互联网的营销大促活动,特别是2021年的春节红包活动和刚过去双11活动,天翼账号网关系统在10万级QPS和10亿级日请求量的情况下,各项指标依然保持平稳,顺利保障合作方活动的开展。在天翼账号产品能力不断提升的背后,是天翼账号网关系统架构技术迭代发展的过程。

2、天翼账号网关演进

2.1 重点演进历程介绍

​ 2017年~2021年天翼账号网关系统经历数次重要更迭升级,每次升级都给产品带来新的发展机会,系统总体演进过程如下:

2.2 天翼账号网关系统1.0

​ 2017年初,天翼账号技术团队基于开源微服务网关Zuul组件开展了网关系统1.0的建设。Zuul是Spring Cloud工具包Netflix分组的开源微服务网关,它和Eureka、ribbon、hystrix等组件配合使用,本质是通过一系列的核心filter,来实现请求过程的认证安全、动态路由、数据转化、熔断保护等功能。其系统核心运行流程如下:

2018年中,随着天翼账号推出免密认证系列产品的快速发展,网关系统1.0的缺点日益凸显主要表现在两个方面:

​ 为应对业务高峰,技术侧常采用横向扩展实例的策略来实现对高并发的支持,该策略给系统稳定性带来一定的风险,同时部署大量的网关服务器也提高产品的运营维护成本,因此网关系统架构升级迫在眉睫。

2.3 天翼账号网关系统2.0

2.3.1 技术选型

​ 互联网企业常见的方案有基于 Openresty 的 Kong、Orange,基于 Go 的 Tyk 和基于Java的Zuul:

apiaxleapi-umbrella: 考虑到学习成本和项目后期发展的兼容性,其语言和框架不在团队优先考虑范围

Zuul:目前正在应用中,Zuul处理请求的方式是针对每个请求都启用一个线程来处理。通常情况下,为了提高性能,所有请求被放到处理队列中,等待空闲线程来处理。当存在大量请求超时后会造成Zuul线程阻塞,目前只能通过横向扩展Zuul实例实现对高并发的支持。而Zuul2.0将HTTP请求的处理方式从同步变成了异步,以此提升处理性能。但团队内部对继续采用Zuul比较慎重,原因主要有以下两点:

Nginx: 高性能的HTTP和反向代理Web服务器,应用场景涉及负载均衡、反向代理、代理缓存、限流等场景。但Nginx作为Web容器应用场景较少。Nginx性能优越,而Nginx开发主要是以C/C++模块的形式进行,整体学习和开发成本偏高。Nginx团队开发了NginxScript,可以在Nginx中使用JavaScript进行动态配置变量和动态脚本执行。

目前行业应用非常成熟的扩展是由章亦春将Lua和Nginx黏合的ngx_Lua模块,将Nginx核心、LuaJIT、ngx_Lua模块、多功能Lua库和常用的第三方Nginx模块整合成为OpenResty。开发人员安装OpenResty,使用Lua编写脚本,部署到Nginx Web容器中运行,能轻松地开发出高性能的Web服务。OpenResty具有高性能,易扩展的特点,成为了团队首选。同时也面临两个选项:

​ 根据调研结果,团队衡量学习成本和开发周期等因素,最终决定采用对Kong框架二次开发的方案。以下是调研后的一些对比总结,仅供参考,如有疏漏,请不吝指出。

2.3.2 架构升级

​ 天翼账号技术团队制定了网关系统2.0演进方案,部署架构如图:

  • 自研插件

​ 除了Kong网关自带的原生组件外,2.0网关系统还相继研发出:加密鉴权、日志处理、参数转换、接口协议、消息队列、服务稳定、链路追踪及其它等8大类共计约30多个组件。丰富的自研组件,保障了系统架构平稳的升级和业务的灵活性:

改造上游

​ 利用Go语言的高并发特性,对上游并发量大的微服务进行重构。

2.3.3 效果

​ 网关2.0通过对Kong 组件自研插件的开发和改造,实现了符合产品特性、业务场景的相关功能,也抽象了网关的通用功能。相较于1.0版本,具备以下优点:

​ 为了验证新架构的性能,团队对网关系统2.0进行了压测:

  • 结果1:17:26 在当前测试环境下QPS在1.2W左右

  • 结果2:18:06 取消Prometheus、流量控制、日志、权限校验等插件,QPS达到1.3W+

​ 压测结果表明,天翼账号网关系统2.0已经达到单机万级QPS,自研插件运行效率较高,对于网关性能的影响较小。

天翼账号网关系统2.0初期是基于Kong-v0.14.0版本开发,运行至2019年5月时,Kong已经更新到v1.1.X版本,有很多重要的功能和核心代码更新,而且为了便于跟Kubernetes集成,团队决定将版本升至v1.1.X。

通过同步迁移、并行运行的方式天翼账号网关系统2.1于2019年9月完成Kong-v1.3版本的升级。期间天翼账号网关系统仍平稳地完成了2018年阿里双11活动、2019年春节活动等大型高并发场景的支撑工作。2020年3月,网关2.1及底层微服务完成了镜像化改造,即可通过Kubernetes自动编排容器的方式部署,在动态扩容等方面有较大的提升。

2.4 天翼账号网关系统3.0

​ 随着免密认证逐渐成为互联网应用作为首选登录方式,互联网头部企业要求认证产品SLA相关技术指标对齐其内部指标,为了支撑产品精细化运营和进一步的发展,保障产品SLA合同及性能指标,技术团队制定了网关系统3.0演进方案。

3.0网关部署架构图如下:

2.4.1 DP(Data Plane)升级

2.4.1.1 Kong组件升级

团队摸余(鱼)工程师对开源项目Kong的版本发布一直保持着较高的关注度,总结两年来Kong 主要版本升级新特性:

考虑到Kong 2.5.0版本为刚刚发布的版本,采用的企业用户不多,且开源社区对之前发布的V2.4.0 版有较好的评价,因此团队评审后决定升级到V2.4.0。

Kong 2.4.0 采用OpenResty1.19.3.1,基于Nginx 1.19.3,官方文档测试单Worker可达269,423 QPS。以2.0版本同样环境压测,天翼账号网关系统3.0(Kong 2.4) QPS可达到 2W+,对比天翼账号网关2.X(Kong 1.3) QPS 1W+,性能预估可提升80%以上。

Kong 2.4.0 组件采用控制面/数据面(CP/DP) 混合部署新模式,具备以下优势:

  • 功能解耦

​ 混合部署模式,CP负责将配置数据推动到DP节点,DP节点负责流量数据处理。

  • 运行稳定

​ 当CP不可用时,DP可按照本地存储的配置进行流量业务处理,待CP恢复,DP会自动连接更新配置。

  • 支持多语言插件

​在原有Lua插件的基础上,支持使用JavaScript 、TypeScript、GO 编写插件,后端GO语言团队可进行相关扩展。

  • 支持UDP代理

​ Routes、Services、Load Balancing、日志插件支持UDP代理,满足业务发展需要。

2.4.1.2 精确网关分组

​ 顶层采用分域名业务隔离,同时根据业务特性、保障级别、访问并发量等特点,对网关集群进行分组,完成子业务关联性解耦,在应对大流量冲击时降低对业务的影响,同时方便运维侧精准扩容。

2.4.1.3 混合云

​ 新建阿里云节点,作为天翼账号产品双活系统的补充节点,在高并发时可由DNS调度实现自动切换,确保提供无间断的服务。

2.4.2 CP(Control Plane)升级

2.4.2.1优化调用链路

​ 增加Consul作为服务发现、配置管理中心服务,替换原有Nginx层路由功能。对Kong组件提供DNS路由及发现服务,通过Check方式检查微服务是否可用。

2.4.2.2新增插件
  • DP缓存控制插件

​ Kong 2.4 采用DP和CP混合部署模式,DP平面的节点无管理端口,原Kong 1.3通过 admin API管理缓存的模式无法适用现有场景,因此研发了 c-cache-manage 插件,添加后,可通过数据层面URL请求对DP缓存进行管理。

  • 流量复制插件

​ 为了测试网关3.0的适用性,团队自研流量复制插件,复制现网流量对网关3.0进行测试,整个测试过程不影响现网环境。

插件运行流程如下:

Konga配置界面参考:

  • Prometheus插件改造

​ 为了更好的展示 DP和CP层面的数据,对自带Prometheus插件进行改造,增加DP、CP角色维度,区分并收集数据平面相关监控指标。

2.4.2.3 完善预警监控

​ 在系统原有的监控的基础上,增加业务处理监控,通过业务处理监控,可将异常被动通知,转为主动发现。业务出现异常,可第一时间协助客户处理,提升系统的效能。

2.4.3 效果

​ 演进完成后天翼账号网关系统3.0具备以下优势:

​ 天翼账号网关系统3.0的部署,有效地保障了系统服务SLA等各项指标的达成。在今年双11期间十万级并发高峰时,系统TP99保持在20MS以内,总体表现非常稳定。

3、后序

​天翼账号网关经过多次演进,已日趋完善,总结其优势如下:

​ 天翼账号网关系统在中国电信统一账号能力开放平台中处于举足轻重的地位,它的迭代升级,为平台十万级高并发提供了坚实的保障,也为系统维护减少了难度、提升了便捷性,顺利支撑业务达成亿级收入规模。天翼账号技术团队在follow业界主流网关技术的同时,也注重强化网关插件的标准化、服务化建设,希望通过网关能力反哺其它产品赋能大网。随着中国电信服务化、容器化、全面上云的战略推进,天翼账号网关的系统架构也将随之变化,从全传统环境到部分云化再到全量上云,不断的向更贴近业务,更适用技术发展的形态演进。