Sentinel概述
Sentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。它以流量为切入点, 从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。
Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景, 例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
Sentinel核心分为两个部分:
核心库(Java 客户端):能够运行于所有 Java 运行时环境,同时对Dubbo /Spring Cloud 等框架也有较好的支持。
控制台(Dashboard):基于 Spring Boot 开发,打包后可以直接运行。
一、雪崩问题
微服务调用链路中的某个服务故障,引起整个链路中所有微服务都不可用,这就是雪崩。
1、解决雪崩问题的常见方式有四种
超时处理(服务故障处理)
设定超时时间,请求超过一定时间没有相应就返回错误信息,不会无休止的等待。
该方法只能缓解,不能根本解决问题。
舱壁模式(服务故障处理)
限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离
熔断降级(服务故障处理)
有断路器统计业务执行的异常比例,如果超出阈值则会熔断该业务,拦截访问该业务的一切请求。
流量控制(瞬间高并发预防)
显示业务访问的QPS,避免服务因流量的突增而故障。
属于预防手段。
2、总结
什么是雪崩
微服务调用链路中的某个服务故障,引起整个链路中所有微服务都不可用。
如何避免因瞬间高并发流量而导致服务故障
- 流量控制
如何避免因服务故障引起的雪崩问题
- 超时处理
- 线程隔离
- 降级熔断
二、 服务保护技术对比
三、认识Sentinel
Sentinel是分布式系统的流量卫兵,Sentinel以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。是阿里巴巴开源的一款微服务流量控制组件。
官网地址:https://sentinelguard.io/zh-cn/index.html
Sentinel具有以下特征:
四、安装Sentinel
1、方法一:使用jar
下载
访问官网:https://github.com/alibaba/Sentinel/releases
运行
端口默认是8080
java -jar sentinel-dashboard-1.8.4.jar
# 设置参数尤其是指定端口,必须两个都指定
nohup java -Dserver.port=8858 -Dcsp.sentinel.dashboard.server=localhost:8858 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.4.jar &
命令详解:
1.nohup command & #在后台运行
2.-Dserver.port=8858 #设置sentinel dashboard服务端口是8858
3.-Dcsp.sentinel.dashboard.server=localhost:8858 :# 指定要被哪个控制台监控(这里指定的是自己监控自己)
4.-Dproject.name=sentinel-dashboard # 指定实例名称(名称会在控制台左侧以菜单显示)
#5,6不设置的时候初始账号密码都是sentinel
5.-Dsentinel.dashboard.auth.username=sentinel # 设置登录的帐号为:sentinel
6.-Dsentinel.dashboard.auth.password=123456 # 设置登录的密码为:123456
新建start.bat
@echo off
cd E:\Program Files\Java\jdk1.8.0_131\bin
java -jar -Xms256m -Xmx256m -Dserver.port=8858 -Dcsp.sentinel.dashboard.server=127.0.0.1:8858 E:\dev\sentinel\sentinel-dashboard-1.8.4.jar
pause
访问
localhost:8080,默认的账号密码是sentinel
修改端口、账号、密码
2、方法二:docker安装
参考:https://blog.csdn.net/Blueeyedboy521/article/details/124599844
docker run --name sentinel -p 8858:8858 -d bladex/sentinel-dashboard:latest
五、微服务整合sentinel
1.引入sentinel依赖:
<!--引入sentinel依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
2. 配置控制台地址
spring:
cloud:
sentinel:
transport:
dashboard: localhost:8080 # sentinel控制台地址
3.访问微服务的任意端点,触发sentinel监控
比如访问http://localhost:8088/order/101
如果出现sentinel 簇点链路为空白–不显示资源
sentinel 必须跟微服务处在同一个局域网中。
因为 sentinel 机器列表里显示的服务IP地址为内网地址。
(While Nacos 可以在内网,也可以在外网)
正确的如下: