0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在云原生网关上做流量防护?

OSC开源社区 来源:阿里云云原生 2023-08-24 09:52 次阅读

背景

Cloud Native

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

550c5ce4-41a4-11ee-a2ef-92fbcf53809c.png

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

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

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

具备与流行的流量防护项目如 Sentinel、Hystrix 等同等丰富的流量防护功能,并且还在不断迭代更新中。

天然支持均摊式的集群流控,使得用户无需关心网关以及 Upstream 服务的节点数。

提供配套的秒级监控,并支持 QPS、拒绝 QPS 、异常 QPS 、RT 以及并发数等丰富的流量指标,同时支持历史数据的查看,便捷地实现先观测,再配防护规则的使用路径。

流量防护规则秒级生效,配置防护规则后,无需等待,秒级生效。

Sentinel 流量模型介绍

Cloud Native

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

5520b4fa-41a4-11ee-a2ef-92fbcf53809c.png

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

QPS 限流

这是流量防护最通用的一个场景,顾名思义,就是限制某个路由的流量,使其只能在一定的速率内访问网关,防止某个路由流量激增,造成后端服务的崩溃。云原生网关不仅支持路由级别的限流,而且天然支持均摊式的集群流控,用户无需关心网关节点的数量或者后端服务节点的数量,只需要配置一个总体的阈值,就可以轻松实现对某个路由的总体阈值限流。

并发控制

并发控制的具体实现,是通过实时维护一个并发值(这个值指的是一秒内,该路由流量的最大并行值,即未完成的请求数量),一旦下一个请求超过了设定的阈值,就拦截该请求。该功能不同于 QPS 限流,即使是在 QPS 较低的场景下,也能保证关键的资源,不被持续累积的慢调用所占用,而导致服务不可用,比如后端 Upstream 服务的线程池以及数据库资源等等,假设长期被占用,就会导致该 Upstream 服务出现异常。和 QPS 限流类似,云原生网关天然支持均摊式集群并发限流,只需配置一个总体的并发阈值,就可以实现对某个路由的总体并发控制。

熔断

在 Sentinel 、Hystrix 等限流项目中,都能见到该功能,就如字面上的意义,熔断是指,在路由的流量出现了某个异常状态,需要及时熔断该流量,从而保证与该路由相关 Upstream 服务能够高效稳定的运行,而不受某个异常路由流量的影响。

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

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

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

Cloud Native

QPS 限流

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

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

55c0f0dc-41a4-11ee-a2ef-92fbcf53809c.png

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

55efc664-41a4-11ee-a2ef-92fbcf53809c.png

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


{
  "context": "just for test"
}
此时再返回查看秒级监控,就可以看到如下的曲线图:

5615dcd2-41a4-11ee-a2ef-92fbcf53809c.png

并发控制

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

564b59e8-41a4-11ee-a2ef-92fbcf53809c.png

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

56711d68-41a4-11ee-a2ef-92fbcf53809c.png  

熔断

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

56799182-41a4-11ee-a2ef-92fbcf53809c.png

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

56874bc4-41a4-11ee-a2ef-92fbcf53809c.png

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

总结

Cloud Native

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





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储器
    +关注

    关注

    38

    文章

    7452

    浏览量

    163591
  • 熔断器
    +关注

    关注

    6

    文章

    459

    浏览量

    31522
  • 缓存器
    +关注

    关注

    0

    文章

    63

    浏览量

    11652
  • QPS
    QPS
    +关注

    关注

    0

    文章

    24

    浏览量

    8788
  • HTTP接口
    +关注

    关注

    0

    文章

    21

    浏览量

    1775

原文标题:基于云原生网关的流量防护实践

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    性能提升1倍,成本直降50%!基于龙蜥指令加速的下一代云原生网关

    主导的云原生时代,下一代的网关模式仍然会是传统的流量网关与微服务网关的两层架构吗?带着这个问题,并结合阿里巴巴内部沉淀的
    发表于 08-31 10:46

    只需 6 步,你就可以搭建一个云原生操作系统原型

    优化业务调度能力 。最后一步当我们拥有了这样的一套系统,我们如何才能把它安装部署起来?设想一下,当我们面临一千台虚拟机的集群需要部署一个云原生系统的时候,我们该怎么?难道我们需要一台一台地安装各种
    发表于 09-15 14:01

    华为云发布云原生基础设施,云原生2.0时代正式开启

    早在2010年,Paul Fremantle在一篇博客文章中首次提到了Cloud Native(云原生)。当时的云原生特指适合云计算模式的应用程序编写方式。可能Paul Fremantle也不会想到,十年过去了,云原生会引领IT
    的头像 发表于 09-30 11:25 2222次阅读

    云原生应用中的“云”指的是什么?

    云原生应用是独立的小规模松散耦合服务的集合,旨在提供备受认可的业务价值,例如快速融合用户反馈以实现持续改进。简而言之,通过云原生应用开发,您可以加速构建新应用,优化现有应用并在云原生架构中集成。其
    的头像 发表于 11-27 17:24 2179次阅读

    华为云正式提出云原生2.0的概念

    华为云发布云原生产业白皮书,并提出云原生2.0的概念。
    的头像 发表于 12-07 11:51 3696次阅读

    引领云原生2.0时代,赋能新云原生企业

    十年云计算浪潮下,DevOps、容器、微服务等技术飞速发展,云原生成为潮流。Forrester首席分析师戴鲲表示,云原生是企业数字化转型的基础,企业需要建立云原生优先的战略,构建一体化全栈云原
    的头像 发表于 12-11 16:04 1793次阅读

    云原生解决了什么问题?

    尽管Heroku、Pivotal、CNCF等众多厂商都对云原生下了不同的定义,但从本质上考虑,因为云原生构建了易观测松耦合容错性高的系统,所以其始终都在追求着三大目标:加速创新、降低成本、提高效率。
    的头像 发表于 12-15 17:15 6846次阅读
    <b class='flag-5'>云原生</b>解决了什么问题?

    云原生2.0时代 我们还要做什么?

    华为云自2015年以创始会员的身份参与了云原生计算基金会的组建,在过去的这5年时间里,华为云全面见证了云原生技术和产业的兴起和发展:开源项目能力的完善期、云原生产业的发展与融合期,再到如今,
    的头像 发表于 12-21 13:36 1797次阅读

    如何更好地构建云原生应用生态,推动业界更好地落地云原生

      近年来,“云原生”成为炙手可热的概念,云原生技术在制造、政务、电信、金融等垂直行业的应用占比也在快速攀升,有力地支撑了业务系统重构,越来越多的企业和开发者开始把业务与技术向云原生演进。   中国
    的头像 发表于 12-24 11:13 2584次阅读

    解读腾讯云原生 鹅厂云原生的“新路”与“历承”

    在云计算产业中,云原生是一个长期讨论的“老话题”。而在今年新基建、产业数字化的宏观背景下,云原生的应用主体开始扩张,关于这条技术路径的讨论也重新火热了起来。 云原生突然“翻红”的原因,或许在于更多
    的头像 发表于 12-28 18:10 3477次阅读

    华为云中什么是云原生服务中心

    云原生服务中心(Operator Service Center,OSC)是面向服务提供商和服务使用者的云原生服务生命周期治理平台,提供大量的云原生服务,并使用自研部署引擎,支持所有服务包统一管理
    发表于 07-27 15:44 687次阅读
    华为云中什么是<b class='flag-5'>云原生</b>服务中心

    什么是分布式云原生

    体验,让客户在使用云原生应用时,感受不到地域、跨云、流量的限制,把云原生的能力带入到企业的每一个业务场景,加速千行百业拥抱云原生。 分布式云原生
    发表于 07-27 15:52 1551次阅读

    Java与云原生的矛盾原因

    前阵子在 B 站刷到了周志明博士的视频,主题是云原生时代下 Java,主要内容是云原生时代下的挑战与 Java 社区的对策。
    的头像 发表于 10-31 11:15 1251次阅读

    京东云原生安全产品重磅发布

    “安全产品那么多,我怎么知道防住了?”“大家都说自己是云原生的,我看都是换汤不换药”在与客户沟通云原生安全方案的时候,经常会遇到这样的吐槽。越来越的客户已经开始了云原生化的技术架构改造,也意识到
    的头像 发表于 07-26 10:36 416次阅读
    京东<b class='flag-5'>云原生</b>安全产品重磅发布

    云原生和非云原生哪个好?六大区别详细对比

    云原生和非云原生各有优劣,具体选择取决于应用场景。云原生利用云计算的优势,通过微服务、容器化和自动化运维等技术,提高了应用的可扩展性、更新速度和成本效益。非云原生则可能更适合对延迟敏感
    的头像 发表于 09-13 09:53 325次阅读