️ Pic by Alibaba Tech on Facebook
叢集限流可以限制某個資源調用在叢集内的總 QPS,并且可以解決單機流量不均導緻總的流控效果不佳的問題,是保障服務穩定性的利器。
Sentinel 從
1.4.0版本開始提供叢集流控特性,但使用 Sentinel 叢集限流需要對一系列的動态資料源進行相關配置,并且需要對開源控制台進行一些改造,有一定的使用成本。為了大家更好地了解叢集流控并快速地使用,我們提供了雲上版本的 Sentinel 叢集限流控制台示例。隻需要簡單的幾步即可快速接入 AHAS Sentinel 叢集限流控制台,無需手動配置動态資料源。
注:本控制台示例位于雲上環境,需要使用阿裡雲賬号登入。
1. 引入依賴
我們隻需要在 Maven 中引入以下依賴:
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>ahas-sentinel-client</artifactId>
<version>1.1.0</version>
</dependency>
ahas-sentinel-client
中會包含
sentinel-core
以及叢集限流等必要依賴(基于 Sentinel 1.4.1 版本),以及連接配接阿裡雲 AHAS Sentinel 控制台所需子產品(鑒權、通信等)。同時
ahas-sentinel-client
實作了 push 模式的資料源并且會自動注冊所有規則配置和叢集配置資料源,在控制台推送即可實時生效:
若之前接入了開源 Sentinel 控制台,則需要将相關的通信依賴(如
sentinel-transport-simple-http
或
sentinel-transport-netty-http
)替換成此依賴,否則将無法正确連接配接 AHAS Sentinel 控制台。若希望從 AHAS Sentinel 控制台切換到開源 Sentinel 控制台,隻需要将依賴替換回來,修改一下啟動參數即可。
注意:ahas-sentinel-client 1.1.x 僅相容 Sentinel 1.4.1 及以上版本。
2. 開通 AHAS,擷取啟動參數
引入依賴後,我們需要到
阿裡雲控制台開通 AHAS 功能(免費)。可以根據
開通 AHAS 文檔和
Sentinel 流控降級 Demo 快速入門裡面的指引進行開通。注意若應用運作在非阿裡雲 ECS 環境或本地,需要在左上角選擇切換 公網 環境。
開通後我們可以點選左側側邊欄的 流控降級,進入 Sentinel 控制台應用總覽頁面。在頁面右上角,單擊 應用接入,選擇 Java SDK 接入頁簽,到 配置啟動參數 頁簽拿到需要的 JVM 啟動參數(詳情請參考
SDK 接入文檔),類似于:
-Dproject.name=AppName -Dahas.license=<License>
其中
project.name
代表應用名(會顯示在控制台),
ahas.license
代表自己的授權 license。
注意:若應用運作在非阿裡雲 ECS 環境或本地,需要在左上角切換到 公網 環境。
詳細接入步驟可以參考
AHAS Sentinel 控制台文檔。
3. 啟動應用執行個體
接下來我們就可以在本地啟動應用了,啟動應用時需要加上拿到的啟動參數。若要在本地體驗叢集限流功能,需要在本機啟動多個應用執行個體,并額外添加
-Dcsp.sentinel.log.use.pid=true
參數(用于區分同個應用多個執行個體)。啟動之後,我們就可以在對應應用的機器清單頁面看到接入的機器了:
4. 配置設定 Token Server
叢集限流中共有兩種身份:
- Token Client 即叢集流控用戶端,用于向所屬 Token Server 通信請求 token。叢集限流服務端會傳回給用戶端結果,決定是否限流。Sentinel 叢集流控的通信底層采用 Netty 實作。
- Token Server 即叢集流控服務端,處理來自 Token Client 的請求,根據配置的叢集規則判斷是否應該發放 token(是否允許通過)。
本示例中 Token Server 模式為嵌入模式,即作為内置的 Token Server 與應用在同一程序中啟動,無需單獨部署:
我們需要通過特定的 URL 來進入 AHAS 叢集流控 Demo 頁面(其中
appName
後面的參數替換成我們的應用名):
https://ahas.console.aliyun.com/#/SystemGuardClusterServerPage?appName=web-demo®ionId=public然後我們就進入到了叢集流控 Token Server 清單頁面:
我們可以點選右上角的 新增 Token Server 按鈕來新增 Token Server 并執行配置設定。我們首先需要在新增 Token Server 對話框内選擇一台 Token Server,并配置該 Token Server 的端口以及最大的 QPS 配額(用于限制資源使用,防止嵌入模式下影響應用本身)。接下來我們就在下面的選擇框中為該 Token Server 配置設定 Token Client。在上面圖中的例子中,我們的應用共有兩個執行個體,其中一個指定為 Token Server,另一個指定為 Token Client。選擇完成後點選“儲存”按鈕儲存配置設定。
儲存成功後,我們就能在 Token Server 清單頁面看到剛剛配置設定的 Token Server 了:
點選左側的下拉按鈕,可以看到該 Token Server 和所管理的 Token Client 的實時資訊:
5. 配置規則,檢視效果
接下來我們去流控規則頁面給我們的應用配置流控規則。先對某個資源配置普通的流控規則,單機 QPS 門檻值設定為 10:
然後分别持續請求兩台機器對應的資源,可以在監控頁面看到總 QPS 為 20(每個單機 QPS 各為 10):
接下來我們編輯剛才建立的規則,開啟叢集模式,門檻值模式選擇“總體門檻值”,代表對該資源限制叢集内的調用總量為 10。儲存規則:
等待一段時間,我們可以在監控頁面看到資源的總 QPS 被限到了 10:
有關 Sentinel 叢集流控的更多特性和用法,可以參考
Sentinel 叢集流控文檔以及之前的叢集流控的文章。我們同時提供了嵌入模式下應用配置叢集流控配置源的 Demo,可以參考:
sentinel-demo-cluster-embedded本文作者:
宿何,社群昵稱sczyh30,阿裡巴巴高可用架構組開發工程師,目前主要負責Sentinel 開源項目的開發和社群維護。
有關 Sentinel 的更多資訊: