Sentinel介绍+安装

240 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情

1 什么是Sentinel

Sentinel是分布式系统的流量防卫兵
Sentinel以“流量”为切入点,在流量控制、断路、负载保护等多个领域开展工作,保障服务可靠性。也就是所谓的高可用

特点:

  • 丰富的应用场景
  • 完备的实时监控
  • 广泛的开源生态
  • 完善的 SPI 扩展机制 Sentinel主要是负责服务与服务之间的稳定性的,包括熔断,降级。他会实时监控服务,提供一些像断路器这样的实现。

2 分布式系统面临的问题

复杂的分布式系统结构中有复杂的依赖关系,每个依赖关系在某些时候将不可避免的失败,当其中某一个或几个服务出现问题的时候,则会出现整体系统效率全部下降,严重就会出现服务雪崩的问题。

服务雪崩:
多个微服务之间调用的时候,假设A调用B和C,B和C又调用其他的微服务,这就是所谓的扇出

image.png

如果扇出的某个链路上某个微服务调用的响应时间过长或者不可用,微服务A的调用就用占用越来越多的系统资源,从而引起系统崩溃,这也就是服务雪崩。其实就是服务的高可用遭到了破坏。

image.png

对于高流量的应用来说,单一的后端依赖可能会导致服务器上的所有资源都在几秒钟内饱和。 在一条链路之中,当某一块出现了问题,那么他的调用方其实在超时时间内一直都在等待回复,越来越多的请求停在A服务上的时候,那么几秒钟之内它的CPU会立即被打满。 同时还有可能造成这些应用程序导致服务之间的延迟增加,备份列队,线程和其他的系统资源紧张,导致整个系统发生更多的级联故障。 就好像是病毒传播一样,在某一个链路中,一个服务出现问题了,极有可能会影响其他服务。 这些都表示需要对故障和延迟进行隔离和管理,以便单个依赖关系失败,不能取消整个应用程序或系统 也就是说当一个链路中某个服务出现问题不能导致整个系统出现问题。 所以通常发生了一个模块的某个实例失败后,这时候这个模块依然还会接受流量,然后这个有问题的模块还调用其他的模块,这样就会发生级联故障,或者叫做雪崩

要解决这种问题的出现我们就需要用到服务降级,而Sentinel就可以保证在一个依赖出现问题的情况下,不会导致整体服务失败,避免级联故障,提高分布式系统的弹性。

3 Sentinel好处

Sentinel的熔断降级通过断路器实现:

断路器:它本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似于熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方法无法处理的异常,这样就保证了服务调用方的不会被长时间、不必要的占用,从而避免了故障在分布式系统中蔓延(类似于病毒传染),从而避免了故障在系统中蔓延,乃至崩溃。

好处体现:

不需要我们自己手动搭建监控平台,而且它有一套类似于Nacos的Web界面,可以让我们进行更加细粒度的配置流控速率服务熔断服务降级

目前主流编程都是约定>配置>代码,虽然我们的配置都可以写在代码中,但是我们还是要大面积的学习配置和注解的方式,尽量少些代码,这也是Sentinel的理念和初衷。

Sentinel解决的问题:

  1. 流量监控
  2. 线程数隔离
  3. 慢调用降级
  4. 调用链路
  5. 速率控制
  6. 集群限流
  7. 异常熔断
  8. 系统自适应保护
  9. 调用关系限流
  10. 热点限流
  11. 削峰填谷
  12. 来源访问控制

4 Sentinel下载和安装

下载地址:github.com/alibaba/Sen…

4.1 Sentinel 分为两个部分

  • 核心库(Java客户端)不依赖任何框架/库,只需要Java运行时环境,同时对Dubbo/SpringCloud 等框架也有较好的支持。
  • 控制台(Dashboard)基于 SpringBoot开发,打包后可以直接运行,不需要额外的Tomcat等应用容器。

4.2 启动步骤

  • 前提:jdk1.8环境和8080端口不能被占用
  • 启动命令:java -jar sentinel-dashboard-1.8.2.jar
  • 访问地址:localhost:8080
  • 输入默认账号密码:sentinel/sentinel 登陆页面:

image.png

控制台:

image.png