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

快速體驗 Sentinel 集羣限流功能,只需簡單幾步
️ Pic by Alibaba Tech on Facebook

集羣限流 可以限制某個資源調用在集羣內的總 QPS,並且可以解決單機流量不均導致總的流控效果不佳的問題,是保障服務穩定性的利器。

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

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 控制檯,則需要將相關的通信依賴(如 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 參數(用於區分同個應用多個實例)。啓動之後,我們就可以在對應應用的機器列表頁面看到接入的機器了:

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

  1. 分配 Token Server
    集羣限流中共有兩種身份:

Token Client 即集羣流控客戶端,用於向所屬 Token Server 通信請求 token。集羣限流服務端會返回給客戶端結果,決定是否限流。Sentinel 集羣流控的通信底層採用 Netty 實現。
Token Server 即集羣流控服務端,處理來自 Token Client 的請求,根據配置的集羣規則判斷是否應該發放 token(是否允許通過)。
本示例中 Token Server 模式爲嵌入模式,即作爲內置的 Token Server 與應用在同一進程中啓動,無需單獨部署:

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

我們需要通過特定的 URL 來進入 AHAS 集羣流控 Demo 頁面(其中 appName 後面的參數替換成我們的應用名):

https://ahas.console.aliyun.com/#/SystemGuardClusterServerPage?appName=web-demo&regionId=public

然後我們就進入到了集羣流控 Token Server 列表頁面:

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

我們可以點擊右上角的 新增 Token Server 按鈕來新增 Token Server 並執行分配。我們首先需要在新增 Token Server 對話框內選擇一臺 Token Server,並配置該 Token Server 的端口以及最大的 QPS 配額(用於限制資源使用,防止嵌入模式下影響應用本身)。接下來我們就在下面的選擇框中爲該 Token Server 分配 Token Client。在上面圖中的例子中,我們的應用共有兩個實例,其中一個指定爲 Token Server,另一個指定爲 Token Client。選擇完成後點擊“保存”按鈕保存分配。

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

保存成功後,我們就能在 Token Server 列表頁面看到剛剛分配的 Token Server 了:

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

點擊左側的下拉按鈕,可以看到該 Token Server 和所管理的 Token Client 的實時信息:

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

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

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

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

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

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

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

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

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章