中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

springcloud~Sentinel

介紹

隨著(zhu)微服(fu)務的(de)流(liu)(liu)行,服(fu)務和服(fu)務之間的(de)穩定性變得越來越重要。Sentinel 是面(mian)向分布(bu)式、多(duo)語(yu)言(yan)異構化服(fu)務架(jia)構的(de)流(liu)(liu)量(liang)治(zhi)理(li)組件,主要以流(liu)(liu)量(liang)為切入點,從流(liu)(liu)量(liang)路由(you)、流(liu)(liu)量(liang)控制、流(liu)(liu)量(liang)整形、熔斷(duan)降級、系統自適應過載保(bao)護、熱點流(liu)(liu)量(liang)防護等(deng)多(duo)個維度來幫助(zhu)開發(fa)者保(bao)障微服(fu)務的(de)穩定性。

歷史

2012 年,Sentinel 誕生,主要功能為入口流量控制。
2013-2017 年,Sentinel 在阿里巴巴集團內部迅速發展,成為基礎技術模塊,覆蓋了所有的核心場景。Sentinel 也因此積累了大量的流量歸整場景以及生產實踐。
2018 年,Sentinel 開源,并持續演進。
2019 年,Sentinel 朝著多語言擴展的方向不斷探索,推出 C++ 原生版本,同時針對 Service Mesh 場景也推出了 Envoy 集群流量控制支持,以解決 Service Mesh 架構下多語言限流的問題。
2020 年,推出 Sentinel Go 版本,繼續朝著云原生方向演進。
2021 年,Sentinel 正在朝著 2.0 云原生高可用決策中心組件進行演進;同時推出了 Sentinel Rust 原生版本。同時我們也在 Rust 社區進行了 Envoy WASM extension 及 eBPF extension 等場景探索。
2022 年,Sentinel 品牌升級為(wei)流(liu)量(liang)治(zhi)理,領域(yu)涵(han)蓋流(liu)量(liang)路由/調度、流(liu)量(liang)染色、流(liu)控降(jiang)級、過(guo)載(zai)保(bao)護(hu)/實(shi)例(li)摘(zhai)除等;同時社區將(jiang)流(liu)量(liang)治(zhi)理相關標(biao)(biao)準抽(chou)出(chu)到 OpenSergo 標(biao)(biao)準中,Sentinel 作為(wei)流(liu)量(liang)治(zhi)理標(biao)(biao)準實(shi)現(xian)。

基本概念

資源

資源是 Sentinel 的關鍵概念。它可以是 Java 應用程序中的任何內容,例如,由應用程序提供的服務,或由應用程序調用的其它應用提供的服務,甚至可以是一段代碼。在接下來的文檔中,我們都會用資源來描述代碼塊。
只要通(tong)過 Sentinel API 定(ding)義的代碼,就是資源(yuan),能夠被 Sentinel 保護起來(lai)(lai)。大部分情況下,可以(yi)使用方(fang)法簽名,URL,甚(shen)至(zhi)服務(wu)名稱作為資源(yuan)名來(lai)(lai)標示資源(yuan)。

規則

圍繞(rao)資源(yuan)的實(shi)時狀態設定(ding)的規(gui)則(ze),可以包括流量控制規(gui)則(ze)、熔斷降級規(gui)則(ze)以及系統(tong)保(bao)護(hu)規(gui)則(ze)。所有規(gui)則(ze)可以動態實(shi)時調整(zheng)。

Sentinel 功能和設計理念

流量控制

流量控制在網絡傳輸中是一個常用的概念,它用于調整網絡包的發送數據。然而,從系統穩定性角度考慮,在處理請求的速度上,也有非常多的講究。任意時間到來的請求往往是隨機不可控的,而系統的處理能力是有限的。我們需要根據系統的處理能力對流量進行控制。Sentinel 作為一個調配器,可以根據需要把隨機的請求調整成合適的形狀,如下圖所示:

流量控制有以下幾個角度:

  • 資源的調用關系,例如資源的調用鏈路,資源和資源之間的關系;
  • 運行指標,例如 QPS、線程池、系統負載等;
  • 控制的效果,例如直接限流、冷啟動、排隊等。
    Sentinel 的設計理念是讓您自由選擇控制的角度,并進行靈活組合,從而達到想要的效果。

