限流 -- Sentinel 搭建及入門學習

簡介

官方介紹,隨着微服務的流行,服務和服務之間的穩定性變得越來越重要。Sentinel 是面向分佈式服務架構的輕量級流量控制框架,主要以流量爲切入點,從流量控制、熔斷降級、系統負載保護等多個維度來幫助您保護服務的穩定性。

流量控制

流量控制在網絡傳輸中是一個常用的概念,它用於調整網絡包的發送數據。然而,從系統穩定性角度考慮,在處理請求的速度上,也有非常多的講究。任意時間到來的請求往往是隨機不可控的,而系統的處理能力是有限的。我們需要根據系統的處理能力對流量進行控制。Sentinel 作爲一個調配器,可以根據需要把隨機的請求調整成合適的形狀,如下圖所示:

在這裏插入圖片描述

流量控制設計理念
流量控制有以下幾個角度:

  • 資源的調用關係,例如資源的調用鏈路,資源和資源之間的關係;
  • 運行指標,例如 QPS、線程池、系統負載等;
  • 控制的效果,例如直接限流、冷啓動、排隊等。

Sentinel 的設計理念是讓您自由選擇控制的角度,並進行靈活組合,從而達到想要的效果。

熔斷降級

什麼是熔斷降級
除了流量控制以外,降低調用鏈路中的不穩定資源也是 Sentinel 的使命之一。由於調用關係的複雜性,如果調用鏈路中的某個資源出現了不穩定,最終會導致請求發生堆積。這個問題和 Hystrix 裏面描述的問題是一樣的。

Sentinel 和 Hystrix 的原則是一致的: 當調用鏈路中某個資源出現不穩定,例如,表現爲 timeout,異常比例升高的時候,則對這個資源的調用進行限制,並讓請求快速失敗,避免影響到其它的資源,最終產生雪崩的效果。

熔斷降級設計理念
在限制的手段上,Sentinel 和 Hystrix 採取了完全不一樣的方法。

Hystrix 通過線程池的方式,來對依賴(在我們的概念中對應資源)進行了隔離。這樣做的好處是資源和資源之間做到了最徹底的隔離。缺點是除了增加了線程切換的成本,還需要預先給各個資源做線程池大小的分配。

Sentinel 對這個問題採取了兩種手段:

通過併發線程數進行限制

  • 和資源池隔離的方法不同,Sentinel 通過限制資源併發線程的數量,來減少不穩定資源對其它資源的影響。這樣不但沒有線程切換的損耗,也不需要您預先分配線程池的大小。當某個資源出現不穩定的情況下,例如響應時間變長,對資源的直接影響就是會造成線程數的逐步堆積。當線程數在特定資源上堆積到一定的數量之後,對該資源的新請求就會被拒絕。堆積的線程完成任務後纔開始繼續接收請求。

通過響應時間對資源進行降級

  • 除了對併發線程數進行控制以外,Sentinel 還可以通過響應時間來快速降級不穩定的資源。當依賴的資源出現響應時間過長後,所有對該資源的訪問都會被直接拒絕,直到過了指定的時間窗口之後才重新恢復。

系統負載保護

Sentinel 同時對系統的維度提供保護。防止雪崩,是系統防護中重要的一環。當系統負載較高的時候,如果還持續讓請求進入,可能會導致系統崩潰,無法響應。在集羣環境下,網絡負載均衡會把本應這臺機器承載的流量轉發到其它的機器上去。如果這個時候其它的機器也處在一個邊緣狀態的時候,這個增加的流量就會導致這臺機器也崩潰,最後導致整個集羣不可用。

針對這個情況,Sentinel 提供了對應的保護機制,讓系統的入口流量和系統的負載達到一個平衡,保證系統在能力範圍之內處理最多的請求。

服務安裝

1、Github 地址 :https://github.com/alibaba/Sentinel
2、代碼工程結構:
在這裏插入圖片描述
3、運行 DashBoard 代碼
(1)JVM 參數:

-Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard

(2)運行 DashboardApplication

@SpringBootApplication
public class DashboardApplication {

    public static void main(String[] args) {
        triggerSentinelInit();
        SpringApplication.run(DashboardApplication.class, args);
    }

    private static void triggerSentinelInit() {
        new Thread(() -> InitExecutor.doInit()).start();
    }
}

這樣服務端就可以提供服務 登錄用戶名密碼 :sentinel/sentinel(配置文件中可以配置)

在這裏插入圖片描述
初次登錄:

在這裏插入圖片描述

客戶端

官方提供了示例工程:https://github.com/alibaba/Sentinel/tree/master/sentinel-demo

客戶端配置服務地址:

-Dcsp.sentinel.dashboard.server=localhost:8080

執行客戶端服務並進行服務調用可以在 DashBoard 頁面中對接口的一些監控信息
在這裏插入圖片描述
在監控頁面中可以進行各種限流規則配置及一些監控信息查看。

文章:
https://baijiahao.baidu.com/s?id=1616564615336634972&wfr=spider&for=pc

https://www.jianshu.com/p/0e218ef7f505

https://www.jianshu.com/p/609961eb6a6e

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