隨着微服務的流行,服務和服務之間的穩定性變得越來越重要。Sentinel 是面向分布式服務架構的流量控制組件,主要以流量為切入點,從流量控制、熔斷降級、系統自適應保護等多個維度來幫助您保障微服務的穩定性。
今天給大家介紹一些在使用過程中會遇到的一些問題。
SentinelResource 埋點監控
@SentinelResource 可以作用於方法上的熔斷降級保護,跟 Hystrix 的@HystrixCommand 注解作用是一樣的。
做監控的目的是為了在業務方法觸發了熔斷降級規則后,在對應的監控視圖中可以看到這個操作觸發了對應的規則。
@SentinelResource 的工作依賴於 SentinelResourceAspect 這個切面,需要監控的話對 SentinelResourceAspect 這個類進行改造就可以了。
流控熔斷預警
在流量突然上升的時候,也就意味着隨時都可能迎來請求量的高峰,就會觸發限流。我們也需要有一定的監控手段來提前告警,這種場景可以擴展 Slot 來實現提前告警的方案,具體方式可以查詢這篇文章:https://mp.weixin.qq.com/s/qhep2f9HgK7sZFcdKMAMVg
RestFul API 處理
在 Sentinel 中,以資源的概念來進行對應的限流熔斷操作。如果你們的 API 是 RestFul 風格,就會出現同一個接口變成 N 個資源的情況。
可以用@SentinelResource 為每個接口固定好資源名,這樣比較繁瑣。所以需要對這類的 API 進行格式化,變成一個資源。相關實現參考:https://blog.csdn.net/luanlouis/article/details/91633042還挺全的。
核心原理就是重寫 UrlCleaner 的實現邏輯,利用正則進行匹配處理。
這類操作不僅僅是在 Sentinel 中會遇到,在其他的框架中也經常會遇到這種情況。比如在 Cat 中也會有類似場景,對 API 進行監控,如果不處理同樣會出現 N 個監控項。
Origin 來源限制
如果需要對某個調用方進行限流,我們可以利用 Origin 方式來實現。建議做成動態配置方式,比如支持 IP, 支持請求頭中的參數等方式進行限制。
內部服務之間調用還可以將本服務的應用名存放在請求頭中傳遞過去,這樣就可以在 Sentinel 中基於 Origin 來實現內部服務調用的流量控制。
熱點參數動態流控
對於熱點參數的流控,也可以做成動態配置的方式。
比如當前是商品 ID 為熱點參數,后面是訂單 ID 為熱點參數。
比如當前是商品接口,后面是訂單接口。
可以從 url 參數中獲取熱點參數,可以從 header 中獲取熱點參數,可以從 path 路徑中獲取熱點參數。
增加一個配置信息,然后擴展 Sentinel 的 Filter 進行限流控制,根據配置獲取對應的熱點參數進行限流。
限流規則持久化
限流規則持久化是肯定要做的,默認規則是存儲在內存中,這樣一起動規則就丟失了,所以必須持久化。
持久化分為兩種,首先是客戶端,客戶端持久化意思是說客戶端需要加載對應的規則,這些規則會從一個地方進行獲取,比如我們用 Apollo 配置中心來存儲的話,客戶端在啟動時就會從 Apollo 中去拉取對應的規則信息。
對應的操作步驟和詳細介紹可以查看下面這篇文章,雖然寫了很久了,但是總體思路什么的都沒變化。
Sentinel Client: 整合 Apollo 規則持久化:https://mp.weixin.qq.com/s/K9JtdGoLD1XALq5D67slPQ
然后是服務端也就是控制台的持久化,我們可以在控制台進行規則的添加和編輯,然后會把對應的配置信息推送給所有的客戶端,這樣規則就生效了。
同樣存儲重啟即丟失的情況,所以控制台也需要進行持久化規則。如果客戶端對接了 Apollo,那么控制也需要對接 Apollo 將規則信息存儲到 Apollo 中,這樣整個流程就連起來了。
可以參考這篇文章:阿里 Sentinel 控制台:-整合 Apollo 規則持久化:https://mp.weixin.qq.com/s/deigVXhEd9HycuLLm-oJzA
監控數據持久化
Sentinel 控制台的實時監控數據,默認僅存儲 5 分鍾以內的數據。如果需要持久化,需要實現框架提供的相關接口進行改造。
5 分鍾確實很短,最起碼要存儲最近 3 天的數據,這樣方便查看流量的趨勢。
關於相關實現大家可以去看文檔,比較簡單,主要就是實現 MetricsRepository,將監控的數據存儲到對應的數據庫中。
相關改造源碼可以參考:https://github.com/yinjihuan/kitty/tree/master/kitty-distributed/kitty-distributed-sentinel
關於作者:尹吉歡,簡單的技術愛好者,《Spring Cloud 微服務-全棧技術與案例解析》, 《Spring Cloud 微服務 入門 實戰與進階》作者, 公眾號猿天地發起人。
我整理了一份很全的學習資料,感興趣的可以微信搜索「猿天地」,回復關鍵字 「學習資料」獲取我整理好了的 Spring Cloud,Spring Cloud Alibaba,Sharding-JDBC 分庫分表,任務調度框架 XXL-JOB,MongoDB,爬蟲等相關資料。