简介
面向业务的自适应容量保障是一种针对特定业务流量的自动化容量保障方案。它将容量保障策略左移至开发和压测阶段,实现了线上容量的自适应调整和保障。目前已在“直付通秒杀”、“618大促”等场景落地并取得了不错的效果,其中某SKA商户实现了活动保障“0”预案。
该方案主要解决了业务保障面临的以下三大挑战:
秒杀流量:在秒杀活动等高并发场景下,业务流量瞬间飙升,导致系统容量不足,影响业务正常运行。
低效利用:业务和机器资源间存在错配,造成资源闲置。
评估困难:链路下游系统业务感知能力弱、业务叠加多,在容量评估时很难将系统容量细化到业务维度。
目前我们的方案提供了以下三种能力,用于克服上述挑战:
自适应降级:当特定业务的容量需求超出系统容量时,系统自动降级,保障系统核心业务的正常运行,确保系统的可用性和稳定性。
自适应流量调拨:根据特定业务的容量需求,自动调整容量分配,实现了部署单元间动态的容量调度和保障。
业务限流:对于超出业务保证能力范围。
下面将结合实践逐一介绍方案提供的三大能力。
自适应降级克服了流量的不确定性带来的保障困难。以现有活动保障为例,日志降级、异步化开启等提升容量的手段是通过定时推送预案/回滚预案开启/关闭的,从业务视角看这是以时间维度进行的保障。这种模式能很好应对确定性峰值,但在其他SKA商户的活动保障中难以为继,尤其是新兴的直播带货场景峰值时间点难以预测,在此背景下自适应降级应运而生。
自适应降级帮助我们应对不确定性流量的同时将保障的维度从时间转变为了单笔业务流量,这样的变化也带给了业务如下的思考,即:业务“在一个确定时间范围内有损”与“根据业务水位决策是否有损”之间孰优孰劣?用户体验哪种更好?
识别业务流量&染色
在入口应用App-A通过sidecar识别特定的业务流量,并为符合特征的流量配置染色规则,满足规则后的流量会实时被打上规则中设置的标记。
染色标记透传
标记会伴随RPC请求实现链路透传。
消费染色标记
链路上需要使用自适应降级能力的应用按需接入SDK,并对业务代码进行相应的埋点改造。
自适应降级在“商户秒杀”场景落地并取得了很好的效果,目前某SKA商户的保障实现了100%无人工干预的保障。618活动保障期间自适应针对峰值流量完成了蓄洪-泄洪的整个过程(耗时90s),从压测效果来看可以在当前机器资源下动态支持到5w tps的支付。
618大促期间为确保高合并笔数交易的成功率,需要下游应用针对合并笔数较高的交易执行一定的特殊处理以保障成功率,采用自适应降级方案后压测和线上均取得了显著成效。
成功率 | ||
压测 | 未开启自适应降级 | 28% |
开启自适应降级 | 82% | |
正式 | 首峰前5分钟 | 99.99% |
二峰前5分钟 | 97.03% |
一次高合并笔数交易在应用侧触发自适应触发降级埋点14个,其中有7个降级埋点为“合并支付成功率优化”所新增,另7个为“单笔交易秒杀优化”案例中已预设的降级埋点,降级埋点的复用率达50%。
自适应流量调拨可以应对业务流量和机器资源的瞬时错配问题,提高闲置机器资源的利用率。以SKA商户支付为例,“商户高保集群”需要承担SKA商户支付流量,日常情况下“商户高保集群”的机器可以支撑业务流量,但SKA商户的促销/秒杀活动会打破这种稳态造成机器资源短时的紧张。传统扩缩容难以应付这种新形式带来的新挑战,提前扩出充分的机器资源又会造成动辄大几万core的资源闲置,有悖ESG发展理念。
新挑战:
扩容时间不确定。
扩容数量不确定。
要求瞬时扩容。
自适应流量调拨通过在极端场景下打破部署单元/应用的限制,将流量调拨到有资源富余的部署单元/应用,在不影响其他业务运行的前提下对业务流量进行了二次负载均衡,充分利用闲置资源也避免了扩容不及时带来的负面影响。
按规则转发业务流量
在上游应用App-A的sidecar识别特定业务出口流量,同时感知下游应用App-B在不同集群内的系统水位,当“集群1”的水位达到预设水位后App-A的sidecar会将符合特征的流量转发至“集群2”。
按规则接收/限制转发的业务流量
在App-B的sidecar识别特定业务的流量,并为符合特征的业务流量配置拒绝策略。
为充分利用闲置资源应对SKA商户秒杀流量,需要在“商户高保集群-1”容量不足时通过一定的技术手段打破部署单元的流量隔离。业务分流网关在出口流量处感知当前“商户高保集群-1”承担的SKA商户支付量级,当量级超出阈值后将超出部分的业务流量转发至“商户高保集群-2”。“商户高保集群-2”在sidecar配置限流规则,确保在自身容量水位安全的情况下接收商户的支付超额转发流量。
业务支持应用相比于业务入口应用存在业务感知能力弱、放大比计算难等问题,因此往往无法配置面向业务的精细化限流。随着业务保障能力的逐步提高,这些下游应用配置的无差别限流放大了业务间资源抢占导致的容量风险。自适应降级方案中的染色标一次配置全链路使用的特点可以帮助下游应用轻量地识别业务流量,并以此标记在sidecar中配置相应的限流规则,避免单业务过度抢占容量。
识别业务流量&染色
在入口应用App-A通过sidecar识别特定的业务流量,并为符合特征的流量配置染色规则,满足规则后的流量会实时被打上规则中设置的标记。
根据染色标记限流
在应用App-B的sidecar配置和业务标记相关的限流规则,支持按标记限流、按标记计次后限流。
如对本文有任何建议或问题,请关注我们的微信公众号,我们将私信回复 ❤️