阿里巴巴sentinel限流
sentinel是什么
- 隨著微服務(wù)的流行,服務(wù)和服務(wù)之間的穩(wěn)定性變得越來(lái)越重要,sentinel以流量為切入點(diǎn),從流量控制、熔斷降級(jí)、系統(tǒng)負(fù)載保護(hù)等多個(gè)維度保護(hù)服務(wù)的穩(wěn)定性
sentinel具有以下特性:
1.豐富的應(yīng)用場(chǎng)景:Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場(chǎng)景,例如秒殺(即突發(fā)流量控制在系統(tǒng)容量可以承受的范圍)、消息削峰填谷、集群流量控制、實(shí)時(shí)熔斷下游不可用應(yīng)用等
2.完備的實(shí)時(shí)監(jiān)控:sentinel同時(shí)提供實(shí)時(shí)的監(jiān)控功能,可以在控制臺(tái)中看到單臺(tái)機(jī)器秒級(jí)數(shù)據(jù),甚至500臺(tái)以下規(guī)模的集群的匯總運(yùn)行情況
3.廣泛的開(kāi)源生態(tài):Sentinel 提供開(kāi)箱即用的與其它開(kāi)源框架/庫(kù)的整合模塊,例如與 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相應(yīng)的依賴(lài)并進(jìn)行簡(jiǎn)單的配置即可快速地接入 Sentinel
4.完善的 SPI 擴(kuò)展點(diǎn):Sentinel 提供簡(jiǎn)單易用、完善的 SPI 擴(kuò)展接口。您可以通過(guò)實(shí)現(xiàn)擴(kuò)展接口來(lái)快速地定制邏輯。例如定制規(guī)則管理、適配動(dòng)態(tài)數(shù)據(jù)源等
?
sentinel分為兩個(gè)部分:
- 核心庫(kù)(java客戶(hù)端):不依賴(lài)任何框架,能夠運(yùn)行于所有java運(yùn)行時(shí)環(huán)境,同時(shí)對(duì)dubbo、springCloud等框架也有較好的支持
- 控制臺(tái)(Dashboard):基于 Spring Boot 開(kāi)發(fā),打包后可以直接運(yùn)行,不需要額外的 Tomcat 等應(yīng)用容器
熔斷降級(jí)
- 由于調(diào)用關(guān)系的復(fù)雜性,如果調(diào)用鏈路中的某個(gè)資源出現(xiàn)了不穩(wěn)定,最終會(huì)導(dǎo)致請(qǐng)求發(fā)生堆積
- 當(dāng)調(diào)用鏈路中某個(gè)資源出現(xiàn)不穩(wěn)定,例如,表現(xiàn)為 timeout,異常比例升高的時(shí)候,則對(duì)這個(gè)資源的調(diào)用進(jìn)行限制,并讓請(qǐng)求快速失敗,避免影響到其它的資源,最終產(chǎn)生雪崩的效果
- 通過(guò)并發(fā)線(xiàn)程數(shù)進(jìn)行限制
Sentinel 通過(guò)限制資源并發(fā)線(xiàn)程的數(shù)量,來(lái)減少不穩(wěn)定資源對(duì)其它資源的影響,當(dāng)某個(gè)資源出現(xiàn)不穩(wěn)定的情況下,例如響應(yīng)時(shí)間變長(zhǎng),對(duì)資源的直接影響就是會(huì)造成線(xiàn)程數(shù)的逐步堆積。當(dāng)線(xiàn)程數(shù)在特定資源上堆積到一定的數(shù)量之后,對(duì)該資源的新請(qǐng)求就會(huì)被拒絕。堆積的線(xiàn)程完成任務(wù)后才開(kāi)始繼續(xù)接收請(qǐng)求
- 通過(guò)響應(yīng)時(shí)間對(duì)資源進(jìn)行降級(jí)?
Sentinel 還可以通過(guò)響應(yīng)時(shí)間來(lái)快速降級(jí)不穩(wěn)定的資源。當(dāng)依賴(lài)的資源出現(xiàn)響應(yīng)時(shí)間過(guò)長(zhǎng)后,所有對(duì)該資源的訪(fǎng)問(wèn)都會(huì)被直接拒絕,直到過(guò)了指定的時(shí)間窗口之后才重新恢復(fù)
流量控制-QPS 或并發(fā)線(xiàn)程數(shù)
- 其原理是監(jiān)控應(yīng)用流量的 QPS 或并發(fā)線(xiàn)程數(shù)等指標(biāo),當(dāng)達(dá)到指定的閾值時(shí)對(duì)流量進(jìn)行控制,以避免被瞬時(shí)的流量高峰沖垮,從而保障應(yīng)用的高可用性
防止雪崩,是系統(tǒng)防護(hù)中重要的一環(huán)。當(dāng)系統(tǒng)負(fù)載較高的時(shí)候,如果還持續(xù)讓請(qǐng)求進(jìn)入,可能會(huì)導(dǎo)致系統(tǒng)崩潰,無(wú)法響應(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)求
- 一條限流規(guī)則主要由下面幾個(gè)因素組成,我們可以組合這些元素來(lái)實(shí)現(xiàn)不同的限流效果
resource:資源名,即限流規(guī)則的作用對(duì)象
count: 限流閾值
grade: 限流閾值類(lèi)型(QPS 或并發(fā)線(xiàn)程數(shù)),流量控制主要有兩種統(tǒng)計(jì)類(lèi)型,一種是統(tǒng)計(jì)并發(fā)線(xiàn)程數(shù),另外一種則是統(tǒng)計(jì) QPS
limitApp: 流控針對(duì)的調(diào)用來(lái)源,若為 default 則不區(qū)分調(diào)用來(lái)源
strategy: 調(diào)用關(guān)系限流策略
controlBehavior: 流量控制效果(直接拒絕、Warm Up、勻速排隊(duì)),注意:若使用除了直接拒絕之外的流量控制效果,則調(diào)用關(guān)系限流策略(strategy)會(huì)被忽略
- 并發(fā)線(xiàn)程控制
并發(fā)數(shù)控制用于保護(hù)業(yè)務(wù)線(xiàn)程池不被慢調(diào)用耗盡。例如,當(dāng)應(yīng)用所依賴(lài)的下游應(yīng)用由于某種原因?qū)е路?wù)不穩(wěn)定、響應(yīng)延遲增加,對(duì)于調(diào)用者來(lái)說(shuō),意味著吞吐量下降和更多的線(xiàn)程數(shù)占用,極端情況下甚至導(dǎo)致線(xiàn)程池耗盡。為應(yīng)對(duì)太多線(xiàn)程占用的情況,業(yè)內(nèi)有使用隔離的方案,比如通過(guò)不同業(yè)務(wù)邏輯使用不同線(xiàn)程池來(lái)隔離業(yè)務(wù)自身之間的資源爭(zhēng)搶(線(xiàn)程池隔離)。這種隔離方案雖然隔離性比較好,但是代價(jià)就是線(xiàn)程數(shù)目太多,線(xiàn)程上下文切換的 overhead 比較大,特別是對(duì)低延時(shí)的調(diào)用有比較大的影響。Sentinel 并發(fā)控制不負(fù)責(zé)創(chuàng)建和管理線(xiàn)程池,而是簡(jiǎn)單統(tǒng)計(jì)當(dāng)前請(qǐng)求上下文的線(xiàn)程數(shù)目(正在執(zhí)行的調(diào)用數(shù)目),如果超出閾值,新的請(qǐng)求會(huì)被立即拒絕,效果類(lèi)似于信號(hào)量隔離
- QPS流量限制
當(dāng) QPS 超過(guò)某個(gè)閾值的時(shí)候,則采取措施進(jìn)行流量控制。流量控制的效果包括以下幾種:直接拒絕、Warm Up、勻速排隊(duì)。對(duì)應(yīng) FlowRule 中的 controlBehavior 字段
直接拒絕:默認(rèn)的流量控制方式,當(dāng)QPS超過(guò)任意規(guī)則的閾值后,新的請(qǐng)求就會(huì)被立即拒絕,拒絕方式為拋出FlowException
Warm up:當(dāng)流量突然增大的時(shí)候,我們常常會(huì)希望系統(tǒng)從空閑狀態(tài)到繁忙狀態(tài)的切換的時(shí)間長(zhǎng)一些。即如果系統(tǒng)在此之前長(zhǎng)期處于空閑的狀態(tài),我們希望處理請(qǐng)求的數(shù)量是緩步的增多,經(jīng)過(guò)預(yù)期的時(shí)間以后,到達(dá)系統(tǒng)處理請(qǐng)求個(gè)數(shù)的最大值。Warm Up(冷啟動(dòng),預(yù)熱)模式就是為了實(shí)現(xiàn)這個(gè)目的的
勻速排隊(duì):嚴(yán)格控制請(qǐng)求通過(guò)的間隔時(shí)間,也即是讓請(qǐng)求以均勻的速度通過(guò),對(duì)應(yīng)的是漏桶算法,這種方式主要用于處理間隔性突發(fā)的流量,例如消息隊(duì)列。想象一下這樣的場(chǎng)景,在某一秒有大量的請(qǐng)求到來(lái),而接下來(lái)的幾秒則處于空閑狀態(tài),我們希望系統(tǒng)能夠在接下來(lái)的空閑期間逐漸處理這些請(qǐng)求,而不是在第一秒直接拒絕多余的請(qǐng)求
流量控制-基于調(diào)用關(guān)系的流量控制
流控規(guī)則中的 limitApp 字段用于根據(jù)調(diào)用來(lái)源進(jìn)行流量控制。該字段的值有以下三種選項(xiàng),分別對(duì)應(yīng)不同的場(chǎng)景
default:表示不區(qū)分調(diào)用者,來(lái)自任何調(diào)用者的請(qǐng)求都將進(jìn)行限流統(tǒng)計(jì)。如果這個(gè)資源名的調(diào)用總和超過(guò)了這條規(guī)則定義的閾值,則觸發(fā)限流
some_origin_name:表示針對(duì)特定的調(diào)用者,只有來(lái)自這個(gè)調(diào)用者的請(qǐng)求才會(huì)進(jìn)行流量控制
other:表示針對(duì)除 {some_origin_name} 以外的其余調(diào)用方的流量進(jìn)行流量控制
同一個(gè)資源名可以配置多條規(guī)則,規(guī)則的生效順序?yàn)?#xff1a;{some_origin_name} > other > default
?
總結(jié)
以上是生活随笔為你收集整理的阿里巴巴sentinel限流的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 汉字转为16进制的unicode
- 下一篇: 随笔小记