大促场景流量入口防护最佳实践 | 学习笔记

本文涉及的产品
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
云原生网关 MSE Higress,422元/月
简介: 快速学习大促场景流量入口防护最佳实践

开发者学堂课程【基于 MSE 的大促场景流量入口防护最佳实践大促场景流量入口防护最佳实践学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/1047/detail/15216


大促场景流量入口防护最佳实践


内容介绍

一、大促高可用体系

二、MSE 云原生网关管理流量入口

三、MSE 云原生网关的高可用能力

四、限流规则与行为

五、实战演示


一、大促高可用体系

大促高可用体系大图如下

image.png

阿里云提供全套产品解决方案,帮助企业大促高可用体系建设事半功倍。

提供阿里 PTS 实现全链路压测,通过 MSE 云原生网关实现入口流量南北向限流防护,通过 MSE 微服务治理实现后端服务之间调用东西向的限流防护,通过 ARMS、Tracing 等产品功能实现对业务性能观测发现存在的业务凭性,基于 ACK、ASK 能力进行弹性扩容。概括四点,压测、观测、限流、扩容。

高可用体系建设必须从实践中出真知,通过压测对服务能力进行性能摸底,评估性能是否能接受,不能接受需要对性能进行扩容和优化,可以接受要配置对应的限流规则,以防超出预期的流量将服务打垮。过程中需要做到边压、边看、边限、边扩,不断对对数据进行反馈调整,最终建立保证业务系统高可用的体系。


二、MSE 云原生网关管理流量入口

流量入口侧基于 MSE 云原生网关的最佳实践

基于 MSE 云原生网关的强劲性能,可轻松应对大促流量。MSE 云原生网关可平滑替代默认键,基于同等资源实现两倍以上的吞吐。MSE 云原生网关是托管式部署,用户无需运维节点配置。

为保证高可用网关本身需要配置多节点部署,基于多节点部署,总的网关侧限流阈值等于每个节点限流阈值之和。

传统运维模式需要在压测期间,由运维人员频繁调整多个节点的网关限流配置。使用 MSE 云原生网关,只需配置整体阈值。

下图为例

image.png

通过网关侧创建路由,可将不同的业务路径转发到不同的后端服务,根据不同的服务能力,对路由分别配置不同的限流规则,可实现对后端服务的高可用维护。


三、MSE 云原生网关的高可用能力

云原生网关基于 Alibaba Sentinel 提供丰富的高可用能力,基于阿里巴巴多年双十一流量考验下的经验呈现,包括流控、并发、熔断多种限流规则,可全面保障后端业务高可用。

流控规则是最基础的吞吐限制能力,并发规则可通过控制并发数保障后端服务的低延时。熔断规则可通过慢调用比例,异常请求比例的观测,超过一定阈值时,对路由进行熔断,保护后端服务。规则在 demo 演示中,逐一做详细介绍。


四、限流规则与行为

云原生网关上做限流配置,两处细节需要关注。对特定路由配置限流规则时,需要关注路由的匹配方式。

云原生网关具备强大的路由匹配能力,面向请求方法和请求头的能力,很多网关不具备。此种能力基于 resful 原则设计 api 时,必须的能力,不具备此种能力无法实现细腻度业务 api 限流配置。考虑路由匹配细节,第二个细节是关注限流后自定义行为的设置。

云原生网关支持用户配置合理的自定应答,可在触发限流时保障用户体验。

用户可自定义 text 或 json 的自定义响应,可配置自动跳转的 URL,在很多场景中有用,首页访问的资源限流,通过配置自动降级跳转的 URL,限流时自动跳转 CDN 上的静态页面,可在限流时保障比较好的用户体验。


五、实战演示

包括在云原生网关上配置路由规则,对路由设置流控规则,通过PTS压测验证规则的效果,通过监控观察限流和对应延时的情况。

部署云原生网关

image.png

在 ACK部署应用,应用是 nginx 服务

image.png

云原生网关的来源管理将对应的 ACK 集群关联

image.png

