作者|哲良、八风、泽彬
出品|阿里巴巴新零售淘系技术部
诺亚(Noah) 自适应流控解决方案 基于自动控制算法,解决了人工限流配置疏漏或过时的痛点,大幅提升应用抵抗流量冲击的能力。在刚过去的双11中,诺亚(Noah)保障了大量业务应用系统,有超过 15K 的容器大规模部署;稳定性上最高可提升 20 倍于业务负载流量的上限 QPS ;最高可提升 100% 的资源利用率;同时优化了体验与效率。提升淘系(及更多BU)的稳定性底盘,成为应用稳定性保障的核心能力,推动了业界在大型分布式在线业务系统的高可用/稳定性保障的进展。
背景
随着业务的不断发展,应用数量、拓扑依赖与复杂性都在持续增长,流量模型的有效预测也变得更加困难。系统与流量的不确定性都会导致系统容量评估疏漏或评估过时。这些情况在双11、春晚等大型复杂活动中会更加的突显。
面向流量的「意义」
流量会受到业务的影响而发生强变化的,这种变化是不确定的且在频繁发生的。
应对这种不确定性需要基础架构有可靠的、自适应的方式,能够
实时接受与感知变化
作出保护响应来抵御变化,自适应的、柔性的实施系统/架构
然后是弹性,针对基础资源做实时调节
这样才能具备有效的抵抗力、适应力,活着是前提,有了这个前提,才有机会将基础资源驱动起来(弹性),而业务无需耗费心力去关注这种不确定性带来的业务可用性风险。
关于高可用的重新思考
业界在讨论高可用时,主要说的是资源失效的对应方式,比如通过应用集群、主备、热切换等应对单机失效;通过单元化架构、异地多活等应对单机房/地域失效。
从上面对资源失效的问题与对策可以看出,高可用所要解决的核心问题是保证服务不挂,准确的说是要大大降低服务挂掉的概率。
到了今天我们的应用架构,我们的可用性痛点问题是什么呢?对于你自己开发的应用,或听到某某服务挂了时,你会担心或者想到什么?在可用性方面,相信更多的回答会是『服务压跨了』,典型的是问题场景是『大流量、突发流量』下,比如:直播场景中主播一声吼,后端流量飙升;社交媒体场景中明星官宣结婚,带来热点流量暴涨;电商运营场景中,秒杀活动大流量脉冲;互动玩法场景中持续不断发布互动活动,一个新的活动导致系统整体可支撑的QPS可能下降很多。这些场景与问题在日常应用开发和服务保障过程中,应该是深有痛点吧 :)
在应用架构上,业界对面向流量的可用性,不如像面向资源一样得到充分的关注、有着丰富成熟的思路和广泛有效的实践,我们有意于改变 面向流量的可用性 这个主题的现状,更多的直面问题、探索思路、实践推进。
传统方案有什么问题?
面向流量的可用性现有的应对方式是静态限流。
传统的针对 QPS 限制的静态限流方法的问题:
- 流量/请求
依赖 请求模型的准确评估,即测试流量的请求大小与实际需保持一致。
热点流量,如热点用户被频繁访问/爆冷商品等。运营导致用户动线走了较重的逻辑分支。
依赖 来的流量的准确预估。
但我们要承认,流量一定无法准确被评估,系统会被摸死(即拒绝操作导致的过载)。
- 业务代码逻辑
依赖 测试之后系统自身和其下游依赖的逻辑不变,性能需保持一致。
但是业务总是在演进,除非全网封网,否则限流阈值一上线就已经过时了。
- 资源
依赖 各台机器性能完全一致且稳定不变。
机器型号不同,处理能力是不可能做到完全一致的。
虚拟化/容器化之间有影响,你无法控制你的邻居会做什么。
- 流程
依赖 事先人工准确执行了评估过程
但人总是靠不住的,只要人工来执行就一定会疏漏、出错。
另外对于长尾应用/非核心应用,支持力度没有保障,人力资源总是有限的。
传统方法无法解决人工评估过时导致的流量与容量不一致的问题,我们需要一种能够实时评估系统容量,并就地对流量进行控制的解决方案。
诺亚(Noah)自适应流控
面对系统稳定性问题,诺亚(Noah) 自适应流控解决方案采用不同于业界传统的针对QPS限制的静态限流方法,首次以自动控制算法为核心手段,提供自适应流控解决方案,解决了限流配置过时的痛点,大幅提升应用抵抗流量冲击的能力,极度简化了相关配置工作,同时在系统资源利用率、用户体验、运维效率等方面均有大幅优化提升。
诺亚(Noah)自适应流控解决方案
在绝大部分情况下,CPU利用率作为资源供给的主要信号是最为直接的。诺亚(Noah) 自适应流控解决方案即是以自动控制CPU资源为核心方法的,其具备了一下3点优势:
在系统稳定性控制效果方面表现为精准和有效的控制,并具备很强的可解释性。
没有提前的人工评估,便没有提前评估的过时与人工评估的疏漏和错误。
应用场景更为广泛,不受异步场景约束,可同时使用于同步和异步场景。
诺亚(Noah) 自适应流控解决方案能够实时自动评估 QPS ,在技术方案上使用自适应性来解决业务流量的不确定性。
业务落地
作为淘宝应用架构升级(代号Tango:Taobao Architecture Next GeneratiOn)在稳定性上的核心产品,诺亚(Noah)在刚刚过去的双11大促过程中,保障大量业务应用系统,有超过15K的容器大规模部署(涉及淘宝、天猫、聚划算、盒马、猫超、优酷等等众多业务)。提升系统稳定性、提升资源利用率、优化体验与效率,提升了淘系(及更多BU)的稳定性底盘,成为应用稳定性保障的核心能力,推动了业界在大型分布式在线业务系统的高可用/稳定性保障的进展。
诺亚(Noah) 自适应流控解决方案目前已上线超过9个月,在线上实战和全链路压测中,诺亚保护了大促会场、直播、导购等等核心业务场景;应用系统在出现容量缺失30%或近20倍超大流量脉冲场景下仍保持稳定运行。
诺亚(Noah)自适应流控的效果收益:
- 可用性提升
压垮QPS上限,最高可提升 20倍 于业务负载流量。
在大流量压力下降后,1秒 快速恢复服务。
大流量压力下,仅需直接扩容机器 一步即可,无需紧急调整限流。
- 用户体验的优化
应用在高负载情况下,服务成功率最高可提升 2.7倍,同时响应时间维持正常水平不劣化。
- 成本的优化
资源利用率最高可提升 100%(去除为了稳定性/不确定性而留的资源冗余)
- 效率提升
全链路压测/性能压测更顺畅。无需人工限流阈值设置,避免人工评估错误导致系统被压垮后需要大量调整时间。
自适应流控的实际控制效果:在流量飙升/大流量压力时,CPU稳定控制在阈值,且服务RT正常
诺亚后续的发展
目前诺亚(Noah) 自适应流控解决方案保障了大量业务应用系统,提升稳定性、提升资源利用率、优化体验与效率,提升淘系(及更多BU)的稳定性底盘,成为应用稳定性保障的核心能力,推动了业界在大型分布式在线业务系统的高可用/稳定性保障的进展。
对未来更体系化建设的几点展望:
- 自适应能力由限流拓展到隔离/熔断等更多稳定性能力,如
自适应线程资源隔离
自适应服务比例
自适应服务熔断
- 由单机的自适应限流拓展到链路级,尤其是客户端流量入口接入层
与接入层协同,让入口流量与应用的处理容量自适应匹配
确定性地保障面向流量的高可用
- 自适应控制流量拓展到自适应伸缩容
流量控制与处理资源控制(伸缩容)协同
无论是流量的控制还是资源的控制,都是为了让处理流量与资源容量匹配
- 保障系统不过载,提升稳定性与业务请求的成功率
原文链接
本文为云栖社区原创内容,未经允许不得转载。