2021年1月9日 星期六

Sentinel ( SpringCloud 2.x 九)

和 Nacos 一樣,要先下載 sentinel 並啟動,以 1.8 為例

下載連結

下載 sentinel-dashboard-1.8.0.jar 之後,是個 jar 檔,用以下指令啟動:

java -jar -Dserver.port=8080 sentinel-dashboard-1.8.0.jar #-Dserver.port 預設就是8080

登入 localhost:8080,帳密預設都是 sentinel,想改可再加 -D

-Dsentinel.dashboard.auth.username=sentinel

-Dsentinel.dashboard.auth.password=123456

文檔連結


然後在瀏覽器打 localhost:port 加上帳密就可以進去了,但要先有請求,左邊才會長出來讓你設定
所以要在專案增加 maven 和設定

pom.xml
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

application.yml
server:
port: 8056
spring:
cloud:
sentinel:
transport:
port: 8719
dashboard: localhost:9090 #對應 sentinel port

寫個 controller 並請求,sentinel 的左邊就長出來了;如果没有請求,預設是懶加載,如下的圖,綠框不會出現
如果不想懶加載,可用 spring.cloud.sentinel.eager=true,這時綠框出來了,但最後是(0/1),但只有欄位名而已,如 資源名、通過 QPS…等,如下圖,所以還是要有請求才能做限流







※綠框是長出來的樣子,點擊簇鏈路會出現如上的樣子,四個按鈕對應左邊的選項,是一樣的功能


※流控規則



資源名:如 GetMapping 裡的路徑,包括「/」
針對來源:可針對微服務做限流,寫微服務名,全部都限流就寫 default
閾值類型:QPS 才有最下面的流控效果;線程數只有快速失敗
單機閾值:數字,如 QPS 又寫了2,表示一秒超過兩個請求就會限流,至於哪種限流,要看流控效果,被限流時,網頁會顯示「Blocked by Sentinel (flow limiting)」
線程數+單機閾值為 1 表示線程只有 1 個,如果線程第 1 個還沒處理完又來一個請求,就會限流,可以在方法加 sleep 來試


※關聯


※如上圖,/testRelated 如果每秒超過1個請求,那 /testSentinel 就不能訪問


※鏈路

※如上圖,/testChain1 如果呼叫資源 abcdef,那每秒超過1個請求就會限流
abcdef 是寫在註解上的,這個註解只能放在方法上,blockHandler 是失敗時呼叫的方法
@SentinelResource(value = "abcdef", blockHandler = "chainHandler")

※但使用鏈路時還得抓 maven 和設定,版本用自己下載 sentinel 的版本
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-web-servlet</artifactId>
<version>1.8.0</version>
</dependency>
https://github.com/alibaba/Sentinel/issues/1213
官網說可以用 spring.cloud.sentinel.web-context-unify=false,但我一開始試沒有用,只有用這個網址 main 方法裡的 sentinelFilterRegistration方法才可以
後來發現父 POM 的 spring-cloud-alibaba-dependencies 版本是 2.2.1.RELEASE,下載的 sentinel 是 1.7.1 的,但我用的是 1.8,我改成 2.2.2.RELEASE,會變成 1.8 版本的,這時候就好使了




※預熱


原碼找 WarmUpController,codeFactor 是寫死的3

以此例來說,官網說一開始是 6/3,每秒超過2個請求就會限流,經過5秒後,每秒超過6個請求才會限流,但我沒試出來


※排隊等待


排隊等待會用平均的速度對待每個 request
1000(毫秒數) / 單機閾值,如果寫 1 就是每秒;寫 2 就是每 500 毫秒,依此類推
此例就是平均每秒 1 個 request,超過 5 秒就放棄
單機閾值不能 > 1000


沒有留言:

張貼留言