Spring Cloud Alibaba系列(六)sentinel的實際應用
阿新 • • 發佈:2020-07-06
## 一、sentinel的持久化配置
上一章中我們通過Dashboard來為Sentinel客戶端設定各種各樣的規則,但是這些規則預設是存放在記憶體中,極不穩定,無法用於生成環境,所以需要將其持久化。
`DataSource` 擴充套件常見的實現方式有:
- **拉模式**:客戶端主動向某個規則管理中心定期輪詢拉取規則,這個規則中心可以是 RDBMS、檔案,甚至是 VCS 等。這樣做的方式是簡單,缺點是無法及時獲取變更;
- **推模式**:規則中心統一推送,客戶端通過註冊監聽器的方式時刻監聽變化,比如使用 [Nacos](https://github.com/alibaba/nacos)、Zookeeper 等配置中心。這種方式有更好的實時性和一致性保證。
Sentinel 目前支援以下資料來源擴充套件:
- Pull-based: 檔案、[Consul](https://github.com/alibaba/Sentinel/tree/master/sentinel-extension/sentinel-datasource-consul)
- Push-based: [ZooKeeper](https://github.com/alibaba/Sentinel/tree/master/sentinel-extension/sentinel-datasource-zookeeper), [Redis](https://github.com/alibaba/Sentinel/tree/master/sentinel-extension/sentinel-datasource-redis), [Nacos](https://github.com/alibaba/Sentinel/tree/master/sentinel-extension/sentinel-datasource-nacos), [Apollo](https://github.com/alibaba/Sentinel/tree/master/sentinel-extension/sentinel-datasource-apollo), [etcd](https://github.com/alibaba/Sentinel/tree/master/sentinel-extension/sentinel-datasource-etcd)
生產環境中一般常用的就是`推模式`。這裡我們使用Nacos儲存規則。推送模式的正確做法應該是 **配置中心控制檯/Sentinel 控制檯 → 配置中心 → Sentinel 資料來源 → Sentinel**。
![](https://img2020.cnblogs.com/blog/1719198/202007/1719198-20200706093810600-18164744.png)
### 1.1 sentinel同步nacos配置
1. 增加sentinel的依賴和nacos儲存擴充套件依賴
```xml
```
2. 新增nacos相關配置
```yaml
spring:
cloud:
sentinel:
datasource:
# 名稱隨意
javatrip:
nacos:
server-addr: 127.0.0.1:8848
dataId: ${spring.application.name}-rules
groupId: SENTINEL_GROUP
# 規則型別,取值見:
# org.springframework.cloud.alibaba.sentinel.datasource.RuleType
rule-type: flow
```
3. 提供介面用於測試限流
```java
@RestController
class test{
@RequestMapping("/test")
public String test(){
return "Java旅途";
}
}
```
4. nacos中增加限流規則的配置
![](https://img2020.cnblogs.com/blog/1719198/202007/1719198-20200706094742031-1375467782.png)
- resource:資源名,即限流規則的作用物件
- limitApp:流控針對的呼叫來源,若為 default 則不區分呼叫來源
- grade:限流閾值型別(QPS 或併發執行緒數);`0`代表根據併發數量來限流,`1`代表根據QPS來進行流量控制
- count:限流閾值
- strategy:呼叫關係限流策略
- controlBehavior:流量控制效果(直接拒絕、Warm Up、勻速排隊)
- clusterMode:是否為叢集模式
5. 測試,訪問test介面,發現sentinel-dashboard中出現了一條流控規則
![](https://img2020.cnblogs.com/blog/1719198/202007/1719198-20200706094100452-205992045.png)
### 1.2 sentinel-dashboard中修改規則同步到nacos
要想實現在sentinel-dashboard中修改規則並同步到nacos,我們就需要修改sentinel服務。首先我們去[官網](https://github.com/alibaba/Sentinel)下載Sentinel。
1. 修改pom檔案
```xml
```
將註釋掉,因為這個是作用與test目錄下的。
```xml
```
2. 找到 `sentinel-dashboard/src/test/java/com/alibaba/csp/sentinel/dashboard/rule/nacos`目錄,將整個目錄拷貝到` sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/`。
3. 找到 `com.alibaba.csp.sentinel.dashboard.controller.v2.FlowControllerV2` ,將預設動態規則修改為nacos動態規則。
```java
@Autowired
@Qualifier("flowRuleDefaultProvider")
private DynamicRule