熔斷降級

什么是熔斷降級

除了流量控制以外,降低調用鏈路中的不穩定資源也是 Sentinel 的使命之一。由于調用關系的復雜性,如果調用鏈路中的某個資源出現了不穩定,最終會導致請求發生堆積。這個問題和 Hystrix 里面描述的問題是一樣的。

Sentinel 和 Hystrix 的原(yuan)則是一致的: 當調用鏈路(lu)中某個資(zi)源(yuan)出現不穩定(ding),例如,表現為 timeout,異(yi)常比例升(sheng)高的時候,則對這個資(zi)源(yuan)的調用進(jin)行限制,并讓請求快(kuai)速失敗,避(bi)免影響到其(qi)它的資(zi)源(yuan),最終(zhong)產生雪崩的效(xiao)果。

熔斷降級設計理念

在限制的手段上,Sentinel 和 Hystrix 采取了完全不一樣的方法。
Hystrix 通過線程池的(de)方式,來對(dui)依賴(在我們的(de)概(gai)念(nian)中對(dui)應資源(yuan))進行了隔離(li)。這樣做的(de)好處是資源(yuan)和資源(yuan)之間做到了最徹底的(de)隔離(li)。缺點(dian)是除了增加了線程切換的(de)成本,還需(xu)要預先給各個資源(yuan)做線程池大小的(de)分配。

Sentinel 對這個問題采取了兩種手段:

  • 通過并發線程數進行限制
    和資源池隔離的方法不同,Sentinel 通過限制資源并發線程的數量,來減少不穩定資源對其它資源的影響。這樣不但沒有線程切換的損耗,也不需要您預先分配線程池的大小。當某個資源出現不穩定的情況下,例如響應時間變長,對資源的直接影響就是會造成線程數的逐步堆積。當線程數在特定資源上堆積到一定的數量之后,對該資源的新請求就會被拒絕。堆積的線程完成任務后才開始繼續接收請求。
  • 通過響應時間對資源進行降級
    除了對并發線程數進行控制以外,Sentinel 還可以通過響應時間來快速降級不穩定的資源。當依賴的資源出現響應時間過長后,所有對該資源的訪問都會被直接拒絕,直到過了指定的時間窗口之后才重新恢復。

系統負載保護

Sentinel 同時提供系統維度的自適應保護能力。防止雪崩,是系統防護中重要的一環。當系統負載較高的時候,如果還持續讓請求進入,可能會導致系統崩潰,無法響應。在集群環境下,網絡負載均衡會把本應這臺機器承載的流量轉發到其它的機器上去。如果這個時候其它的機器也處在一個邊緣狀態的時候,這個增加的流量就會導致這臺機器也崩潰,最后導致整個集群不可用。
針(zhen)對這個情(qing)況(kuang),Sentinel 提(ti)供了對應的(de)保(bao)護機制,讓系統的(de)入(ru)口流(liu)量和系統的(de)負載達到一個平衡,保(bao)證系統在(zai)能(neng)力范圍之內(nei)處理(li)最多(duo)的(de)請求。

如何工作的

Sentinel 的主要工作機制如下:

  • 對主流框架提供適配或者顯示的 API,來定義需要保護的資源,并提供設施對資源進行實時統計和調用鏈路分析。
  • 根據預設的規則,結合對資源的實時統計信息,對流量進行控制。同時,Sentinel 提供開放的接口,方便您定義及改變規則。
  • Sentinel 提供實時的監控系統,方便您快速了解目前系統的狀態。

流控降級與容錯標準

Sentinel 社區正在將流量治理相關標準抽出到 OpenSergo 標準中,Sentinel 作為流量治理標準實現。有關 Sentinel 流控降級與容錯 spec 的最新進展,請參考 opensergo-specification,也歡迎社區一起來完善標準與實現。

接入sentinel

包引用

<!-- sentinel的依賴-->
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

配置

spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:9988
        port: 8719 #該端口是自定義的,作用是與Sentinel控制臺做交互
      eager: true

添加要限制的資源,也可以不顯示添加@SentinelResource

@SentinelResource(value = "deduct")
@RequestMapping(path = "/deduct")
public Boolean deduct() {
		return true;
}
posted @ 2023-05-05 11:38  張占嶺  閱讀(197)  評論(0)    收藏  舉報