- github:https://github.com/alibaba/Sentinel
- 中文文档:https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D
- 当前稳定版:1.8.1 2021.02.12
一、 Docker 安装 Sentinel
注:测试时直接在本地运行jar包进行测试,不使用Docker,不然微服务也要在云服务器运行才可以。
拉取镜像
docker pull bladex/sentinel-dashboard
运行镜像(默认8858端口)
docker run --name my-sentinel -d -p 8858:8858 -v /etc/localtime:/etc/localtime:ro bladex/sentinel-dashboard
注:使用宿主机的时间,如果sentinel的时间和服务时间不一致会导致控制台不显示监控数据。该问题的 :官方解释
访问 dashboard :
http://ip:8858
登录:默认用户名和密码均为 sentinel
二、微服务注册到Sentinel
pom依赖,通常包括下面三个,配合Nacos一起用
1
2
3
4
5
6
7
8
9
10
11
12
13
14<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>yaml 配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18spring:
application:
name: 微服务名
cloud:
nacos:
discovery:
server-addr: ip:8848
sentinel:
transport:
dashboard: ip:8858
port: 8719 #默认8719,假如被占用了会自动从8719开始依次+1扫描。直至找到未被占用的端口
client-ip: 微服务IP # 用sentinel在云服务器Docker时配置,微服务在其他云服务器,本地运行时不用配置
management:
endpoints:
web:
exposure:
include: '*'主启动类还是添加
@EnableDiscoveryClient
常用注解启动微服务,调用微服务的任一端口后,微服务即被Sentinel 监控。
三、流量控制
1. QPS与线程数(直接失败)
适用场景:如抢课系统,直接在界面上对接口添加流控,同时有QPS和线程数,保证了进入来的线程(用户)可以得到快速的响应。
2. 流控的关联
适用场景:如先调用订单接口调用支付接口,支付接口已经达到饱和的情况下,订单接口便应该被限流。如下图:即B达到限流要求时(B的QPS > 1),对A限流,A直接失败。
3. 流控预热
适用场景:某时刻的秒杀活动。当系统之前处于较低的访问量,突然增加的访问量会导致系统崩溃,因此使QPS和线程数的限流阈值慢慢变大,有一个缓冲的过程。默认开始的限流数为设定值的三分之一,经过预定时间达到设定的流控值。
4. 流控的排队等候
适用场景:间隔性的突发流量。如消息队列,突然有很多请求,然后后面空闲,为了在空闲时间处理这些请求,防止直接被拒绝。对应 漏桶算法 ,严格控制流量。
...
...
00:00
00:00
本文为作者原创文章,未经作者允许不得转载。