天天看點

快速體驗 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 及以上版本。

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

參數(用于區分同個應用多個執行個體)。啟動之後,我們就可以在對應應用的機器清單頁面看到接入的機器了:

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

4. 配置設定 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 叢集限流功能,隻需簡單幾步

5. 配置規則,檢視效果

接下來我們去流控規則頁面給我們的應用配置流控規則。先對某個資源配置普通的流控規則,單機 QPS 門檻值設定為 10:

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

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

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

接下來我們編輯剛才建立的規則,開啟叢集模式,門檻值模式選擇“總體門檻值”,代表對該資源限制叢集内的調用總量為 10。儲存規則:

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

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

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

有關 Sentinel 叢集流控的更多特性和用法,可以參考

Sentinel 叢集流控文檔

以及之前的叢集流控的文章。我們同時提供了嵌入模式下應用配置叢集流控配置源的 Demo,可以參考:

sentinel-demo-cluster-embedded

本文作者:

宿何,社群昵稱sczyh30,阿裡巴巴高可用架構組開發工程師,目前主要負責Sentinel 開源項目的開發和社群維護。

有關 Sentinel 的更多資訊: