曰曰碰天天碰国产 视频_日韩精品一区二区三区肥美人作爱_亚洲国产天堂久久综合_精品国产AⅤ麻豆99AV国产精品欲_男人的天堂a视频区在线观看

當前位置: 首頁 > 專題 > 正文

一文搞懂基于 Sentinel Dashboard 進行接口限流

2023-02-15 11:24:51騰訊云

Hello folks,今天我們介紹一下由 Spring Cloud Alibaba 推出的開源項目 Sentinel。Sentinel 是一款面向分布式、多語言異構(gòu)化服務(wù)架構(gòu)的流量治理組件,主要以流量為切入點,從流量控制、流量路由、熔斷降級、系統(tǒng)自適應(yīng)保護等多個維度來幫助用戶保障微服務(wù)的穩(wěn)定性。

Sentinel 的使用可以基于如下兩個部分:


(相關(guān)資料圖)

核心庫(Java 客戶端):不依賴任何框架/庫,能夠運行于 Java 8 及以上的版本的運行時環(huán)境,同時對 Dubbo / Spring Cloud 等框架也有較好的支持(見 主流框架適配)。控制臺(Dashboard):Dashboard 主要負責管理推送規(guī)則、監(jiān)控、管理機器信息等。

在進行 Sentinel 實踐之前,我們先來了解一下其所涉及的基礎(chǔ)理論知識。主要涉及基本概念、原理等。

Sentinel 基本概念

關(guān)于 Sentinel,我們先來了解以下概念:

1、資源

資源是 Sentinel 的一項關(guān)鍵因素。其可以是 Java 應(yīng)用程序中的任何內(nèi)容,例如,由應(yīng)用程序提供的服務(wù),或由應(yīng)用程序調(diào)用的其它應(yīng)用提供的服務(wù),甚至可以是一段代碼。在接下來的文檔中,我們都會用資源來描述代碼塊。

只要通過 Sentinel API 定義的代碼,就是資源,能夠被 Sentinel 保護起來。通常情況下,我們可以使用方法簽名,URL,甚至服務(wù)名稱作為資源名來標識資源。

2、規(guī)則

圍繞資源的實時狀態(tài)設(shè)定的規(guī)則,可以包括流量控制規(guī)則、熔斷降級規(guī)則以及系統(tǒng)保護規(guī)則。所有規(guī)則可以動態(tài)實時調(diào)整。

Sentinel 基本原理

在 Sentinel 體系里面,所有的資源都對應(yīng)一個資源名稱以及一個 Entry。Entry 可以通過對主流框架的適配自動創(chuàng)建,也可以通過注解的方式或調(diào)用 API 顯式創(chuàng)建;每一個 Entry 創(chuàng)建的時候,同時也會創(chuàng)建一系列功能插槽(slot chain)。這些插槽有不同的職責,例如:

1、NodeSelectorSlot 負責收集資源的路徑,并將這些資源的調(diào)用路徑,以樹狀結(jié)構(gòu)存儲起來,用于根據(jù)調(diào)用路徑來限流降級;

2、ClusterBuilderSlot 則用于存儲資源的統(tǒng)計信息以及調(diào)用者信息,例如該資源的 RT、QPS 以及 Thread Count 等等,這些信息將用作為多維度限流,降級的依據(jù);

3、StatisticSlot 則用于記錄、統(tǒng)計不同緯度的 Runtime 指標監(jiān)控信息;

4、FlowSlot 則用于根據(jù)預設(shè)的限流規(guī)則以及前面 Slot 統(tǒng)計的狀態(tài),來進行流量控制;

5、AuthoritySlot 則根據(jù)配置的黑白名單和調(diào)用來源信息,來做黑白名單控制;

6、DegradeSlot 則通過統(tǒng)計信息以及預設(shè)的規(guī)則,來做熔斷降級;

7、SystemSlot 則通過系統(tǒng)的狀態(tài),例如 Load 等,來控制總的入口流量。

Sentinel 總體框架如下所示:

基于上述系統(tǒng)框架所示,Sentinel 的主要工作機制可以概括如下:

1、對主流框架提供適配或者顯示的 API,來定義需要保護的資源,并提供設(shè)施對資源進行實時統(tǒng)計和調(diào)用鏈路分析。

2、根據(jù)預設(shè)的規(guī)則,結(jié)合對資源的實時統(tǒng)計信息,對流量進行控制。同時,Sentinel 提供開放的接口,方便您定義及改變規(guī)則。

3、Sentinel 提供實時的監(jiān)控系統(tǒng),方便快速了解目前系統(tǒng)的狀態(tài)。

介紹完 Sentinel 相關(guān)的理論知識后,接下來,我們進入本文的主題。

Sentinel-Dashboard 安裝

在 https://github.com/alibaba/Sentinel/releases 頁面下載最新的版本包,然后通過命令行啟動,具體如下所示:

