️ Pic by Alibaba Tech on Facebookhtml
集羣限流 能夠限制某個資源調用在集羣內的總 QPS,而且能夠解決單機流量不均致使總的流控效果不佳的問題,是保障服務穩定性的利器。git
Sentinel 從 1.4.0 版本開始提供集羣流控特性,但使用 Sentinel 集羣限流須要對一系列的動態數據源進行相關配置,而且須要對開源控制檯進行一些改造,有必定的使用成本。爲了你們更好地理解集羣流控並快速地使用,咱們提供了雲上版本的 Sentinel 集羣限流控制檯示例。只須要簡單的幾步便可快速接入 AHAS Sentinel 集羣限流控制檯,無需手動配置動態數據源。github
注:本控制檯示例位於雲上環境,須要使用阿里雲帳號登陸。web
咱們只須要在 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 控制檯,只須要將依賴替換回來,修改一下啓動參數便可。app
注意:ahas-sentinel-client 1.1.x 僅兼容 Sentinel 1.4.1 及以上版本。阿里雲
引入依賴後,咱們須要到 阿里雲控制檯 開通 AHAS 功能(免費)。能夠根據 開通 AHAS 文檔 和 Sentinel 流控降級 Demo 快速入門 裏面的指引進行開通。注意若應用運行在非阿里雲 ECS 環境或本地,須要在左上角選擇切換 公網 環境。spa
開通後咱們能夠點擊左側側邊欄的 流控降級,進入 Sentinel 控制檯應用總覽頁面。在頁面右上角,單擊 應用接入,選擇 Java SDK 接入頁籤,到 配置啓動參數 頁籤拿到須要的 JVM 啓動參數(詳情請參考 SDK 接入文檔),相似於:3d
-Dproject.name=AppName -Dahas.license=<License>
其中 project.name
表明應用名(會顯示在控制檯),ahas.license
表明本身的受權 license。
注意:若應用運行在非阿里雲 ECS 環境或本地,須要在左上角切換到 公網 環境。
詳細接入步驟能夠參考 AHAS Sentinel 控制檯文檔。
接下來咱們就能夠在本地啓動應用了,啓動應用時須要加上拿到的啓動參數。若要在本地體驗集羣限流功能,須要在本機啓動多個應用實例,並額外添加 -Dcsp.sentinel.log.use.pid=true
參數(用於區分同個應用多個實例)。啓動以後,咱們就能夠在對應應用的機器列表頁面看到接入的機器了:
集羣限流中共有兩種身份:
本示例中 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 的實時信息:
接下來咱們去流控規則頁面給咱們的應用配置流控規則。先對某個資源配置普通的流控規則,單機 QPS 閾值設置爲 10:
而後分別持續請求兩臺機器對應的資源,能夠在監控頁面看到總 QPS 爲 20(每一個單機 QPS 各爲 10):
接下來咱們編輯剛纔新建的規則,開啓集羣模式,閾值模式選擇「整體閾值」,表明對該資源限制集羣內的調用總量爲 10。保存規則:
等待一段時間,咱們能夠在監控頁面看到資源的總 QPS 被限到了 10:
有關 Sentinel 集羣流控的更多特性和用法,能夠參考 Sentinel 集羣流控文檔 以及以前的集羣流控的文章。咱們同時提供了嵌入模式下應用配置集羣流控配置源的 Demo,能夠參考:sentinel-demo-cluster-embedded。
宿何,社區暱稱sczyh30,阿里巴巴高可用架構組開發工程師,目前主要負責Sentinel 開源項目的開發和社區維護。
有關 Sentinel 的更多信息:
原文連接 更多技術乾貨 請關注阿里云云棲社區微信號 :yunqiinsight