Sentinel 规则持久化到 apollo 配置中心
????????Sentinel 規則默認是存儲在內存中的,只要服務重啟之后對應的規則也會消失,實際的生產中肯定是不允許這種操作,因此 Sentinel 官方推薦在生產架構中使用第三方數據源作為永久存儲中心,比如 nacos、apollo、zookeeper。因為這幾種數據源都是基于 push 模式,也就是由規則中心統一推送,Sentinel Client 只需通過注冊監聽器的方式時刻監聽變化,并負責獲取配置中心推送的配置并更新到本地,這種方式能更好的保證實時性和一致性,并且各個微服務的限流、降級規則都可以永久存儲,如下圖所示。那么這篇文章我們就介紹下,如何集成 apollo 做配置中心進行規則持久化。
1、準備工作:
? ? ? ? 首先我們需要先做下準備工作,部署 Apollo 服務 + 搭建微服務項目并接入Apollo,這部分的內容我們就不單獨介紹了,有問題的讀者請閱讀下Apollo官方文檔:https://www.apolloconfig.com/#/zh/development/apollo-development-guide
2、添加依賴:
<!-- sentinel整合apollo進行規則持久化 --> </dependency><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-apollo</artifactId> </dependency>3、添加與 sentinel 規則相關的配置項:
# 項目名 spring.application.name = myApplication # sentinel + apollo 進行規則持久化,為了方便管理,統一將所有項目的 sentinel 規則存放在 sentinel-rules 的公共NameSpace中 sentinel.datasource.rules.apollo.namespace-name = EDU001.sentinel-rules# 規則類型:限流 spring.cloud.sentinel.datasource.flow.apollo.ruleType = flow # 從Apollo公共空間中EDU001.sentinel-rules讀取限流規則 spring.cloud.sentinel.datasource.flow.apollo.namespace-name = ${sentinel.datasource.rules.apollo.namespace-name} # 限流規則的具體內容,具體寫法下文會介紹(我們需要再添加一個key為“myApplication-flow-rules”的屬性存放具體的限流規則) spring.cloud.sentinel.datasource.flow.apollo.flowRulesKey = ${spring.application.name}-${spring.cloud.sentinel.datasource.flow.apollo.ruleType}-rules# 規則類型:熔斷降級 spring.cloud.sentinel.datasource.degrade.apollo.ruleType = degrade # 從Apollo公共空間中EDU001.sentinel-rules讀取熔斷規則 spring.cloud.sentinel.datasource.degrade.apollo.namespace-name = ${sentinel.datasource.rules.apollo.namespace-name} # 熔斷降級規則的具體內容,具體寫法下文會介紹 spring.cloud.sentinel.datasource.degrade.apollo.flowRulesKey = ${spring.application.name}-${spring.cloud.sentinel.datasource.degrade.apollo.rule-ruleType}-rules????????上述配置僅僅展示了和持久化相關的一些配置,其他相關的配置代碼就不貼了。ruleType 的取值用于區分對應的規則類型,總共七大類型,這里我們配置了限流和熔斷規則,其他規則類型的取值在 com.alibaba.cloud.sentinel.datasource.RuleType 這個枚舉類中有體現,可以自己嘗試配置一下。另外,上述的 key 中的 flow、degrade 的名字可以任意。
4、配置規則的真正內容:
????????sentinel 規則存放在 apollo 配置中心的方式默認都是 JSON 格式的,那么,如何書寫 JSON 格式的規則呢?下面我們就介紹下 Json 數據格式中每個屬性的作用,開發中可以照著修改即可,對于一些可選屬性不需要的時候也可以刪除。
4.1、流控規則:
[{// 資源名"resource": "/test",// 針對來源,若為 default 則不區分調用來源"limitApp": "default",// 限流閾值類型(1:QPS;0:并發線程數)"grade": 1,// 閾值"count": 1,// 是否是集群模式"clusterMode": false,// 流控效果(0:快速失敗;1:Warm Up(預熱模式);2:排隊等待)"controlBehavior": 0,// 流控模式(0:直接;1:關聯;2:鏈路)"strategy": 0,// 預熱時間(秒,預熱模式需要此參數)"warmUpPeriodSec": 10,// 超時時間(排隊等待模式需要此參數)"maxQueueingTimeMs": 500,// 關聯資源、入口資源(關聯、鏈路模式)"refResource": "rrr"} ]4.2、熔斷降級規則:
[{// 資源名"resource": "/test1","limitApp": "default",// 熔斷策略(0:慢調用比例,1:異常比率,2:異常計數)"grade": 0,// 最大RT、比例閾值、異常數"count": 200,// 慢調用比例閾值,僅慢調用比例模式有效(1.8.0 引入)"slowRatioThreshold": 0.2,// 最小請求數"minRequestAmount": 5,// 當單位統計時長(類中默認1000)"statIntervalMs": 1000,// 熔斷時長"timeWindow": 10} ]4.3、熱點規則:
[{// 資源名"resource": "/test1",// 限流模式(QPS 模式,不可更改)"grade": 1,// 參數索引"paramIdx": 0,// 單機閾值"count": 13,// 統計窗口時長"durationInSec": 6,// 是否集群 默認false"clusterMode": 默認false,// "burstCount": 0,// 集群模式配置"clusterConfig": {// "fallbackToLocalWhenFail": true,// "flowId": 2,// "sampleCount": 10,// "thresholdType": 0,// "windowIntervalMs": 1000},// 流控效果(支持快速失敗和勻速排隊模式)"controlBehavior": 0,// "limitApp": "default",// "maxQueueingTimeMs": 0,// 高級選項"paramFlowItemList": [{// 參數類型"classType": "int",// 限流閾值"count": 222,// 參數值"object": "2"}]} ]4.4、系統規則:
負值表示沒有閾值檢查,不需要刪除參數
[{// RT"avgRt": 1,// CPU 使用率"highestCpuUsage": -1,// LOAD"highestSystemLoad": -1,// 線程數"maxThread": -1,// 入口 QPS"qps": -1} ]4.5、授權規則:
[{// 資源名"resource": "sentinel_spring_web_context",// 流控應用"limitApp": "/test",// 授權類型(0代表白名單;1代表黑名單。)"strategy": 0} ]????????至此,我們就完成了 sentinel 規則持久化到 apollo 配置中心了,只需要在 apollo 中添加好規則并發布配置,相關規則就會被推送到對應的 sentinel client 以及 sentinel-dashboard 中了。如果讀者想實現 sentinel 規則持久化到 nacos 配置中心,那么可以參考下這篇文章:https://mp.weixin.qq.com/s/Q7Xv8cypQFrrOQhbd9BOXw
????????但是在 push 模式下,所有規則都只能通過 Nacos 界面或 Apollo 界面來完成修改才能得到持久化存儲,而在 Sentinel Dashboard 中修改限流規則雖然可以生效,但是不會被持久化到配置中心。而在這兩個配置中心里存儲的數據是一個 Json 格式,當存儲的規則越來越多,對該 Json 配置的可讀性與可維護性會變的越來越差。所以接下來我們將會介紹如何對 sentinel-dashboard 進行改造,實現 Sentinel-Dashboard 與 apollo 規則的相互同步(文章地址:https://blog.csdn.net/a745233700/article/details/122659459)
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Sentinel 规则持久化到 apollo 配置中心的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Sentinel-Dashboard 与
- 下一篇: sentinel 限流熔断神器详细介绍