Sentinel 是什么隨著微服務(wù)的流行,服務(wù)和服務(wù)之間的穩(wěn)定性變得越來越重要。Sentinel 是面向分布式服務(wù)架構(gòu)的輕量級流量控制產(chǎn)品,主要以流量為切入點(diǎn),從流量控制、熔斷降級、系統(tǒng)負(fù)載保護(hù)等多個維度來幫助您保護(hù)服務(wù)的穩(wěn)定性。 Sentinel 的歷史
Sentinel 基本概念資源資源是 Sentinel 的關(guān)鍵概念。它可以是 Java 應(yīng)用程序中的任何內(nèi)容,例如,由應(yīng)用程序提供的服務(wù),或由應(yīng)用程序調(diào)用的其它應(yīng)用提供的服務(wù),甚至可以是一段代碼。在接下來的文檔中,我們都會用資源來描述代碼塊。 只要通過 Sentinel API 定義的代碼,就是資源,能夠被 Sentinel 保護(hù)起來。大部分情況下,可以使用方法簽名,URL,甚至服務(wù)名稱作為資源名來標(biāo)示資源。 規(guī)則圍繞資源的實(shí)時狀態(tài)設(shè)定的規(guī)則,可以包括流量控制規(guī)則、熔斷降級規(guī)則以及系統(tǒng)保護(hù)規(guī)則。所有規(guī)則可以動態(tài)實(shí)時調(diào)整。 Sentinel 功能和設(shè)計(jì)理念流量控制什么是流量控制流量控制在網(wǎng)絡(luò)傳輸中是一個常用的概念,它用于調(diào)整網(wǎng)絡(luò)包的發(fā)送數(shù)據(jù)。然而,從系統(tǒng)穩(wěn)定性角度考慮,在處理請求的速度上,也有非常多的講究。任意時間到來的請求往往是隨機(jī)不可控的,而系統(tǒng)的處理能力是有限的。我們需要根據(jù)系統(tǒng)的處理能力對流量進(jìn)行控制。Sentinel 作為一個調(diào)配器,可以根據(jù)需要把隨機(jī)的請求調(diào)整成合適的形狀,如下圖所示: 流量控制設(shè)計(jì)理念流量控制有以下幾個角度:
Sentinel 的設(shè)計(jì)理念是讓您自由選擇控制的角度,并進(jìn)行靈活組合,從而達(dá)到想要的效果。 熔斷降級什么是熔斷降級除了流量控制以外,降低調(diào)用鏈路中的不穩(wěn)定資源也是 Sentinel 的使命之一。由于調(diào)用關(guān)系的復(fù)雜性,如果調(diào)用鏈路中的某個資源出現(xiàn)了不穩(wěn)定,最終會導(dǎo)致請求發(fā)生堆積。這個問題和 Hystrix 里面描述的問題是一樣的。 Sentinel 和 Hystrix 的原則是一致的: 當(dāng)調(diào)用鏈路中某個資源出現(xiàn)不穩(wěn)定,例如,表現(xiàn)為 timeout,異常比例升高的時候,則對這個資源的調(diào)用進(jìn)行限制,并讓請求快速失敗,避免影響到其它的資源,最終產(chǎn)生雪崩的效果。 熔斷降級設(shè)計(jì)理念在限制的手段上,Sentinel 和 Hystrix 采取了完全不一樣的方法。 Hystrix 通過線程池的方式,來對依賴(在我們的概念中對應(yīng)資源)進(jìn)行了隔離。這樣做的好處是資源和資源之間做到了最徹底的隔離。缺點(diǎn)是除了增加了線程切換的成本,還需要預(yù)先給各個資源做線程池大小的分配。 Sentinel 對這個問題采取了兩種手段:
和資源池隔離的方法不同,Sentinel 通過限制資源并發(fā)線程的數(shù)量,來減少不穩(wěn)定資源對其它資源的影響。這樣不但沒有線程切換的損耗,也不需要您預(yù)先分配線程池的大小。當(dāng)某個資源出現(xiàn)不穩(wěn)定的情況下,例如響應(yīng)時間變長,對資源的直接影響就是會造成線程數(shù)的逐步堆積。當(dāng)線程數(shù)在特定資源上堆積到一定的數(shù)量之后,對該資源的新請求就會被拒絕。堆積的線程完成任務(wù)后才開始繼續(xù)接收請求。
除了對并發(fā)線程數(shù)進(jìn)行控制以外,Sentinel 還可以通過響應(yīng)時間來快速降級不穩(wěn)定的資源。當(dāng)依賴的資源出現(xiàn)響應(yīng)時間過長后,所有對該資源的訪問都會被直接拒絕,直到過了指定的時間窗口之后才重新恢復(fù)。 系統(tǒng)負(fù)載保護(hù)Sentinel 同時對系統(tǒng)的維度提供保護(hù)。防止雪崩,是系統(tǒng)防護(hù)中重要的一環(huán)。當(dāng)系統(tǒng)負(fù)載較高的時候,如果還持續(xù)讓請求進(jìn)入,可能會導(dǎo)致系統(tǒng)崩潰,無法響應(yīng)。在集群環(huán)境下,網(wǎng)絡(luò)負(fù)載均衡會把本應(yīng)這臺機(jī)器承載的流量轉(zhuǎn)發(fā)到其它的機(jī)器上去。如果這個時候其它的機(jī)器也處在一個邊緣狀態(tài)的時候,這個增加的流量就會導(dǎo)致這臺機(jī)器也崩潰,最后導(dǎo)致整個集群不可用。 針對這個情況,Sentinel 提供了對應(yīng)的保護(hù)機(jī)制,讓系統(tǒng)的入口流量和系統(tǒng)的負(fù)載達(dá)到一個平衡,保證系統(tǒng)在能力范圍之內(nèi)處理最多的請求。 Sentinel 是如何工作的Sentinel 的主要工作機(jī)制如下:
相關(guān)鏈接:
|
|