基于云原生网关的流量防护实践

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 本文详尽地介绍了如何在云原生网关上做流量防护,包括在不同的场景下该配置何种防护规则,并给出了详细的使用路径,可以从中体验出云原生网关的流量防护功能相对于其它网关产品限流功能的优势。作为云上网关的核心功能之一,后续我们也会持续强化流量防护功能,也欢迎大家持续关注阿里云官网的 MSE 微服务引擎产品动态。

作者:涂鸦

背景


在分布式系统架构中,每个请求都会经过很多层处理,比如从入口网关再到 Web Server 再到服务之间的调用,再到服务访问缓存或 DB 等存储。在下图流量防护体系中,我们通常遵循流量漏斗原则进行流量防护。在流量链路的每一层,我们都需要进行针对性的流量防护与容错手段,来保障服务的稳定性;同时,我们要尽可能地将流量防护进行前置,比如将一部分 HTTP 请求的流量控制前置到网关层,提前将一部分流量进行控制,这样可以避免多余的流量打到后端,对后端造成压力同时也造成资源的浪费,为此,在网关侧做流量防护是十分有必要的。

在传统的流量网关场景下,对流量进行访问控制是一个很常见的需求。比如在 nginx 中,limit_req 就是一个最为常见的限流配置,而在 Envoy 中,也支持本地以及全局两种模式的限流,但是二者均有其局限性。在功能的丰富度上,二者不及常见的限流组件开源项目,如 Sentinel 、Hystrix 等,在实际的使用场景中,实用性也很弱,比如不支持无性能损耗的集群限流等等。


云原生网关的流量防护功能,底层使用了 Sentinel 内核,并做了一定的强化和改造。Sentinel 是以流量与容错为切入点,从流量控制、不稳定调用隔离、熔断降级、热点流量防护、系统自适应保护、集群流控等多个维度来帮助保障服务和网关的稳定性,同时提供秒级的流量监控分析功能。其商业化产品不仅在阿里内部淘宝、天猫等电商领域有着广泛的应用,在互联网金融、在线教育、游戏、直播行业和其他大型政央企行业也有着大量的实践。

云原生网关作为集安全、流量、微服务三位于一体的下一代云上网关,在诞生之初,就被赋予了全场景使用的一个定位,为此流量防护也是其必备的一个能力,在流量防护能力上,具备以下优势:

  • 具备与流行的流量防护项目如 Sentinel、Hystrix 等同等丰富的流量防护功能,并且还在不断迭代更新中。
  • 天然支持均摊式的集群流控,使得用户无需关心网关以及 Upstream 服务的节点数。
  • 提供配套的秒级监控,并支持 QPS、拒绝 QPS 、异常 QPS 、RT 以及并发数等丰富的流量指标,同时支持历史数据的查看,便捷地实现先观测,再配防护规则的使用路径。
  • 流量防护规则秒级生效,配置防护规则后,无需等待,秒级生效。


Sentinel 流量模型介绍


如下图所示,流量防护是指,针对不同的流量,设置一道适合的屏障策略,在该屏障的观测下,一旦判定该流量不能被通过,应该及时拦截,从而达到保护网关、以及后端 Upstream 服务的作用。