[leonli@Leon usr ] % nohup java -jar sentinel-dashboard-1.8.6.jar > sentinel.log &[1] 2096

此時,瀏覽器中輸入:http://localhost:8080/#/login ,頁面顯示如下:

默認情況下,sentinel-dashboard 以 8080 端口啟動運行,當然可以進行配置其他端口。此處的登陸憑證信息,我們可以在 sentinel-dashboard 包中的配置文件中獲取到。

此時,我們輸入賬戶密碼(sentinel/sentinel)登錄后,可以看到如下頁面:

編寫 DemoApplication 程序

1、POM.XML 文件配置

在 Spring Cloud 應(yīng)用的 pom.xml 中引入Spring Cloud Alibaba 的 Sentinel 模塊,具體如下所示:

    4.0.0    com.didispace    alibaba-sentinel-rate-limiting    0.0.1-SNAPSHOT    jar            org.springframework.boot        spring-boot-starter-parent        2.0.5.RELEASE                         UTF-8        UTF-8        1.8                            org.springframework.boot            spring-boot-starter-web                            org.springframework.cloud            spring-cloud-starter-alibaba-sentinel                            org.projectlombok            lombok            1.18.2            true                            org.springframework.boot            spring-boot-starter-test            test                                                    org.springframework.cloud                spring-cloud-dependencies                Finchley.SR1                pom                import                                        org.springframework.cloud                spring-cloud-alibaba-dependencies                0.2.2.RELEASE                pom                import                                                                org.springframework.boot                spring-boot-maven-plugin                        

2、Resource 定義

在 Spring Cloud 應(yīng)用中通過 spring.cloud.sentinel.transport.dashboard 參數(shù)配置 sentinel dashboard 的訪問地址。通常在 application.properties 或 yml 文件中定義,具體如下所示:

spring.application.name=alibaba-sentinel-rate-limitingserver.port=8001# sentinel dashboardspring.cloud.sentinel.transport.dashboard=localhost:8080

3、編寫 Demo 代碼

創(chuàng)建應(yīng)用主類,并提供一個 Rest 接口,具體如下所示:

package com.leon.alibaba.sentinel;import lombok.extern.slf4j.Slf4j;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;@SpringBootApplicationpublic class DemoApplication {    public static void main(String[] args) {        SpringApplication.run(DemoApplication.class, args);    }    @Slf4j    @RestController    static class DemoController {        @GetMapping("/devops")        public String devops() {            return "Starting DemoApplication on leon.com.cn";        }    }}

完成后,啟動程序,如下所示:

此時,通過后臺進行 Curl 命令操作,有結(jié)果返回。具體如下所示:

[leonli@Leon usr ] % curl -i http://localhost:8001/devops/HTTP/1.1 200 Content-Type: text/plain;charset=UTF-8Content-Length: 39Date: Wed, 16 Nov 2022 14:40:16 GMTStarting DemoApplication on leon.com.cn  

再次進入 Sentinel-Dashboard 頁面,可以看到如下:

Sentinel 限流實踐

接下來,點擊左側(cè)的“簇點鏈路”菜單欄目,基于所調(diào)用的 /devops 接口進行“流控”操作,以配置自定義的限流規(guī)則,具體如下所示:

點擊“流控”操作后,彈出新增流控規(guī)則窗口,如下:

點擊“新增”按鈕后,進入流控規(guī)則頁面,這里我們基于 QPS 指標,每秒最多允許“ 5 個請求進入”此限流規(guī)則進行策略定義。所設(shè)置的限流規(guī)則將會顯示在列表中,此列表顯示所有規(guī)則,并可以對其進行更新操作。

接下來,我們來驗證一下這個限流規(guī)則,我們可以嘗試一下借用 Curl 命令行快速的調(diào)用此接口,以確認其是否會觸發(fā)限流控制,具體如下所示:

[leonli@Leon ~ ] % curl http://192.168.0.102:8001/devopsStarting DemoApplication on leon.com.cn  [leonli@Leon ~ ] % curl http://192.168.0.102:8001/devopsStarting DemoApplication on leon.com.cn [leonli@Leon ~ ] % curl http://192.168.0.102:8001/devopsStarting DemoApplication on leon.com.cn                                                                                                                                  [leonli@Leon ~ ] % curl http://192.168.0.102:8001/devopsStarting DemoApplication on leon.com.cn                                                                                                                                   [leonli@Leon ~ ] % curl http://192.168.0.102:8001/devopsBlocked by Sentinel (flow limiting) 

基于上述的測試結(jié)果:我們發(fā)現(xiàn),快速的進行五次 “/deveops” 調(diào)用接口之后,第六次調(diào)用時被 Sentinel 阻塞了,即進行流量管控。

如上為 Sentinel 及 Dashboard 的 限流實踐解析,希望對大家有用。關(guān)于 Sentinel更多需要了解的信息,歡迎大家交流、關(guān)注!

Adiós !

- EOF -

關(guān)鍵詞: Spring Cloud Spring Java