hooyantsing's Blog

P38 Alibaba 微服务组件 Sentinel

字数统计: 1.3k阅读时长: 4 min
2022/06/23

视频源:小破站讲的最好SpringCloudAlibaba入门教程,保姆级教程通俗易懂

1. 分布式系统遇到的问题

服务雪崩:因服务提供者的不可用导致服务调用者的不可用,并将不可用逐渐放大的过程。

雪崩原理:大量请求线程同步等待造成资源耗尽,当服务调用者使用同步调用时,会产生大量的等待线程占用系统资源。一旦线程资源耗尽,服务调用者提供的服务也处于不可用状态。

image-20220623101506042

2. 解决方案

超时机制

在不做任何处理的情况下,服务提供者不可用会导致消费者请求线程强制等待,而造成系统资源耗尽。加入超时机制,一旦超时就释放资源。由于释放资源速度较快,一定程度上可以抑制资源耗尽的问题。

服务限流

例如图示例,服务限制 500,那么进来的 800 中的 500 可以正常的响应,剩余的 300 则降级拒绝处理。

image-20220623102118000

资源隔离

用户的请求不在直接访问服务,而是通过线程池中的空闲线程来访问服务,如果线程池已满,则会进行降级处理,用户的请求不会被阻塞,至少可以看到一个执行结果(例如返回友好的提示信息),而不是无休止的等待或者看到系统崩溃。

服务熔断

远程服务不稳定或网络抖动时暂时关闭,这叫服务熔断。

实时监测应用,如果发现在一定时间内失败次数/失败率达到了一定阈值,就 “跳闸” ,断路器打开——此时,请求直接返回,而不去调用原本的逻辑。跳闸一段时间后(例如 10s),断路器会进入半开状态,这是一个瞬间态,此时允许一次请求调用该调的逻辑,如果成功,则断路器关闭,应用正常调用;如果调用依然不成功,断路器继续回到打开状态,过段时间再进入半开状态尝试——通过 “跳闸” ,应用可以保护自己,而且避免浪费资源;而通过半开的设计,可实现应用的 “自我修复”。

所以,同样的道理,当依赖的服务有大量超时时,再让新的请求去访问根本没有意义,只会无谓的消耗现有资源。比如我们设置了超时时间 1s ,如果短时间内有大量请求在 1s 内都得不到响应,就意味着这个服务出现了异常,此时就没有必要再让其他的请求去访问这个依赖了,这个时候就应该使用断路器避免资源浪费。

服务降级

有服务熔断,必然要有服务降级。

所谓降级,就是当某个服务熔断后,服务将不再被调用,此时客户端可以自己准备一个本地的 fallback(回退)回调,返回一个缺省值。例如:(备用接口/缓存/mock数据)。这样做虽然服务水平下降,但好歹可用,比直接挂掉要强,当然这也要看适合的业务场景。

3. Sentinel:分布式系统的流量防卫兵

3.1 Sentinel 是什么

Sentinel 是阿里巴巴开源,面向分布式服务架构的高可用防护组件

image-20220623105644334

随着微服务的流行,服务和服务之间的发稳定性变得越来越重要,Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。

源码地址:https://github.com/alibaba/Sentinel

官方文档:https://github.com/alibaba/Sentinel/wiki

Sentinel 具有以下特征:

  • 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促销流量的核心场景,例如秒杀(突发流量控制在系统容量可以承受的范围)、消息削峰填谷、实时熔断下游不可用应用等。
  • 完备的实时监控:Sentinel 同时提供了实时的监控功能。您可以在控制台中看到接入应用的单台机器秒杀数据,甚至 500 台以下规模的集群汇总运行情况。
  • 广泛的开原生态:Sentinel 提供开箱即用的与其他开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相关的依赖并进行简单的配置即可快速的接入 Sentinel。
  • 完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展点。您可以通过实现扩展点,快速的定制逻辑。例如定制规则管理、适配数据源等。

阿里云提供了企业级 Sentinel 服务,应用高可用服务 AHAS。

image-20220623113642528

Sentinel 和 Hystrix 对比

image-20220623113826302

4. Sentinel 快速开始

Sentinel 资源保护的方式

5. 启动 Sentinel 控制台

6. Spring Cloud Alibaba 整合 Sentinel

微服务 和 Sentinel Dashboard 通信原理

CATALOG
  1. 1. 1. 分布式系统遇到的问题
  2. 2. 2. 解决方案
    1. 2.1. 超时机制
    2. 2.2. 服务限流
    3. 2.3. 资源隔离
    4. 2.4. 服务熔断
    5. 2.5. 服务降级
  3. 3. 3. Sentinel:分布式系统的流量防卫兵
    1. 3.1. 3.1 Sentinel 是什么
    2. 3.2. Sentinel 和 Hystrix 对比
  4. 4. 4. Sentinel 快速开始
    1. 4.1. Sentinel 资源保护的方式
  5. 5. 5. 启动 Sentinel 控制台
  6. 6. 6. Spring Cloud Alibaba 整合 Sentinel
    1. 6.1. 微服务 和 Sentinel Dashboard 通信原理