云原生网关目前支持 QPS 限流、并发控制、熔断三种不同的流量防护能力,本文将从这三个功能分别去阐述其具体的效果,以及适用的场景。

  • QPS 限流这是流量防护最通用的一个场景,顾名思义,就是限制某个路由的流量,使其只能在一定的速率内访问网关,防止某个路由流量激增,造成后端服务的崩溃。云原生网关不仅支持路由级别的限流,而且天然支持均摊式的集群流控,用户无需关心网关节点的数量或者后端服务节点的数量,只需要配置一个总体的阈值,就可以轻松实现对某个路由的总体阈值限流。
  • 并发控制并发控制的具体实现,是通过实时维护一个并发值(这个值指的是一秒内,该路由流量的最大并行值,即未完成的请求数量),一旦下一个请求超过了设定的阈值,就拦截该请求。该功能不同于 QPS 限流,即使是在 QPS 较低的场景下,也能保证关键的资源,不被持续累积的慢调用所占用,而导致服务不可用,比如后端 Upstream 服务的线程池以及数据库资源等等,假设长期被占用,就会导致该 Upstream 服务出现异常。和 QPS 限流类似,云原生网关天然支持均摊式集群并发限流,只需配置一个总体的并发阈值,就可以实现对某个路由的总体并发控制。
  • 熔断在 Sentinel 、Hystrix 等限流项目中,都能见到该功能,就如字面上的意义,熔断是指,在路由的流量出现了某个异常状态,需要及时熔断该流量,从而保证与该路由相关 Upstream 服务能够高效稳定的运行,而不受某个异常路由流量的影响。

熔断机制背后对应熔断器模型 (Circuit Breaker)。当调用处于某种不稳态(通常是出现异常或慢调用)达到一定程度(通常关注比例而不是绝对量),熔断开启 (OPEN),所有的请求都会 fallback 掉;过一段时间后进入探测恢复阶段 (HALF-OPEN),放过一定数量的请求,以这些请求的情况来 indicate 下游服务的恢复情况,若这些请求达到稳态,则恢复对应调用 (CLOSED);否则重回熔断状态,具体原理如下图所示:



另外,云原生网关的流量防护能力底层是基于 Sentinel 的毫秒级滑动窗口精确统计,为此,云原生网关的流量防护功能界面也配套了一个秒级监控系统,可以通过观测=>发现问题=>创建防护规则这个使用路径去更好地在云原生网关上创建流量防护规则。


如何在云原生网关上进行流量防护


QPS 限流

下面,我们将动手去实践,在云原生网关上去使用上述的三大流量防护功能。

首先,进入到云原生网关实例中的路由配置界面,选择“策略配置”里的“限流”选项,手动给这个路由注入一个 QPS 10000 左右的流量,在配套的秒级监控可以看到 5 分钟内该路由的 QPS 情况。




在秒级监控的下方,可以看到流控规则、并发规则,熔断规则三个配置项,首先先配置一条限流规则,具体参数如下图所示:


打开开启开关并点击保存按钮,就顺利加入了一个 QPS 限流策略,这个策略的含义是,当路由流量的总 QPS 达到 5000 的时候,统计窗口内下一个到来的流量会被拒绝,拒绝的行为是,返回一个HTTP包,返回码是 429 ,内容是一个 JSON 格式的文本,内容是:

{
  "context": "just for test"
}


此时再返回查看秒级监控,就可以看到如下的曲线图:



并发控制并发规则也是类似,只不过,控制值由 QPS 变成并发数,具体的参考配置参数如下:


返回查看秒级监控,既可以看到以下的结果:

熔断熔断规则的配置较为复杂,具体的含义可以查看配置界面的说明,具体的参考配置如下:


这个规则的具体含义是,在 20 秒的统计窗口内,从第 5 个请求之后,开始统计慢调用的比例,一旦比例超过 20% ,立马熔断该路由的流量,其中慢调用的定义为 RT 超过 1 ms 的请求。配置完成之后,监控的表现如下图的所示:

上述的例子只是为了演示效果,在实际生产环境中,需要更为谨慎的去定义慢调用比例以及熔断时长等参数,否则可能会导致后端服务整体不可用,是一个风险较高的流量防护功能。除了慢调用比例之外,还支持异常比例的熔断条件判断,异常的定义是指 HTTP 调用发生 5XX 的情况。


总结

本文详尽地介绍了如何在云原生网关上做流量防护,包括在不同的场景下该配置何种防护规则,并给出了详细的使用路径,可以从中体验出云原生网关的流量防护功能相对于其它网关产品限流功能的优势。作为云上网关的核心功能之一,后续我们也会持续强化流量防护功能,也欢迎大家持续关注阿里云官网的 MSE 微服务引擎产品动态。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
1月前
|
Kubernetes Cloud Native 安全
云原生架构的演进与实践
随着云计算技术的不断发展,云原生架构已成为现代软件开发的核心趋势。本文旨在探讨云原生架构的演变历程、核心理念及在实际项目中的应用案例。通过对Kubernetes、Docker等关键技术的分析,结合微服务架构的设计原则,本文将揭示如何构建高效、可扩展且易于维护的云原生应用。
46 10
|
15天前
|
Cloud Native 持续交付 开发者
云原生技术在现代企业中的应用与实践####
本文深入探讨了云原生技术的核心概念及其在现代企业IT架构转型中的关键作用,通过具体案例分析展示了云原生如何促进企业的敏捷开发、高效运维及成本优化。不同于传统摘要仅概述内容,本部分旨在激发读者对云原生领域的兴趣,强调其在加速数字化转型过程中的不可或缺性,为后续详细论述奠定基础。 ####
|
5天前
|
Cloud Native 安全 Java
铭师堂的云原生升级实践
铭师堂完整经历了云计算应用的四个关键阶段:从”启动上云”到”全量上云”,再到”全栈用云”,最终达到”精益用云”。通过 MSE 云原生网关的落地,为我们的组织带来了诸多收益,SLA 提升至100%,财务成本降低67%,算力成本降低75%,每次请求 RT 减少5ms。
铭师堂的云原生升级实践
|
1月前
|
运维 Kubernetes Cloud Native
云原生技术入门及实践
【10月更文挑战第39天】在数字化浪潮的推动下,云原生技术应运而生,它不仅仅是一种技术趋势,更是企业数字化转型的关键。本文将带你走进云原生的世界,从基础概念到实际操作,一步步揭示云原生的魅力和价值。通过实例分析,我们将深入探讨如何利用云原生技术提升业务灵活性、降低成本并加速创新。无论你是云原生技术的初学者还是希望深化理解的开发者,这篇文章都将为你提供宝贵的知识和启示。
|
4天前
|
Cloud Native 安全 Java
杭州铭师堂的云原生升级实践
在短短 2-3 年间,杭州铭师堂完整经历了云计算应用的四个关键阶段:从“启动上云”到“全量上云”,再到“全栈用云”,最终达到“精益用云”。也从云计算的第一次浪潮,迈过了第二次浪潮,顺利的进入到了 第三次浪潮 AI + 云。
|
4天前
|
Cloud Native
邀您参加云原生高可用技术沙龙丨云上高可用体系构建:从理论到实践
云原生高可用技术专场,邀您从理论到实践一起交流,探索云上高可用体系构建!
|
15天前
|
Kubernetes Cloud Native API
云原生入门:从理论到实践的探索之旅
本文旨在为初学者提供一个关于云原生技术的全面介绍,包括其定义、核心原则、关键技术组件以及如何将这些概念应用于实际项目中。我们将通过一个简易的代码示例,展示如何在云原生环境下部署一个简单的应用,从而帮助读者更好地理解云原生技术的实践意义和应用价值。
|
17天前
|
运维 Cloud Native 开发者
云原生技术入门与实践
在云计算的浪潮中,云原生技术以其独特的优势和魅力吸引了越来越多的开发者和企业。本文将从云原生技术的基本概念、核心组件以及实际应用三个方面进行详细介绍,帮助读者更好地理解和掌握这一新兴技术。同时,文章还将分享一些实际案例和经验教训,让读者能够更深入地了解云原生技术的应用场景和发展趋势。
34 5
|
24天前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
29天前
|
监控 Cloud Native 持续交付
云原生技术在现代企业中的应用与实践
本文将深入探讨云原生技术如何改变现代企业的运作模式,提升业务灵活性和创新能力。通过实际案例分析,我们将揭示云原生架构的关键要素、实施步骤以及面临的挑战,为读者提供一套清晰的云原生转型指南。
下一篇
DataWorks