1. 程式人生 > >快速體驗 Sentinel 集群限流功能,只需簡單幾步

快速體驗 Sentinel 集群限流功能,只需簡單幾步

tin watermark ecc tex 高可用 實時 啟動參數 切換 guard

技術分享圖片
? 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 及以上版本。

  1. 開通 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 控制臺文檔。

  1. 啟動應用實例
    接下來我們就可以在本地啟動應用了,啟動應用時需要加上拿到的啟動參數。若要在本地體驗集群限流功能,需要在本機啟動多個應用實例,並額外添加 -Dcsp.sentinel.log.use.pid=true 參數(用於區分同個應用多個實例)。啟動之後,我們就可以在對應應用的機器列表頁面看到接入的機器了:

技術分享圖片

  1. 分配 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 的實時信息:

技術分享圖片

  1. 配置規則,查看效果
    接下來我們去流控規則頁面給我們的應用配置流控規則。先對某個資源配置普通的流控規則,單機 QPS 閾值設置為 10:

技術分享圖片

然後分別持續請求兩臺機器對應的資源,可以在監控頁面看到總 QPS 為 20(每個單機 QPS 各為 10):

技術分享圖片

接下來我們編輯剛才新建的規則,開啟集群模式,閾值模式選擇“總體閾值”,代表對該資源限制集群內的調用總量為 10。保存規則:

技術分享圖片

等待一段時間,我們可以在監控頁面看到資源的總 QPS 被限到了 10:

技術分享圖片

有關 Sentinel 集群流控的更多特性和用法,可以參考 Sentinel 集群流控文檔 以及之前的集群流控的文章。我們同時提供了嵌入模式下應用配置集群流控配置源的 Demo,可以參考:sentinel-demo-cluster-embedded。

本文作者:
宿何,社區昵稱sczyh30,阿裏巴巴高可用架構組開發工程師,目前主要負責Sentinel 開源項目的開發和社區維護。

快速體驗 Sentinel 集群限流功能,只需簡單幾步