Sentinel 分布式系統(tǒng)的流量防衛(wèi)兵
什么是服務雪崩
在微服務架構(gòu)中,根據(jù)業(yè)務來拆分成一個個的服務吱肌,服務與服務之間可以通過 HTTP/RPC
相互調(diào)用,在 Spring Cloud 中可以用 RestTemplate + LoadBalanceClient
和 Feign
來調(diào)用。為了保證其高可用,單個服務通常會集群部署萌庆。由于網(wǎng)絡原因或者自身的原因,服務并不能保證 100% 可用币旧,如果單個服務出現(xiàn)問題践险,調(diào)用這個服務就會出現(xiàn)線程阻塞,此時若有大量的請求涌入吹菱,Servlet
容器的線程資源會被消耗完畢巍虫,導致服務癱瘓。服務與服務之間的依賴性鳍刷,故障會傳播占遥,會對整個微服務系統(tǒng)造成災難性的嚴重后果,這就是服務故障的 “雪崩” 效應倾剿。為了解決這個問題筷频,業(yè)界提出了 熔斷器模型。
阿里巴巴開源了 Sentinel 組件前痘,實現(xiàn)了熔斷器模式,Spring Cloud 對這一組件進行了整合担忧。在微服務架構(gòu)中芹缔,一個請求需要調(diào)用多個服務是非常常見的
Lusifer201805292246007.png
較底層的服務如果出現(xiàn)故障,會導致連鎖故障瓶盛。當對特定的服務的調(diào)用的不可用達到一個閥值熔斷器將會被打開
Lusifer201901080205008.png
熔斷器打開后最欠,為了避免連鎖故障,通過 fallback
方法可以直接返回一個固定值惩猫。
什么是 Sentinel
隨著微服務的流行芝硬,服務和服務之間的穩(wěn)定性變得越來越重要。Sentinel 以流量為切入點轧房,從流量控制拌阴、熔斷降級、系統(tǒng)負載保護等多個維度保護服務的穩(wěn)定性奶镶。
Sentinel 的特征
- 豐富的應用場景: Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場景迟赃,例如秒殺(即突發(fā)流量控制在系統(tǒng)容量可以承受的范圍)陪拘、消息削峰填谷(對于突然到來的大量請求,您可以配置流控規(guī)則纤壁,以穩(wěn)定的速度逐步處理這些請求左刽,從而避免流量突刺造成系統(tǒng)負載過高)、集群流量控制酌媒、實時熔斷下游不可用應用等
- 完備的實時監(jiān)控: Sentinel 同時提供實時的監(jiān)控功能欠痴。您可以在控制臺中看到接入應用的單臺機器秒級數(shù)據(jù),甚至 500 臺以下規(guī)模的集群的匯總運行情況
- 廣泛的開源生態(tài): Sentinel 提供開箱即用的與其它開源框架 / 庫的整合模塊秒咨,例如與 Spring Cloud斋否、Dubbo、gRPC 的整合拭荤。您只需要引入相應的依賴并進行簡單的配置即可快速地接入 Sentinel
- 完善的 SPI 擴展點: Sentinel 提供簡單易用茵臭、完善的 SPI 擴展接口。您可以通過實現(xiàn)擴展接口來快速地定制邏輯舅世。例如定制規(guī)則管理旦委、適配動態(tài)數(shù)據(jù)源等
Sentinel 的主要特性
50505538-2c484880-0aaf-11e9-9ffc-cbaaef20be2b.png
Sentinel 的開源生態(tài)
46240214-9c72ff80-c3d6-11e8-937a-0cffa1e8dc58.png
Sentinel 的組成
- 核心庫(Java 客戶端): 不依賴任何框架 / 庫,能夠運行于所有 Java 運行時環(huán)境雏亚,同時對 Dubbo / Spring Cloud 等框架也有較好的支持
- 控制臺(Dashboard): 基于 Spring Boot 開發(fā)缨硝,打包后可以直接運行,不需要額外的 Tomcat 等應用容器