Sentinel(一):Sentinel 介绍和安装

一、Sentinel 介绍

1、什么是 Sentinel?

一句话来说,Sentinel就是:分布式系统的流量卫兵(官网)。

随着微服务的普及,服务调用的稳定性变得越来越重要。Sentinel以"流量"为切入点,在流量

控制、断路、负载保护等多个领域开展工作,保障服务可靠性。

Sentinel 中文官方文档:https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D

2、Sentinel 特点

Sentinel 提供的功能特点如下图所示:

Sentinel 主要特点如下:

2.1、丰富的应用场景

Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流

量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不

可用应用等。

2.2、完备的实时监控

Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数

据,甚至 500 台以下规模的集群的汇总运行情况。

2.3、广泛的开源生态

Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、

Apache Dubbo、gRPC、Quarkus 的整合。您只需要引入相应的依赖并进行简单的配置

即可快速地接入 Sentinel。同时 Sentinel 提供 Java/Go/C++ 等多语言的原生实现。

如下图所示:

2.4、完善的SPI扩展机制

Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻

辑。例如定制规则管理、适配动态数据源等。

3、Sentinel 解决了什么问题?

3.1、分布式系统中面临的问题:

复杂的体系结构中的应用程序可能有数十个依赖关系,每个依赖关系在某些时候将不可避免

的失败,比如如下的例子中,当我们调用A、E、F、J、K这几个服务的时候如果其中一个服

务出现问题会造成什么问题?

其实就会出现整体系统效率全部下降,而且严重就会出现服务雪崩的问题!

如下图所示业务:

3.2、什么是服务雪崩?

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

扇出。如果扇出的某个链路上某个微服务调用的响应时间过程或者不可用,微服务A的调用

就用占用越来越多的系统资源,从而引起系统崩溃,这也就是服务雪崩。其实就是服务的

高可用遭到了破坏。

对于高流量的应用来说,单一的后端依赖可能会导致服务器上的所有资源都在几秒钟内饱

和。同时还有可能造成这些应用程序导致服务之间的延迟增加,备份列队,线程和其他的

系统资源紧张,导致整个系统发生更多的级联故障。这些都表示需要对故障和延迟进行隔

离和管理,以便单个依赖关系失败,不能取消整个应用程序或系统,所以通常发生了一个

模块的某个实例失败后,这时候这个模块依然还会接受流量,然后这个有问题的模块还调

用其他的模块,这样就会发生级联故障,或者叫做雪崩

3.3、Sentinel 是如何解决服务雪崩问题的?

要解决服务雪崩问题的出现,就要在某个链路上的服务不可用用时,对整个链路服务做

服务降级处理;

Sentinel通过断路器 实现熔断降级,保证在一个依赖出现问题的情况下,不会导致整体服务

失败,避免级联故障(即雪崩问题出现),提高分布式系统的弹性。

Sentinel断路器:

断路器,它本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监

控(类似于熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应

(FallBack),而不是长时间的等待或者抛出调用方法无法出的异常,这样就保证了

服务调用方的不会被长时间、不必要的占用,从而避免了故障在分布式系统中蔓延

(类似于病毒传染),从而避免了故障在系统中蔓延,乃至崩溃。

4、Sentinel 对比其他同类产品的优势

对比与其他的产品而言,如:Hystrix,Sentinel 不需要我们自己手动搭建监控平台,而且它有

一套类似于Nacos的Web界面,可以让我们进行更加细粒度的配置流控、速率、服务熔断、

服务降级等,在使用上更简单方便。

5、Sentinel 组成

Sentinel 由2部分组成,即:核心库(Java 客户端)与 控制台(Dashboard)

1)核心库(Java 客户端)

不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框

架也有较好的支持。

在工作中,如果需要集成 Sentinel ,需要深入 Sentinel 的核心库;但如果时spring cloud 项

目一般直接引入spring-cloud-starter-alibaba-sentinel,该依赖中包含了 Sentinel 核心库,

