Sentinel


Sentinel

一、sentinel背景概述

Sentinel是阿里開源的熔斷斷流框架

1、傳統的微服務架構

服務架構的好處:所有服務都在一個架構里面,部署起來比較方便。

弊端:流量較大時需要擴容,擴容多台機器掛在nginx上,需要部署多台容器並維護他們之間的映射關系。

2、微服務架構

雙十一,訂單服務需要擴展,就擴展訂單服務,隨着雲原生和docker的出現,根據流量對服務進行彈性的伸縮,比如你的服務伸縮后告訴注冊中心少了一台服務或者多了一台服務,注冊中心和網關有一個通信,這樣對服務就能動態的添加和移除。

弊端就是:現在服務多了,拆在不同的容器,跨容器之間的調用存在事務的問題或者其它問題,服務間的調用失敗如何處理。

3、springCloud組件

4、雪崩效應常見的場景

1)硬件故障

如服務器宕機、機房斷電、光纖被挖等

2)流量激增

如異常流量,重試加大流量等

3)緩存穿透

一般發生在應用重啟和緩存失效時,以及短時間內大量緩存失效時。大量的緩存不命中,使請求直擊后端服務,造成服務超負荷運行,引起服務不可用。

4)程序bug

如程序邏輯導致內存泄漏,JVM長時間fullGC等。

5)同步等待

服務間采用的同步調用,同步等待造成的資源耗盡。

5、雪崩場景應對策略

1)硬件故障

多機房容災、異步多活等

2)流量激增

服務自動擴充、流量控制(限流、關閉重試等)等

3)緩存穿透

緩存預加載,緩存異步加載等。

4)程序bug

修改bug及時釋放資源。

5)同步等待

資源隔離、MQ解耦、不可用服務調用快速失敗等。資源隔離是指不同服務之間的調用采用不同的線程池;不可用服務快速失敗一般采用熔斷器模式結合超時機制實現。

二、斷流器框架sentine

1、斷流器框架對比

 

2、Sentinel是什么

分布式系統的防衛兵。面對分布式服務架構的流量控制組件,他主要從限流、熔斷降級、系統的負載保護、熱點防護等多維度幫助我們保證系統的穩定性。

一般用在雙一大促或者秒殺場景。

提供了一些實時監控和規則配置都可以在控制台里面去做。

springClouddubbogRPCserviceMesh都有很高的擴展點。通過spi擴展接口,定義自己的業務邏輯。

Sentinel主要分兩部分,一部分是核心庫,核心庫不依賴任何框架;

另一部分是控制台,jar包下載下來直接運行。

所有的規則可以通過sentinel控制台設定。設計理念,自由的選擇控制的角度。

3、Sentinel入門

流量控制

1)主程序

2)初始化流控規則

3)查看輸出

~/logs/csp/${appName}-metrics.log.xxx 里看到下面的輸出

4、流量控制

Hytix是通過線程池隔離的方式對資源進行隔離,好處:資源和資源之間最徹底的隔離。確定是:增加了線程切換成本。需要對每個資源做線程池大小的配置,不然會導致Hytix里面的線程池數量特別多。

Sentinel實現有兩種手段,一種是並發線程數進行限制,限制資源並發的數量,減少不穩定資源對資源的影響,這樣既沒有線程切換的資源損耗,也不需要配置線程池的大小。直接影響就是造成線程數的堆積,當堆積到一定程度就會拋出blockexception的異常;另外一種就是通過響應時間快速降級。還提供了自我保護功能,當系統負載較高時,如果還讓請求持續的進入需要限流控制。

5、Sentinel工作流程

Sentinel插槽,創建entry時同時創建插槽。

6、NodeSelectorSlot

負責收集資源的路徑,把調用路徑以樹狀結構存儲起來,用於根據調用路徑進行限流的降級。

不同的服務可以有不同的入口:

 

可以通過命令查詢樹狀結構

Curl http://localhost:8719/tree?type=root

7ClusterBuilderSlot

存儲資源的統計信息以及調用者的信息,作為多維度限流降級的依據。

 

 

8statisticSlot

核心功能插槽之一,記錄和統計不同維度runtime的字表。監控指標信息,統計實時調用數據。有一些標注,clusternode的實時統計,originnode不同調用者的統計信息,defaultNode根據上下文區分的資源idruntime的統計。

底層采用滑動窗口數據結構leapArray來統計實時的秒級指標數據。

 

根據這些請求達到多少的QPS,根據這些統計做一些限流策略。

9flowSlot

主要時是做流量控制,根據預設的資源去統計信息,按着固定的次序依次生效。

10degradeSlot

熔斷降級,主要是根據上面的統計信息做一個熔斷降級。根據資源的平均響應時間、異常比來決定是否被熔斷。

11systemSlot

對入口資源進行一個動態的配比,它的原理是讓入口流量和當前系統預計的流量達到一個平衡。只對入口流量起作用。

 

12、流量控制

監控資源的QPS、並發線程數等指標,當達到指定的閾值對流量進行控制,保障應用的穩定性。根據預設的規則以及ClusterBuilderSlotstatisticSlot統計出來的實時信息,進行流量的控制。

限流的最直接表象就是在執行時,拋出一個flowException,而flowExceptionblockException的子類。

resource:資源名,即限流規則的作用對象。

count:限流閾值

grade:限流閾值類型(QPS和並發線程數)

limitAPP:流控針對的調用來源,若為default則不區分調用來源。

strategy:調用關系限流策略。

controlBehavior:流量控制效果(直接拒絕、warm up、勻速排隊)

13、並發線程數的demo

用於保護業務線程池不被慢調用耗盡,當一個資源調用比較慢,耗時比較長,導致系統不穩定、吞吐量下降。導致線程數的占用,極端情況下導致容器的線程池被耗盡。

14、warm up

預熱冷啟動,系統長時間處於低水位的狀態,突如其來的流量會把系統拉入高水位,有可能使系統垮掉。這樣就使用冷啟動的方式,讓它在一定時間內讓流量緩慢增加,給冷系統一個預熱的時間,避免系統被壓垮。

15、集群的流控

ClusterFlowConfig

集群配置。可以運行jar包或者依賴到應用里面。

16、熔斷降級

不同服務之間的調用,組成復雜的調用鏈路。如何保證它的穩定性。Sentinel提供了一些熔斷策略。

三、sentine實戰

1、配置文件pom.xml

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

</dependency>

2、注解

3、配置vm鏡像

4、啟動成功后,多訪問幾次接口,在sentinel控制台

https://sentinelguard.io/zh-cn/

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM