中原银行流量削峰平台
项目背景
在用户量快速增长、业务场景不断创新的今天,金融行业也不断经受着高并发和海量数据的挑战。特别是在类似双 11 这种消费高峰,或在热点营销场景这种交易高峰时,瞬时的高并发流量,往往会对业务系统造成极大的压力,更甚至超过系统承载能力时,造成系统崩溃,大大降低系统的可用性和用户体验。
为保障业务系统平稳运行,提升用户体验,中原银行适时建设了秒杀平台和流量削峰平台。秒杀平台侧重限流,快速给用户响应,适用于“多入少出”的场景,比如抢购;流量削峰平台侧重于削峰,适用于各种需要对流量洪峰进行管控的高并发的场景。本文对中原银行流量削峰平台进行简单介绍。
平台简介
流量削峰平台采用 Netty+Queue 技术建设而成,支持 Http 和 Tcp 协议,具有以下特点:
轻量化
基于业界流行的高并发框架开发,基础能力即支持瞬时大流量快速入队列,再加上参数配置化和流量监控能力,不依赖第三方,非常轻量化。
即插即用-快速接入
对业务系统无侵入、快速接入,快速落地,使用方无需进行代码修改,只需要把请求流量转发到流量削峰平台,由流量削峰平台首先把超大流量请求进行缓存,再按业务系统的处理能力将流量逐步放行。
无状态化
平台不保存请求相关数据,具有无状态性,可快速部署,快速扩容。
工作原理
基本原理:
为追求更高性能,平台内部处理逻辑追求尽量精简、尽量减少性能损耗。在接收到上游发来的请求后,直接将请求存入任务队列中;并启动一定数量的工作线程从队列中获取请求再转发到下游系统,然后将后台返回的响应透传给上游系统。
技术实现:
上游接收请求,利用 Netty 强大的多线程模型和异步处理能力,保障单台流量削峰平台服务可应对上万 TPS 的流量洪峰;下游使用性能优异的 LinkedBlockingQueue,保证消息的高效安全存取,然后再通过预先设定好的工作线程量将请求按照一定的并发速率转发给后台,从而实现了流量削峰的功能。
主要功能模块
流量削峰平台主要分为三部分:参数配置端、核心服务端和监控端。
参数配置端:
·支持线程数、缓冲队列数、请求超时、优先级限流规则等参数配置;
·线程数配置用于控制流速,使用方可根据其后端系统处理能力配置合适的流速,防止瞬时超高流量导致后端业务系统崩溃;
·缓冲队列数配置用于在请求大量积压情况下,对于超出任务队列最大数量之后到达的请求,快速拒绝,避免不必要的等待与资源占用;
·请求超时配置则是为了保证请求在队列中等待时间超过设置时,直接返回用户端,进而避免不必要的后台服务调用;
·优先级限流规则配置用于平台根据业务情况,对不同的业务流量做并发限流控制。
核心服务端:
·多协议支持:根据业务系统原有请求协议,自动适配 Tcp 协议和 Http 协议;
·限流开关:在削峰前采用令牌桶算法,设置流量大小开关;
·系统自保护:通过流量开关和缓存队列最大数,来保护本身不被大流量冲垮;
·规则限流:根据配置的业务通道优先级,按要求对后端的服务进行流量发送;
·链路追踪:记录服务内的链路调用情况。
监控端:
可视化监控看板如下图所示,可实时监控请求队列积压情况、并发数、请求数、请求耗时、平均耗时等重要信息。
接入要求
削峰平台独立于业务系统一对一部署,使用简单,请求方只需将原业务系统 f5 地址修改为削峰 f5 地址即可通过削峰访问业务系统,对业务系统完全无侵入。
接入流量削峰平台前系统架构:
接入流量削峰平台后系统架构:
未来规划
流量削峰平台目前已平稳支撑核心业务系统、信鸽消息推送系统、吃货地图系统和微信银行等多个系统,保障业务系统成功度过每次瞬时大流量场景,日均流量千万级。
但是随着业务量的高速增长,也对平台提出了越来越高的要求。未来平台将从以下几个方面着手,不断优化和提升平台性能,以支撑更加庞大的流量洪峰和更加严苛的并发性能。
·性能更高队列
削峰平台内部使用 LinkedBlockingQueue 对请求进行缓存,该队列基于链表的形式,通过加锁的方式,来保证多线程情况下数据的安全;下一步计划调研 Java 开源框架 Disruptor 是一个开源框架来解决高并发下队列锁的问题,在无锁的情况下实现队列的并发操作,以实现更加高效的队列控制。
·多队列
削峰平台目前采用单一内存队列的方式对请求进行缓存,不同类型的请求之间存在相互影响,无法对不同请求区分处理,后期将进行多队列模式改造,对于不同类型请求缓存到不同队列中分别处理。
·弹性伸缩
下一步计划实现流量放行的弹性伸缩和智能控制能力,当业务端处理能力较快时加大流量放行,处理速度下降时降低流量放行,实现并发流量数的弹性伸缩和智能动态调整,从而使业务端的性能时刻处在最佳状态。
版权声明: 本文为 InfoQ 作者【中原银行】的原创文章。
原文链接:【http://xie.infoq.cn/article/259c8850de8fd9a81afdb036c】。文章转载请联系作者。
评论