如下图所示:

Sentinel 核心库如下所示:

XML 复制代码
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-core</artifactId>
    <version>版本</version>
</dependency>

2)控制台(Dashboard)

控制台(Dashboard)基于 SpringBoot开发,打包后可以直接运行,不需要额外的Tomcat

等应用容器。

二、Sentinel 安装

注意: 这里的 Sentinel 安装 其实安装的是 Sentinel 控制台(Dashboard)

下载地址:https://github.com/alibaba/Sentinel/releases

由上边知道,Sentinel Dashboard 是基于spring boot 开发,所以我们下载编译好的

jar 包,直接运行就行了。如下图所示:

注意:下载时注意看下你所下载的版本对JDK的版本的要求,JDK版本不一致可能启动报错

2、运行 Sentinel Dashboard

Sentinel Dashboard 默认监听端口是 8080,我们可以在启动时使用参数 -Dserver.port 来指定

其所监听的端口,如:-Dserver.port=8090(指定 Dashboard 监听端口是 8090);

Sentinel Dashboard控制台默认登录用户和密码都是sentinel

运行命令:java -Dserver.port=8090 -jar sentinel-dashboard-1.8.8.jar 来启动 Dashboard;

如下图所示:

Sentinel Dashboard 启动成功后在浏览器访问http://localhost:8090,并使用默认用户 sentinel

登录,如下图所示:

三、Sentinel 整合到项目中

Sentinel 安装好之后,在项目中整合Sentinel 很简单,只需要2步就可以了,

即:引入Sentinel核心库、配置Sentinel信息

1、引入 Sentinel 核心库

XML 复制代码
<!--sentinel 流量控制 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>

2、Sentinel 简单配置信息如下:

java 复制代码
server:
  port: 8401

spring:
  application:
    name: sentinel-8401
  cloud:
    #配置nacos
    nacos:
      discovery:
        server-addr: 47.117.80.49:8848
    #配置sentinel
    #注意: sentinel 是懒加载,只有有用户访问当前服务(如:sentinel-8401),当前服务(如:sentinel-8401)才会被注册到sentinel dashboard
    sentinel:
      #配置 sentinel dashboard(Sentinel 控制台)地址
      transport:
        dashboard: localhost:8090
        #默认8719端口,键入被占用会自动从8719+1,直到找到未被占用的端口
        port: 8719

#配置开放所有监控端点(Actuator Endpoints)通过 HTTP 暴露,允许外部访问这些端点以获取应用的运行状态、健康检查、性能指标等信息
management:
  endpoints:
    web:
      exposure:
        include: '*'

3、登录 Sentinel 控制台

登录 Sentinel 控制,观察当前服务(如:sentinel-8401)的监控情况;如下图所示:

注意:

Sentinel 是懒加载,只有有用户访问当前服务(如:sentinel-8401),当前服务(

如:sentinel-8401)才会被注册到Sentinel dashboard

相关推荐
sevevty-seven10 天前
Sentinel
linux·服务器·sentinel
秋恬意10 天前
什么是Sentinel?以及优缺点
sentinel
述雾学java11 天前
Sentinel 服务限流机制
sentinel
2401_8532757312 天前
Sentinel实现原理
服务器·网络·sentinel
苏格拉没有底_coder14 天前
【Redis】Sentinel哨兵
redis·sentinel
苏格拉没有底_coder19 天前
基于 Spring Cloud Gateway + Sentinel 实现高并发限流保护机制
sentinel
未来并未来21 天前
Sentinel 流量控制安装与使用
开发语言·python·sentinel
·云扬·21 天前
【PmHub面试篇】集成 Sentinel+OpenFeign实现网关流量控制与服务降级相关面试题解答
面试·职场和发展·sentinel
ℳ₯㎕ddzོꦿ࿐21 天前
Ubuntu 24.04 上安装与 Docker 部署 Sentinel
ubuntu·docker·sentinel