创建服务时可通过指定对应 ACK 下的命名空间的服务,服务创建,路由直接关联服务。

image.png

当前 Pod IP 与服务里服务地址一致,说明服务可正常搭建

image.png

image.png

创建一条测试用路由 text,当前路由配置,通过精确匹配/test路径将对应的请求转发到 app 服务上。

image.png

为方便压测及压力,当前 nginx 服务配置 cpu 限制0.1核

image.png

0.1核 nginx 大概处理2000左右 QPS

通过 PTS 洗压力,在 PTS 配置对应压测的路由,可通过网关绑定的私网 SLB 进行压测,节省公网带宽。

image.png

配置路由后,在施压配置选择阿里云 VPC 内网,对应的 VPC 信息。

image.png

当前设置从20并发增加到200并发的压测方式,20并发维持两分钟,200并发维持两分钟

image.png

路由侧的流控配置,流控规则和并发规则。建立两个规则,总体 QPS阈值限制2000,没打开。

image.png

限制总体阈值20,没打开。

image.png

起压力

image.png

云原生网关通过路由级的限流监控看到压力,没开启 QPS 限制下是2100多。

image.png

开启流控规则

image.png

流控规则开启及时生效,监控采集有延时,需要等待一定时间,可监控图表看具体的情况。

可打开 RT 和并发图表可看到目前并发数20左右,与PTS起压力数一致。延迟较低,5毫秒左右。

image.png

等压力逐渐上升,等待一分钟左右,看200并发情况是什么。

并发数上升200左右,保持通过QPS2000。对比5毫秒 RT 明显增加,翻10倍左右 RT。

image.png

网关限制 QPS 对于控制后端延迟不够,需要打开并发规则

image.png

打开并发规则需要等待一段时间,监控延时有一定时间,规则生效是立即的。当前并发规则生效的情况下,可将并发限制在20左右。并发降下后,整个延时有明显降低。

image.png

关闭两个规则,查看两个规则不启用的状况。

image.png

对压测做复盘,开始在没开启任何规则情况下,流控不生效,整个QPS 吞吐2100左右。开启流控规则,限制在2000左右,开启后流量平滑在2000QPS。并发数调在200左右,通过的 QPS 维持在2000左右,后端延时明显增高,升高10倍。设置对应的并发规则,并发数限制在20左右,进一步控制RT,是流控规则和并发规则常见的应用。没开启流控和并发的情况,RT值更高,80多毫秒

在熔断规则情况下,把并发数调到最大

image.png

熔断规则的配置可通过慢调用比例或异常比例达到一定阈值,对请求进行垄断,保证后端的高可用。配置当慢调用RT超过20毫秒,降级阈值超过50%时,对整个进行10秒垄断。

image.png

垄断规则开启

image.png

请求延时大部分停在80毫秒左右,50%以上超过20毫秒,规则开启后所有请求被垄断。配置10秒垄断,间隔10秒进行对应探测。探测服务发现当前延时下降,继续放行所有请求。整体并发数较高,后端应用不能接受每个吞吐,延时较高,一直处于被拒绝的情况。

image.png

设置自定义的行为,降级到 fallback,可实现把对应的请求,触发垄断时跳转到 fallback 对应的 URL。

请求是 text 的 URL,触发垄断,跳转到对应的降级 URL 上。实现的方式是返回307状态码

image.png

行为可完全自定义,通过关联行为新增行为,可选择以文本或 JSON的方式返回固定的 HTTP 返回文本。

image.png

可选择跳转到指定页面,常见的一种做法对首页或页面,限流时跳转到 CDN 静态页面,保障用户好的体验。

image.png

基于网关实现入口处的流量防控指派功能如上。

插件市场网关的插件能力对于保障高可用的能力,大促场景下可能遇到异常请求,异常请求具有特定的特征,有 URL 特定的参数或互联网爬虫的攻击。通过 requst-bock 或 bot-detect 两个插件,实现流量防护。通过插件市场的能力,可配置对应的 URL、headers 或特定 bodys 里的字段实现流量的屏蔽。

image.png

匹配对应的 URL,是否有 foo、bar 参数存在,参数存在禁止流量,返回404状态码。

image.png

text URL 默认情况对于 foo、bar 请求放弃,访问后面的 nginx 服务上。

image.png

开启插件后,返回对应的404指令。

image.png

image.png

能力可匹配对应的 headers 或 bodys,通过日志分析发现用户存在攻击行为时,请求进行指令。

bot-detect 类似,开启插件后可实现互联网爬虫的屏蔽,大促场景下可减少流量流失,保障核心请求不受影响。

用户可通过自定义插件的形式,创建自己的网关插件,可实现自己的逻辑在网关侧的应用。

image.png

可通过创建插件按钮,输入插件的名称,上传用户自己插件的文件,插件应用程序,提交后对应的插件可使用。

image.png

可配置对应的插件配置,做全局或路由的生效。

image.png

能力在云原生网关的插件市场文档有详细的介绍,支持使用 GOlong、JS、Rust、c++ 等多种语言开发对应的插件。

结合插件能力,用户可自定义管控网关上的流量,基于网关提供限流的能力,可较好实现在大促场景下网关流量防控的管理,对后端服务高可用防护。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Unix Linux 文件存储
文件传输、文件挂载MOUNT:NFS、CIFS、ADB、SAMBA
文件传输、文件挂载MOUNT:NFS、CIFS、ADB、SAMBA
679 0
|
存储 监控 Serverless
阿里泛日志设计与实践问题之Grafana Loki在日志查询方案中存在哪些设计限制,如何解决
阿里泛日志设计与实践问题之Grafana Loki在日志查询方案中存在哪些设计限制,如何解决
193 0
|
存储 Prometheus 监控
当 OpenTelemetry 遇上阿里云 Prometheus
本文以构建系统可观测为切入点,对比 OpenTelemetry 与 Prometheus 的相同与差异,重点介绍如何将应用的 OpenTelemetry 指标接入 Prometheus 及背后原理以及介绍阿里云可观测监控 Prometheus 版拥抱 OpenTelemetry及相关落地实践案例。
93593 110
|
Web App开发 JSON 前端开发
Yapi 和 Apifox 哪个更好用?详细体验告诉你
在国产软件接口管理软件中,Apifox 和 yapi 口碑都挺不错的。从功能定位上来说,两者几乎一致,不过具体的功能设计和使用体验,还是会不一样的
Yapi 和 Apifox 哪个更好用?详细体验告诉你
探索Linux操作系统的内核模块
本文将深入探讨Linux操作系统的核心组成部分——内核模块,揭示其背后的工作机制和实现方式。我们将从内核模块的定义开始,逐步解析其加载、卸载以及与操作系统其他部分的交互过程,最后探讨内核模块在系统性能优化中的关键作用。
|
开发者 索引 Python
【Python 基础】remove、del和pop有什么区别?
【5月更文挑战第8天】【Python 基础】remove、del和pop有什么区别?
|
Java
SpringBoot关闭过程中是如何销毁一个DisposableBean的?
SpringBoot关闭过程中是如何销毁一个DisposableBean的?
174 0
|
存储 大数据 数据库
元数据驱动的微服务架构(上)
传统的模型方式的核心目标是能够自动生成代码,故定义过于复杂。而微服务间的“语言”的目标与传统不同,用元数据作为“语言”驱动整个微服务架构是不错的选择。本文为普元软件产品部副总兼大数据产品线总经理王轩在云计算架构设计群的微课堂分享。
7804 0
|
数据安全/隐私保护
redis-cli使用密码连接
redis-cli使用密码连接
508 0
|
移动开发 小程序 Java
良心分享:基于Java+SpringBoot+Netty+WebSocket+Uniapp轻松搭建在线互动问答程序
本文将详细介绍如何基于你自己的开源项目搭建一个在线互动问答程序,包括微信小程序和H5网页版。 该项目服务端主要使用了Java + Spring Boot + Netty + WebSocket等技术栈,聊天客户端使用的是UniApp来轻松搭建微信小程序和H5网页端。
256 1