SpringCloud微服務:Sentinel哨兵元件,管理服務限流和降級
阿新 • • 發佈:2020-03-22
原始碼地址:[GitHub·點這裡](https://github.com/cicadasmile/spring-cloud-base)||[GitEE·點這裡](https://gitee.com/cicadasmile/spring-cloud-base)
# 一、基本簡介
## 1、概念描述
Sentinel 以流量為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。包括核心的獨立類庫,監控臺,豐富的使用場景驗證。(這似乎是阿里開源元件的一貫作風,極其有特點,且特點很規律)
基本特性圖:
![](https://img2020.cnblogs.com/blog/1691717/202003/1691717-20200322095248072-1277343406.png)
`補刀一句`:這種圖很多人可能不在意,但是一般官方給這個圖就是該中介軟體的基本使用思路,與核心功能點。
## 2、基礎性概念
- 資源管理
資源是Sentinel元件中的核心概念之一。應用伺服器上指令碼,靜態頁面,API介面,檔案圖片等都可以理解為資源,對於Java開發者而言,API介面就是這裡資源的概念。
- 規則配置
Sentinel元件通過流控規則的配置,來指定允許該資源(API介面)通過的請求次數,IP黑白名單,應用服務等。
- 測試效果
`QPS`:每秒查詢率,是一臺伺服器每秒能夠處理的查詢次數。
`TPS`:每秒處理事務數,事務處理整體傾向於整個過程。
# 二、框架環境整合
這裡的環境主要整合Nacos註冊中心,Feign服務,Sentinel哨兵,和Sentinel控制檯。
## 1、基本依賴
這裡的依賴需要參考官方文件,不同的環境使用不同的依賴,這裡主要適配SpringCloud環境,所以使用如下包即可。
```xml
```
## 2、控制檯面板
這裡直接從GitHub下載一個控制檯服務包即可,也可以自己下載原始碼,按照需求修改後自行打包。
```
java -jar sentinel-dashboard-1.7.1.jar
```
下載並啟動控制檯服務。
## 3、服務配置
這裡主要是把用到的兩個服務9001和9002連線到監控臺。
```
spring:
application:
name: node09-nacos-9001
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
sentinel:
transport:
port: 9001
dashboard: localhost:8080
```
最下面四行檔案是哨兵控制檯的主要配置,注意剛啟動之後控制檯是看不到連線的,有資源被觸發之後才能看到。(附一張首頁效果圖)
![](https://img2020.cnblogs.com/blog/1691717/202003/1691717-20200322095302235-727328133.jpg)
# 三、流量控制
## 1、基本描述
流量控制(flow control),其原理是監控應用流量的 QPS 或併發執行緒數等指標,當達到指定的閾值時對流量進行控制,以避免被瞬時的流量高峰沖垮,從而保障應用的高可用性。
## 2、限流規則
限流規則主要由下面幾個因素組成。
- resource:資源名,即限流規則的作用物件,對於Java服務端開發而言就是執行的方法;
- count: 限流閾值,單位時間內能按照規則通過的請求量;
- grade: 限流閾值型別,QPS 或併發執行緒數 ;
- limitApp: 流控限制的指定應用來源,若為default則不區分呼叫來源;
- strategy: 呼叫關係限流策略,直連,鏈路等;
- controlBehavior: 流量控制效果,直接拒絕、Warm Up、勻速排隊;
## 3、基本案例
- 硬編碼
`配置規則`
```java
public class FlowRuleConfig {
public static void initFlowQpsRule(String resourceName) {