网站建设图片怎么切,沈阳网站关键词优化哪家好,带flash的网站,网页设计导航栏设计作者#xff1a;涂鸦
背景
在分布式系统架构中#xff0c;每个请求都会经过很多层处理#xff0c;比如从入口网关再到 Web Server 再到服务之间的调用#xff0c;再到服务访问缓存或 DB 等存储。在下图流量防护体系中#xff0c;我们通常遵循流量漏斗原则进行流量防护。…作者涂鸦
背景
在分布式系统架构中每个请求都会经过很多层处理比如从入口网关再到 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 微服务引擎产品动态。