官網(wǎng)地址
https://sentinelguard.io/
介紹
隨著微服務(wù)的流行,服務(wù)和服務(wù)之間的穩(wěn)定性變得越來越重要。Sentinel 是面向分布式、多語言異構(gòu)化服務(wù)架構(gòu)的流量治理組件,主要以流量為切入點(diǎn),從流量路由、流量控制、流量整形、熔斷降級(jí)、系統(tǒng)自適應(yīng)過載保護(hù)、熱點(diǎn)流量防護(hù)等多個(gè)維度來幫助開發(fā)者保障微服務(wù)的穩(wěn)定性。
作用
分布式流量路由、流量控制、流量整形、熔斷降級(jí)、系統(tǒng)自適應(yīng)過載保護(hù)、熱點(diǎn)流量防護(hù)等多個(gè)維度來幫助開發(fā)者保障微服務(wù)的穩(wěn)定性
功能整合
sentinel控制臺(tái)—流控規(guī)則和監(jiān)控控制臺(tái)
sentinel服務(wù)端啟動(dòng)模式:純springboot/整合springcloudalibaba
開源框架適配:
? 云原生微服務(wù)體系
Spring Boot/Spring Cloud
Quarkus
? Web 適配
Web Servlet
Spring Web
Spring WebFlux
JAX-RS (Java EE)
? RPC 適配
Apache Dubbo
gRPC
Feign
SOFARPC
? HTTP client 適配
Apache HttpClient
OkHttp
? Reactive 適配
Reactor
? API Gateway 適配
Spring Cloud Gateway
Netflix Zuul 1.x
Netflix Zuul 2.x
? Apache RocketMQ
Sentinel 的歷史
? 2012 年,Sentinel 誕生,主要功能為入口流量控制。
? 2013-2017 年,Sentinel 在阿里巴巴集團(tuán)內(nèi)部迅速發(fā)展,成為基礎(chǔ)技術(shù)模塊,覆蓋了所有的核心場(chǎng)景。Sentinel 也因此積累了大量的流量歸整場(chǎng)景以及生產(chǎn)實(shí)踐。
? 2018 年,Sentinel 開源,并持續(xù)演進(jìn)。
? 2019 年,Sentinel 朝著多語言擴(kuò)展的方向不斷探索,推出C++ 原生版本,同時(shí)針對(duì) Service Mesh 場(chǎng)景也推出了Envoy 集群流量控制支持,以解決 Service Mesh 架構(gòu)下多語言限流的問題。
? 2020 年,推出Sentinel Go 版本,繼續(xù)朝著云原生方向演進(jìn)。
? 2021 年,Sentinel 正在朝著 2.0 云原生高可用決策中心組件進(jìn)行演進(jìn);同時(shí)推出了Sentinel Rust 原生版本。同時(shí)我們也在 Rust 社區(qū)進(jìn)行了 Envoy WASM extension 及 eBPF extension 等場(chǎng)景探索。
? 2022 年,Sentinel 品牌升級(jí)為流量治理,領(lǐng)域涵蓋流量路由/調(diào)度、流量染色、流控降級(jí)、過載保護(hù)/實(shí)例摘除等;同時(shí)社區(qū)將流量治理相關(guān)標(biāo)準(zhǔn)抽出到OpenSergo 標(biāo)準(zhǔn)中,Sentinel 作為流量治理標(biāo)準(zhǔn)實(shí)現(xiàn)。
Sentinel 基本概念
資源
資源是 Sentinel 的關(guān)鍵概念。它可以是 Java 應(yīng)用程序中的任何內(nèi)容,例如,由應(yīng)用程序提供的服務(wù),或由應(yīng)用程序調(diào)用的其它應(yīng)用提供的服務(wù),甚至可以是一段代碼。在接下來的文檔中,我們都會(huì)用資源來描述代碼塊。
只要通過 Sentinel API 定義的代碼,就是資源,能夠被 Sentinel 保護(hù)起來。大部分情況下,可以使用方法簽名,URL,甚至服務(wù)名稱作為資源名來標(biāo)示資源。
規(guī)則
圍繞資源的實(shí)時(shí)狀態(tài)設(shè)定的規(guī)則,可以包括流量控制規(guī)則、熔斷降級(jí)規(guī)則以及系統(tǒng)保護(hù)規(guī)則。所有規(guī)則可以動(dòng)態(tài)實(shí)時(shí)調(diào)整。
Sentinel 功能和設(shè)計(jì)理念
流量控制
流量控制在網(wǎng)絡(luò)傳輸中是一個(gè)常用的概念,它用于調(diào)整網(wǎng)絡(luò)包的發(fā)送數(shù)據(jù)。然而,從系統(tǒng)穩(wěn)定性角度考慮,在處理請(qǐng)求的速度上,也有非常多的講究。任意時(shí)間到來的請(qǐng)求往往是隨機(jī)不可控的,而系統(tǒng)的處理能力是有限的。我們需要根據(jù)系統(tǒng)的處理能力對(duì)流量進(jìn)行控制。Sentinel 作為一個(gè)調(diào)配器,可以根據(jù)需要把隨機(jī)的請(qǐng)求調(diào)整成合適的形狀,如下圖所示:
流量控制有以下幾個(gè)角度:
? 資源的調(diào)用關(guān)系,例如資源的調(diào)用鏈路,資源和資源之間的關(guān)系;
? 運(yùn)行指標(biāo),例如 QPS、線程池、系統(tǒng)負(fù)載等;
? 控制的效果,例如直接限流、冷啟動(dòng)、排隊(duì)等。
Sentinel 的設(shè)計(jì)理念是讓您自由選擇控制的角度,并進(jìn)行靈活組合,從而達(dá)到想要的效果。
熔斷降級(jí)
什么是熔斷降級(jí)
除了流量控制以外,降低調(diào)用鏈路中的不穩(wěn)定資源也是 Sentinel 的使命之一。由于調(diào)用關(guān)系的復(fù)雜性,如果調(diào)用鏈路中的某個(gè)資源出現(xiàn)了不穩(wěn)定,最終會(huì)導(dǎo)致請(qǐng)求發(fā)生堆積。這個(gè)問題和Hystrix里面描述的問題是一樣的。
Sentinel 和 Hystrix 的原則是一致的: 當(dāng)調(diào)用鏈路中某個(gè)資源出現(xiàn)不穩(wěn)定,例如,表現(xiàn)為 timeout,異常比例升高的時(shí)候,則對(duì)這個(gè)資源的調(diào)用進(jìn)行限制,并讓請(qǐng)求快速失敗,避免影響到其它的資源,最終產(chǎn)生雪崩的效果。
熔斷降級(jí)設(shè)計(jì)理念
在限制的手段上,Sentinel 和 Hystrix 采取了完全不一樣的方法。
Hystrix 通過線程池的方式,來對(duì)依賴(在我們的概念中對(duì)應(yīng)資源)進(jìn)行了隔離。這樣做的好處是資源和資源之間做到了最徹底的隔離。缺點(diǎn)是除了增加了線程切換的成本,還需要預(yù)先給各個(gè)資源做線程池大小的分配。
Sentinel 對(duì)這個(gè)問題采取了兩種手段:
? 通過并發(fā)線程數(shù)進(jìn)行限制
和資源池隔離的方法不同,Sentinel 通過限制資源并發(fā)線程的數(shù)量,來減少不穩(wěn)定資源對(duì)其它資源的影響。這樣不但沒有線程切換的損耗,也不需要您預(yù)先分配線程池的大小。當(dāng)某個(gè)資源出現(xiàn)不穩(wěn)定的情況下,例如響應(yīng)時(shí)間變長(zhǎng),對(duì)資源的直接影響就是會(huì)造成線程數(shù)的逐步堆積。當(dāng)線程數(shù)在特定資源上堆積到一定的數(shù)量之后,對(duì)該資源的新請(qǐng)求就會(huì)被拒絕。堆積的線程完成任務(wù)后才開始繼續(xù)接收請(qǐng)求。
? 通過響應(yīng)時(shí)間對(duì)資源進(jìn)行降級(jí)
除了對(duì)并發(fā)線程數(shù)進(jìn)行控制以外,Sentinel 還可以通過響應(yīng)時(shí)間來快速降級(jí)不穩(wěn)定的資源。當(dāng)依賴的資源出現(xiàn)響應(yīng)時(shí)間過長(zhǎng)后,所有對(duì)該資源的訪問都會(huì)被直接拒絕,直到過了指定的時(shí)間窗口之后才重新恢復(fù)。
系統(tǒng)負(fù)載保護(hù)
Sentinel 同時(shí)提供系統(tǒng)維度的自適應(yīng)保護(hù)能力。防止雪崩,是系統(tǒng)防護(hù)中重要的一環(huán)。當(dāng)系統(tǒng)負(fù)載較高的時(shí)候,如果還持續(xù)讓請(qǐng)求進(jìn)入,可能會(huì)導(dǎo)致系統(tǒng)崩潰,無法響應(yīng)。在集群環(huán)境下,網(wǎng)絡(luò)負(fù)載均衡會(huì)把本應(yīng)這臺(tái)機(jī)器承載的流量轉(zhuǎn)發(fā)到其它的機(jī)器上去。如果這個(gè)時(shí)候其它的機(jī)器也處在一個(gè)邊緣狀態(tài)的時(shí)候,這個(gè)增加的流量就會(huì)導(dǎo)致這臺(tái)機(jī)器也崩潰,最后導(dǎo)致整個(gè)集群不可用。
針對(duì)這個(gè)情況,Sentinel 提供了對(duì)應(yīng)的保護(hù)機(jī)制,讓系統(tǒng)的入口流量和系統(tǒng)的負(fù)載達(dá)到一個(gè)平衡,保證系統(tǒng)在能力范圍之內(nèi)處理最多的請(qǐng)求。
Sentinel 是如何工作的
Sentinel 的主要工作機(jī)制如下:
? 對(duì)主流框架提供適配或者顯示的 API,來定義需要保護(hù)的資源,并提供設(shè)施對(duì)資源進(jìn)行實(shí)時(shí)統(tǒng)計(jì)和調(diào)用鏈路分析。
? 根據(jù)預(yù)設(shè)的規(guī)則,結(jié)合對(duì)資源的實(shí)時(shí)統(tǒng)計(jì)信息,對(duì)流量進(jìn)行控制。同時(shí),Sentinel 提供開放的接口,方便您定義及改變規(guī)則。
? Sentinel 提供實(shí)時(shí)的監(jiān)控系統(tǒng),方便您快速了解目前系統(tǒng)的狀態(tài)。
流控降級(jí)與容錯(cuò)標(biāo)準(zhǔn)
Sentinel 社區(qū)正在將流量治理相關(guān)標(biāo)準(zhǔn)抽出到OpenSergo spec中,Sentinel 作為流量治理標(biāo)準(zhǔn)實(shí)現(xiàn)。有關(guān) Sentinel 流控降級(jí)與容錯(cuò) spec 的最新進(jìn)展,請(qǐng)參考o(jì)pensergo-specification,也歡迎社區(qū)一起來完善標(biāo)準(zhǔn)與實(shí)現(xiàn)。文章來源:http://www.zghlxwxcb.cn/news/detail-576824.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-576824.html
更多配置和規(guī)則見官網(wǎng)
到了這里,關(guān)于sentinel介紹-分布式微服務(wù)流量控制的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!