【Sentinel】初识Sentinel

简介: 【Sentinel】初识Sentinel

1.1.雪崩问题及解决方案

1.1.1.雪崩问题

微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。

4115f2f02c5842e3b4ceead4b0fd7c80.png 如图,如果服务提供者I发生了故障,当前的应用的部分业务因为依赖于服务I,因此也会被阻塞。

此时,其它不依赖于服务I的业务似乎不受影响.e53a49b87ff44ef1aa5291f7d815136d.png但是,依赖服务I的业务请求被阻塞,用户不会得到响应,则tomcat的这个线程不会释放,于是越来越多的用户请求到来,越来越多的线程会阻塞:


883b88179e884d9e8e336419751686b9.png

服务器支持的线程和并发数有限,请求一直阻塞,会导致服务器资源耗尽,从而导致所有其它服务

都不可用,那么当前服务也就不可用了。

那么,依赖于当前服务的其它服务随着时间的推移,最终也都会变的不可用,形成级联失败,雪崩就发生了:

1742d6cbec88468f8e1675d2c7c8a14e.png


1.1.2.超时处理

解决雪崩问题的常见方式有四种:

•超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待


d5fdb6839c684fac9db502f95df9f456.png

1.1.3.仓壁模式

方案2:仓壁模式

仓壁模式来源于船舱的设计:

57d36ffaa9ec4c0fada4caa297d5e444.png

船舱都会被隔板分离为多个独立空间,当船体破损时,只会导致部分空间进入,将故障控制在一定范围内,避免整个船体都被淹没。于此类似,我们可以限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离。


be8ad0d3e6ea469c9ac1a9a0437ecbb2.png

1.1.4.断路器

断路器模式:由断路器统计业务执行的异常比例,如果超出阈值则会熔断该业务,拦截访问该业务

的一切请求。

断路器会统计访问某个服务的请求数量,异常比例:


9346675fe63741d3b3d71080ae5dffc4.png

当发现访问服务D的请求异常比例过高时,认为服务D有导致雪崩的风险,会拦截访问服务D的一切请求,形成熔断:  


d01301006deb4fb39a414212d9efccb8.png


1.1.5.限流

流量控制:限制业务访问的QPS,避免服务因流量的突增而故障。

1.1.6.总结

什么是雪崩问题?

  • 微服务之间相互调用,因为调用链中的一个服务故障,引起整个链路都无法访问的情况。

可以认为:

限流是对服务的保护,避免因瞬间高并发流量而导致服务故障,进而避免雪崩。是一种预防措施。

超时处理、线程隔离、降级熔断是在部分服务故障时,将故障控制在一定范围,避免雪崩。是一种补救措施。


1.2.服务保护技术对比

在SpringCloud当中支持多种服务保护技术:


Netfix Hystrix


Sentinel


Resilience4J


早期比较流行的是Hystrix框架,但目前国内实用最广泛的还是阿里巴巴的Sentinel框架,这里我们做下对比:


Sentinel Hystrix
隔离策略 信号量隔离 线程池隔离/信号量隔离
熔断降级策略 基于慢调用比例或异常比例 基于失败比率
实时指标实现 滑动窗口 滑动窗口(基于 RxJava)
规则配置 支持多种数据源 支持多种数据源
扩展性 多个扩展点 插件的形式
基于注解的支持 支持 支持
限流 基于 QPS,支持基于调用关系的限流 有限的支持
流量整形 支持慢启动、匀速排队模式 不支持
系统自适应保护 支持 不支持
控制台 开箱即用,可配置规则、查看秒级监控、机器发现等 不完善
常见框架的适配 Servlet、Spring Cloud、Dubbo、gRPC 等 Servlet、Spring Cloud Netflix

1.3.Sentinel介绍和安装

1.3.1.初识Sentinel

Sentinel是阿里巴巴开源的一款微服务流量控制组件。官网地址:home | Sentinel

Sentinel 具有以下特征:

•丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。

•广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。


•完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。


1.3.2.安装Sentinel

1)下载

sentinel官方提供了UI控制台,方便我们对系统做限流设置。大家可以在GitHub下载。

课前资料也提供了下载好的jar包:


a86eecbf2d594543a7a3aca2027ed9f6.png

2)运行

将jar包放到任意非中文目录,执行命令:

java -jar sentinel-dashboard-1.8.1.jar

