1. 程式人生 > >Spring Cloud Alibaba系列(六)sentinel的實際應用

Spring Cloud Alibaba系列(六)sentinel的實際應用

## 一、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