阿里云
为了无法计算的价值
打开APP
阿里云APP内打开
学习中心> 微服务实战-服务熔断 - Sentinel> 正文

微服务实战-服务熔断 - Sentinel

3课时 |
1720人已学 |
免费
课程介绍

Sentinel 是阿里巴巴开源的、面向分布式服务架构的轻量级流量控制框架,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助开发者保护服务的稳定性。

 

 

Sentinel 介绍

 

课程目标

  1. 了解开源流控降级组件Sentinel的特性
  2. 了解Sentinel 作为流控降级组件的优势(对比 Hystrix等)
  3. 在 Dubbo / Spring Cloud应用/Spring Cloud Gateway网关中结合Sentinel进行流控降级
  4. 了解阿里应用高可用服务(AHAS)的特性,并能够在阿里云上快速接入AHAS Sentinel流控降级

 

本次课程主要分为三大部分,在这一部分中,将会介绍Sentinel诞生的背景、增长的核心特性。Sentinel的完善的开源生态,以及流控降级组件对比。

在第二部分中,会演示Sentinel的一些非常基本的使用场景,包括与Spring cloud的外边应用结合,Spring cloud网关结合以及与Dubbo服务进行结合的演示。

在第三部分中,会介绍一下阿里云应用高可用服务AHAS的使用,以及如何快速的接入阿里云AHAS真正的流控降级。

 

Sentinel介绍
背景

在微服务中稳定性一直是一个避不开的一个重要的话题。在很多时候会遇到有非常多的流量突然打到系统上,导致系统扛不住,这是几个非常典型的场景。

精心准备的大促流量扛不住?

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

流量是非常实时性的,不可预测,那么在这大四场景中,非常有可能有大规模的流量突然到达,这时候如果不对这样的流量进行有效的防护的话,就会打垮服务,导致不可用。

服务不可靠自己被拖死?

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

为服务稳定性的场景,需要进行一些绿化的措施,来保障微服务的稳定性,这就是Sentinel的核心作用。

均匀平滑的用户访问?

可靠稳定的下游服务?

 

面向分布式服务架构的轻量级流量控制组件
  • 限流:Sentinel是阿里巴巴开源的、面向分布式服务架构的清淡及流量控制组件。它的结构和新特性的第一个就是限流,也就是把服务的PPS每秒钟的请求量,现在某个阈值来保护服务不被突然的流量所打垮。

 

  • 流量整形:流量是随机的、不均匀的、不可预测的。很多时候,需要把一些突然的流量调整成一个合适的形状,比如说希望这一时刻的流量是匀速通过的,或者希望流量是缓慢增加,而不是突然而来,一下子达到异值,这时候可能就会需要进行流量整形。
  • 熔断降级:如在电极可以保证对方自己不被远程的不稳定服务所拖垮,可以及时的去熔断这一些不稳定的服务,避免吉林失败导致的雪崩。
  • 系统自适应保护:提供整体维度的系统自身宝库,结合系统的cpu使用率、load、总QPS等实时指标,来保护整个系统的流量不被打垮,同时又最大限度地利用了系统的吞吐量。

GitHub地址: https://github.com/alibaba/Sentinel

 

Sentinel介绍

在微服务中,服务的调用一般会分为consumer和provider2个角色。

流量控制                        熔断降级

provider

  1. 限流保护:过快调用直接拒绝

在provide端,需要对provider进行限流保护,来保证provider不被过快的调用或者激增的流量所打垮。

可以配置QPS模式的限流,让多余的流量直接拒绝。

  1. 授权保护:不受信任的应用直接拒绝

同时,也可以对provider进行授权保护。比如,有一些不受信任的应用、电影来源或者不受信任的用户,可以针对这一些不受信任的应用来源或者用户配置授权规则。这样就可以拦截掉这一些不受信任的请求。

  1. 系统保护:load超出阈值停止服务

同时,可以在provider端配置系统保护规则。当provider的cpu使用率或者load超出阈值的时候,即停止服务来保护整个系统不被打垮。

  1. 热点保护︰增强版的限流保护

Provide端也可以进行热点保护及针对某一些调用的参数来进行限流,并且自动识别其中的热点来进行防护。可以达到比普通限流效果更好的一个效果。

 

Consumer

降级保护:不可靠的调用快速失败

在consumer端需要防止consumer被不稳定的服务调用所拖垮。所以可以在consumer端去配置熔断降级规则,当服务的调用超出了某一段时间的阈值,或者是某一个异常请求量的时候,自动熔断这个不稳定的服务的调用来防止自己被拖垮。这也就是Sentinel流量控制和熔断降级比较核心的一个应用场景。

 

 

多样化的流量控制场景

从衡量标准、调用关系以及邂逅的控制效果等多个维度提供多样化的流量控制。

  • Sentinel可以针对QPS并发线程数、异常比率,或者RT来作为衡量的指标进行限流降级。同时Sentinel支持基于调用关系的限流。
  • Sentinel支持某个关联资源的限流,或者是针对某一个特定的电影来源。同时,在限流的控制手段上,Sentinel除了支持使请求快速失败之外,还支持自动的降级、请求的预热,以及匀速排队的功能。
  • 同时Sentinel也支持热点参数级别的限流。并且真正的从1.4.0版本开始提供了极全维度的限流,可以限制某个服务在集群内的调用总量。
  • 集群限流在某些小流量或者流量不均的场景下非常好用,同时真正的提供了基于TCP BBR算法的系统自适应保护能力,可以根据系统的实时水位,兼顾系统处理请求的能力和当前的稳定性来保证系统的吞吐量最大化的同时,又让整个系统保持一个相对稳定的状态。这些就是sentinel多样化的流量控制场景。

 

三、开源生态

微服务框架的场景

  • sentinel针对常用的微服务框架进行了相应的适配。比如spring cloud double GRPC Rocket and cute,以及一些最新的re active的场景,包括reactor Spring one flex等都进行了相应的适配。
  • 用户只需要引入相应的适配依赖,并进行简单的配置,即可快速将自己的微服务应用接入增长,享受sentinel的流控降级服务,非常方便。同时,也支持非常多的API gateway,比如Java里面的和three cloud Gateway。
  • 同样,用户只需要将自己的API gateway中引入sentinel的相关的设备,依赖即可快速的将自己的API gateway纳入生产的防护之中。可以针对HDL最终的路由以及自定义的API进行流控,来从入口处保障服务的稳定性。同时,也支持envoy 和 Istio等等的生态,未来将会在service mesh中发挥全局流量控制的能力。
  • 在电脑中会配置限流降级规则。而规则的存储,会有非常多的动态规则圆的知识。比如,Ad Michaels。Zookeeper credits以及阿波罗等等。可以利用这一些配置中心组件去存储sentinel的相关配置,非常的方便。

 

四、流控降级组件对比

Sentinel 、Hystrix 、resilience4j

隔离策略

Sentinel:信号量隔离(并发线程数限流)

Hystrix:线程池隔离/信号量隔离

resilience4j:信号量隔离

熔断降级策略

Sentinel:基于响应时间、异常比率、异常数

Hystrix:基于异常比率

resilience4j:基于异常比率、响应时间

实时统计实现

Sentinel:滑动窗口(LeapArray)

Hystrix:滑动窗口(基于RxJava)

resilience4j:Ring Bit Buffer

动态规则配置

Sentinel:支持多种数据源

Hystrix:支持多种数据源

resilience4j:有限支持

扩展性

Sentinel:多个扩展点

Hystrix:插件的形式

resilience4j:接口的形式

基于注解的支持

Sentinel:支持

Hystrix:支持

resilience4j:支持

限流

Sentinel:基于QPS,支持基于调用关系的限流

Hystrix:有限的支持

resilience4j:Rate Limiter

流量整形

Sentinel:支持预热模式、匀速器模式、预热排队模式

Hystrix:不支持

resilience4j:简单的Rate Limiter模式

系统自适应保护

Sentinel:支持

Hystrix:不支持

resilience4j:不支持

控制台

Sentinel:提供开箱即用的控制台,可配置规则、查看秒级监控、机器发现等

Hystrix:简单的监控查看

resilience4j:不提供控制台,可对接其它监控系统

 

我的学习进度
请登录后查看您的学习进度!
立即登录
本课程相关云产品