如果要修改Sentinel的默认端口、账户、密码,可以通过下列配置:

配置项 默认值 说明
server.port 8080 服务端口
sentinel.dashboard.auth.username sentinel 默认用户名
sentinel.dashboard.auth.password sentinel 默认密码

例如,修改端口:

java -Dserver.port=8090 -jar sentinel-dashboard-1.8.1.jar


3)访问

访问http://localhost:8080页面,就可以看到sentinel的控制台了:


3127af6e57284c0b87f9b3290a684058.png


需要输入账号和密码,默认都是:sentinel

登录后,发现一片空白,什么都没有:


d4e156202d5f4c1ba3d497fe7e5b7bb0.png

这是因为我们还没有与微服务整合。  

1.4.微服务整合Sentinel

我们在order-service中整合sentinel,并连接sentinel的控制台,步骤如下:

1)引入sentinel依赖

<!--sentinel-->
<dependency>
    <groupId>com.alibaba.cloud</groupId> 
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

2)配置控制台

修改application.yaml文件,添加下面内容:

server:
  port: 8088
spring:
  cloud: 
    sentinel:
      transport:
        dashboard: localhost:8080

3)访问order-service的任意端点

打开浏览器,访问http://localhost:8088/order/101,这样才能触发sentinel的监控。

然后再访问sentinel的控制台,查看效果:

15474fcf848642caa76a34432962aa32.png


相关文章
|
7月前
|
负载均衡 监控 Java
Sentinel介绍与使用
Sentinel介绍与使用
414 3
|
7月前
|
算法 网络协议 安全
深入理解Sentinel系列-1.初识Sentinel
深入理解Sentinel系列-1.初识Sentinel
319 1
深入理解Sentinel系列-1.初识Sentinel
|
监控 Dubbo Java
超详细的Sentinel入门
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
超详细的Sentinel入门
|
监控 Dubbo Java
Sentinel介绍及搭建
Sentinel介绍及搭建
329 0
|
SpringCloudAlibaba 双11 Sentinel
七.SpringCloudAlibaba极简入门-Sentinel熔断
在上一章节我们探讨了Sentinel的流控(限流)功能,Sentinel除了流控还提供了服务熔断和降级机制,服务之间的调用关系错综复杂,微服务的调用链上的某些服务资源不稳定(宕机,异常,超时)可能会导致可能请求的失败和请求的堆积,调用链产生连锁反应可能会导致整个微服务架构瘫痪。服务熔断降级机制是保障高可用的重要措施之一。
|
SpringCloudAlibaba 运维 监控
详解sentinel使用
1.概述 sentinel,springcloud alibaba中对标springcloud Netflix中的hystrix的组件,是一个强大的分布式系统保护工具,通过流量控制、熔断降级和系统负载保护等机制,保障了微服务架构的稳定性和可用性。它是Spring Cloud生态系统中的重要组件之一,被广泛应用于微服务开发和运维中。阿里每年的“双十一”,sentinel就是提供分布式保护机制的核心组件之一。
515 0
|
监控 Java API
Sentinel
Sentinel
|
算法 Sentinel
Sentinel学习二
如果我们不对Sentinel的异常提示做自定义,那么此时的提示是非常不详细的。如果做了自定义,就可以看到下面自定义的提示。sentinel提供了@SentinelResource注解帮助我们来实现自定义的熔断限流后的自定义方法处理,可以根据sentinel的aop可以看到处理的example,从而更为清晰的认识sentinel强大的功能。
119 0
Sentinel学习二
|
存储 监控 Dubbo
Sentinel 介绍| 学习笔记
本次课程主要分为三大部分,在这一部分中,将会介绍 Sentinel 诞生的背景、增长的核心特性。Sentinel 的完善的开源生态,以及流控降级组件对比。在第二部分中,会演示 Sentinel 的一些非常基本的使用场景,包括与 Spring cloud 的外边应用结合,Spring cloud 网关结合以及与 Dubbo 服务进行结合的演示。在第三部分中,介绍一下阿里云应用高可用服务 AHAS 的使用,以及如何快速的接入阿里云 AHAS 真正的流控降级。
Sentinel 介绍| 学习笔记
|
监控 算法 网络协议
Sentinel vs Hystrix 限流对比,到底怎么选?
Sentinel vs Hystrix 限流对比,到底怎么选?
809 0
Sentinel vs Hystrix 限流对比,到底怎么选?