开发者学堂课程【基于 MSE 的大促场景流量入口防护最佳实践:大促场景流量入口防护最佳实践】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1047/detail/15216
大促场景流量入口防护最佳实践
内容介绍
一、大促高可用体系
二、MSE 云原生网关管理流量入口
三、MSE 云原生网关的高可用能力
四、限流规则与行为
五、实战演示
一、大促高可用体系
大促高可用体系大图如下
阿里云提供全套产品解决方案,帮助企业大促高可用体系建设事半功倍。
提供阿里 PTS 实现全链路压测,通过 MSE 云原生网关实现入口流量南北向限流防护,通过 MSE 微服务治理实现后端服务之间调用东西向的限流防护,通过 ARMS、Tracing 等产品功能实现对业务性能观测发现存在的业务凭性,基于 ACK、ASK 能力进行弹性扩容。概括四点,压测、观测、限流、扩容。
高可用体系建设必须从实践中出真知,通过压测对服务能力进行性能摸底,评估性能是否能接受,不能接受需要对性能进行扩容和优化,可以接受要配置对应的限流规则,以防超出预期的流量将服务打垮。过程中需要做到边压、边看、边限、边扩,不断对对数据进行反馈调整,最终建立保证业务系统高可用的体系。
二、MSE 云原生网关管理流量入口
流量入口侧基于 MSE 云原生网关的最佳实践
基于 MSE 云原生网关的强劲性能,可轻松应对大促流量。MSE 云原生网关可平滑替代默认键,基于同等资源实现两倍以上的吞吐。MSE 云原生网关是托管式部署,用户无需运维节点配置。
为保证高可用网关本身需要配置多节点部署,基于多节点部署,总的网关侧限流阈值等于每个节点限流阈值之和。
传统运维模式需要在压测期间,由运维人员频繁调整多个节点的网关限流配置。使用 MSE 云原生网关,只需配置整体阈值。
下图为例
通过网关侧创建路由,可将不同的业务路径转发到不同的后端服务,根据不同的服务能力,对路由分别配置不同的限流规则,可实现对后端服务的高可用维护。
三、MSE 云原生网关的高可用能力
云原生网关基于 Alibaba Sentinel 提供丰富的高可用能力,基于阿里巴巴多年双十一流量考验下的经验呈现,包括流控、并发、熔断多种限流规则,可全面保障后端业务高可用。
流控规则是最基础的吞吐限制能力,并发规则可通过控制并发数保障后端服务的低延时。熔断规则可通过慢调用比例,异常请求比例的观测,超过一定阈值时,对路由进行熔断,保护后端服务。规则在 demo 演示中,逐一做详细介绍。
四、限流规则与行为
云原生网关上做限流配置,两处细节需要关注。对特定路由配置限流规则时,需要关注路由的匹配方式。
云原生网关具备强大的路由匹配能力,面向请求方法和请求头的能力,很多网关不具备。此种能力基于 resful 原则设计 api 时,必须的能力,不具备此种能力无法实现细腻度业务 api 限流配置。考虑路由匹配细节,第二个细节是关注限流后自定义行为的设置。
云原生网关支持用户配置合理的自定应答,可在触发限流时保障用户体验。
用户可自定义 text 或 json 的自定义响应,可配置自动跳转的 URL,在很多场景中有用,首页访问的资源限流,通过配置自动降级跳转的 URL,限流时自动跳转 CDN 上的静态页面,可在限流时保障比较好的用户体验。
五、实战演示
包括在云原生网关上配置路由规则,对路由设置流控规则,通过PTS压测验证规则的效果,通过监控观察限流和对应延时的情况。
部署云原生网关
在 ACK部署应用,应用是 nginx 服务
云原生网关的来源管理将对应的 ACK 集群关联
创建服务时可通过指定对应 ACK 下的命名空间的服务,服务创建,路由直接关联服务。
当前 Pod IP 与服务里服务地址一致,说明服务可正常搭建
创建一条测试用路由 text,当前路由配置,通过精确匹配/test路径将对应的请求转发到 app 服务上。
为方便压测及压力,当前 nginx 服务配置 cpu 限制0.1核
0.1核 nginx 大概处理2000左右 QPS
通过 PTS 洗压力,在 PTS 配置对应压测的路由,可通过网关绑定的私网 SLB 进行压测,节省公网带宽。
配置路由后,在施压配置选择阿里云 VPC 内网,对应的 VPC 信息。
当前设置从20并发增加到200并发的压测方式,20并发维持两分钟,200并发维持两分钟
路由侧的流控配置,流控规则和并发规则。建立两个规则,总体 QPS阈值限制2000,没打开。
限制总体阈值20,没打开。
起压力
云原生网关通过路由级的限流监控看到压力,没开启 QPS 限制下是2100多。
开启流控规则
流控规则开启及时生效,监控采集有延时,需要等待一定时间,可监控图表看具体的情况。
可打开 RT 和并发图表可看到目前并发数20左右,与PTS起压力数一致。延迟较低,5毫秒左右。
等压力逐渐上升,等待一分钟左右,看200并发情况是什么。
并发数上升200左右,保持通过QPS2000。对比5毫秒 RT 明显增加,翻10倍左右 RT。
网关限制 QPS 对于控制后端延迟不够,需要打开并发规则
打开并发规则需要等待一段时间,监控延时有一定时间,规则生效是立即的。当前并发规则生效的情况下,可将并发限制在20左右。并发降下后,整个延时有明显降低。
关闭两个规则,查看两个规则不启用的状况。
对压测做复盘,开始在没开启任何规则情况下,流控不生效,整个QPS 吞吐2100左右。开启流控规则,限制在2000左右,开启后流量平滑在2000QPS。并发数调在200左右,通过的 QPS 维持在2000左右,后端延时明显增高,升高10倍。设置对应的并发规则,并发数限制在20左右,进一步控制RT,是流控规则和并发规则常见的应用。没开启流控和并发的情况,RT值更高,80多毫秒
在熔断规则情况下,把并发数调到最大
熔断规则的配置可通过慢调用比例或异常比例达到一定阈值,对请求进行垄断,保证后端的高可用。配置当慢调用RT超过20毫秒,降级阈值超过50%时,对整个进行10秒垄断。
垄断规则开启
请求延时大部分停在80毫秒左右,50%以上超过20毫秒,规则开启后所有请求被垄断。配置10秒垄断,间隔10秒进行对应探测。探测服务发现当前延时下降,继续放行所有请求。整体并发数较高,后端应用不能接受每个吞吐,延时较高,一直处于被拒绝的情况。
设置自定义的行为,降级到 fallback,可实现把对应的请求,触发垄断时跳转到 fallback 对应的 URL。
请求是 text 的 URL,触发垄断,跳转到对应的降级 URL 上。实现的方式是返回307状态码
行为可完全自定义,通过关联行为新增行为,可选择以文本或 JSON的方式返回固定的 HTTP 返回文本。
可选择跳转到指定页面,常见的一种做法对首页或页面,限流时跳转到 CDN 静态页面,保障用户好的体验。
基于网关实现入口处的流量防控指派功能如上。
插件市场网关的插件能力对于保障高可用的能力,大促场景下可能遇到异常请求,异常请求具有特定的特征,有 URL 特定的参数或互联网爬虫的攻击。通过 requst-bock 或 bot-detect 两个插件,实现流量防护。通过插件市场的能力,可配置对应的 URL、headers 或特定 bodys 里的字段实现流量的屏蔽。
匹配对应的 URL,是否有 foo、bar 参数存在,参数存在禁止流量,返回404状态码。
text URL 默认情况对于 foo、bar 请求放弃,访问后面的 nginx 服务上。
开启插件后,返回对应的404指令。
能力可匹配对应的 headers 或 bodys,通过日志分析发现用户存在攻击行为时,请求进行指令。
bot-detect 类似,开启插件后可实现互联网爬虫的屏蔽,大促场景下可减少流量流失,保障核心请求不受影响。
用户可通过自定义插件的形式,创建自己的网关插件,可实现自己的逻辑在网关侧的应用。
可通过创建插件按钮,输入插件的名称,上传用户自己插件的文件,插件应用程序,提交后对应的插件可使用。
可配置对应的插件配置,做全局或路由的生效。
能力在云原生网关的插件市场文档有详细的介绍,支持使用 GOlong、JS、Rust、c++ 等多种语言开发对应的插件。
结合插件能力,用户可自定义管控网关上的流量,基于网关提供限流的能力,可较好实现在大促场景下网关流量防控的管理,对后端服务高可用防护。