回顾Sentinel实现流控降级

一 概述

微服务中稳定性是一个很重要的问题,有时候会在某个时刻会有很多流量突然打到我们的系统上,导致我们的系统扛不住,如:

  • 瞬间的流量洪峰超出了系统的最大负载。
  • 激增流量打垮了冷系统。
  • 热点商品挤占正常商品流量。
  • CPU的负载居高不下。

流量是具有实时性的,是不可预测的。

在微服务中调用链路非常复杂,总会有一些不可靠的服务,如:

  • RPC请求超时。
  • 异常比例升高。
  • 队列占满。
  • 线程池占满。

二 Sentinel

Sentinel是面向分布式架构的轻量级流量控制组件

限流:将服务每秒钟的请求量(QPS)限制在某个阈值,来保证我们的服务不会被突然的流量冲击而垮掉。

流量整形:流量是随机不均匀的且不可预测的,我们往往需要将这些流量进行一定的调整,如使得流量的增加不会出现陡增的情况,而是缓慢增加的。

熔断降级:熔断降级可以保证调用方自己不会被远程的不稳定服务所拖垮,可以及时的去熔断这些不稳定的服务以避免级联失败导致的雪崩。

系统自适应保护:结合整个系统的CPU实时使用率,总QPS等实时指标对系统进行实时保护,保证系统不会被激增的流量打垮,同时又保证系统最大限度的利用系统的吞吐量。

在微服务中,一般会分为Consumer和Provider两个角色,在Provider端我们需要进行限流保护以保护Provider端不被过快的调用以及不会被激增的流量所打垮。基于此,我们可以配置QPS的限流操作,直接拒绝多余的流量,同时我们也可以对Provider进行授权保护,比如一些不受信任的应用调用来源或者不受信任的用户配置授权规则,这样我们可以拦截掉这些不受信任的请求。

扫描二维码关注公众号,回复: 12552894 查看本文章

此外,我们还可以在系统Provider端配置系统保护规则,当CPU的使用率超出阈值的时候即停止服务来保护整个系统不被打垮。最后,Provider也可以进行热点保护,即针对某一些调用的参数来进行限流,并且自动识别其中的热点来进行防护,以达到比普通限流效果更好的效果。

在Consumer端,我们需要防止Consumer被不稳定的服务调用所拖垮,所以我们可以在Consumer端配置熔断降级规则,当服务调用超出某一个时间的阈值或者是某一个异常请求量的时候会自动熔断这个不稳定的服务的调用,来防止自己被拖垮。

Sentinel中多样化的流量控制场景

Sentinel的生态

常见的流控降级组件对比

三 Sentinel的实际应用

应用实例代码

配置单机阈值为1,即配置QPS为1的流控

查看实时监控信息可知允许的通过的QPS为1

Spring Cloud Gateway的接入Sentinel

引入上述依赖之后,Spring Cloud Gateway就会自动的引入Sentinel,则配置文件中配置的路由会自动被Sentinel进行管理。

通过上述Spring配置文件配置Sentinel的相关参数即可将Spring Cloud Gateway接入控制台。

新建网关流控规则

自定义API

以上为网关限流的简单使用。

Dubbo服务接入Sentinel

手动定义资源规则

 

猜你喜欢

转载自blog.csdn.net/calm_encode/article/details/113975596