8、Sentinel服務保護框架

服務保護

服務接口保護的方案有:黑名單和白名單、對IP實現限流/熔斷機制、服務降級、服務隔離機制。java

服務限流:在高併發的狀況下,客戶端的請求數量超出咱們設置的閾值,開啓自我保護機制。直接執行服務降級的方法,不執行業務邏輯,走本地fallback方法。git

服務降級:在高併發的狀況下,爲了防止用戶一直等待,採用限流或者熔斷機制,保護咱們的服務,不執行業務邏輯,走本地fallback方法。github

服務雪崩效應

默認狀況下,tomcat/jetty服務器只會有一個線程池處理全部接口的請求。這樣的話就是在高併發的狀況下, 若是客戶端全部的請求都堆積到同一個接口上,那麼會產生該服務器的全部的線程都在處理該接口,可能會致使其餘的接口沒法訪問,短暫沒有線程去訪問。spring

解決方案:後端

服務隔離機制:線程池隔離或者信號量隔離機制。api

線程池隔離:每一個接口都有本身獨立的線程池維護咱們的請求,每一個線程池互不影響,缺點:佔用服務器內存很是大。tomcat

信號量隔離:設置處理每一個服務的線程數量的閾值,超出該線程數量,則拒絕訪問。bash

Sentinel控制檯

咱們能夠使用代碼來管理項目,可是配置寫死顯然很差。這裏直接用控制檯來管理項目,能夠實現動態配置管理項目。服務器

首先 下載Sentinel 的jar包。而後使用下面命令啓動控制檯併發

java -Dserver.port=8718 -Dcsp.sentinel.dashboard.server=localhost:8718 -Dcsp.sentinel.api.port=8719 -jar sentinel-dashboard.jar

後端啓動

nohup java -Dserver.port=8718 -Dcsp.sentinel.dashboard.server=localhost:8718 -Dcsp.sentinel.api.port=8719 -jar sentinel-dashboard.jar &

導入依賴

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-alibaba-sentinel</artifactId>
    <version>0.2.2.RELEASE</version>
</dependency>

配置文件

cloud:
    nacos:
      discovery:
        server-addr: ip:port
    sentinel:
      transport:
        dashboard: ip:port
      eager: true

進入控制檯就能夠增刪規則了

不過要注意的是,若是接口沒有使用@SentinelResource註解,那麼資源名就是訪問接口的路徑,若是使用了@SentinelResource註解,那麼資源名就是註解指定的名稱。

控制檯與註解結合使用,能夠指定限流、降級/熔斷時候的處理方法。

相關文章
相關標籤/搜索