阿里2018年開源的。
簡單來說就是干三件事,最終的結果就是保證你的服務可用,不會崩掉。保證服務高可用。
流控
先從最簡單的場景來入手。
1.引用一個依賴,
2,聲明一個資源。
3.聲明一個規則
注意依賴是加在你的微服務上的,每一個微服務都要加一個sentinel的依賴。
maven上搜索
聲明資源
聲明資源 就是你要保護的程序,或者是你要進行流控的那段邏輯。
最簡單的方式就是寫一段代碼。
Entry注意是alibaba.csp包下的
現在在創建訂單的,所以這里起的名字就叫做createOrder
try里面就是你要指定規則的那段代碼。我們只是輸出日志,
當限流觸發的時候會拋出BlockExceprion
聲明了createOrder的資源,資源的內容是 try里面的代碼。當然任何一對代碼都做為資源。只要你用try catch這種方式把他包起來就可以了。
定義規則
爭對createOrder資源的那段代碼定義規則,規則有很多種,你可以有流控的規則,可以有限流的規則,可以有熔斷的規則,可以有降級的規則,
我們在這里就聲明一個最簡單的流控的規則。
創建一個config的包
spring的事件監聽器,監聽的是ContextRefreshedEvent
聲明稱spring 的bean
spring的項目都啟動完,所有的bean都組裝好后,里面寫的代碼就是整個系統系統好以后執行的代碼
叫做FlowRule就是流量的規則,設置setResource就是針對createOrder這個資源的
grade流控規則的類型是什么,這里先演示一個最簡單的。每秒請求數量 QPS。
setCount(1)表示每秒只能有一個請求過去
然后加到manager里面, 參數需要一個List的FlowRule
這就是第三部,規則的聲明。
啟動測試
啟動認證服務器
啟動orderAPI
首先去拿令牌
這里沒走網關,直接走的orderAPi
連續多點幾次。
sentinel的日志
默認情況下會在當前用戶的根目錄下面生成一些日志。把當前的規則以及每一個資源的流量情況都記錄下來。
再來看這個,記錄這個資源流量變化的情況。
剛才啟動后的做的那些請求在這都有顯示。
可視化
github上搜索。
用java -jar 啟動這個下載的jar包,啟動的端口是8080,server的地址 localhost:8080
項目的名字
默認的用戶名密碼都是sentinel
把自己的項目接入sentinel
首先加一個新的依賴。
還需要告訴api我的控制台的位置在哪里。通過jvm的參數傳進去的
加這么一個jvm的啟動參數。來告訴orderAPI這個程序,啟動的時候你要往localhost:8080 sentinel的dashboard去注冊。
在這邊點刷新。並不是orderAPI 一起來就馬上注冊的。而是說你的資源有流量訪問 才會去注冊。
所以我們訪問幾次 order的服務
刷新顯示了。當前顯示的名字是應用啟動類的名字,
這是爭對資源的
流控的規則
改造
現在的處理方式,並不是特別SpringBoot的一種處理方式
比如說我們這里的參數
我們是通過jvm的參數傳進去的
實際上在SpringBoot里面我們所有的參數應該配置在配置文件內
資源的聲明,現在是這種try catch的形式。再介紹一個用注解的方式來聲明資源,
最后是依賴,我們引入了兩個。這些都不是很SpringBoot的做法。
改造開始
首先改造依賴。
復制上面的名字去maven上搜索下
復制到orderAPI。這就是把所有需要的jar包都引進來了。
告訴orderAPI,sentinel控制台在哪里,在8080的端口上,
這里的port,當你啟動你的orderAPI的時候,同時sentinel會在8719這個端口再起一個應用,然后用8719這個端口去跟dashboard 8080端口通訊。然后去發心跳。
orderAPI本身就跑在9080端口上的。sentinel會在8719再起一個應用,8719如果不配置的話也是這個端口。
如果端口被占了,可以通過這個配置來改這個端口。讓sentinel可以啟動起來。
資源的聲明
一般會采用注解的方式來聲明資源。
這樣整個create方法就變成了sentinel的資源。
這么改造下來,我們的應用就很springboot風格了。
啟動看效果
啟動orderAPI
多點擊幾次,給他一些流量。如果token過期了 就重新申請個。
現在用的注解,它並不知道 你報錯了以后要怎么處理
它會直接在控制台拋異常出來。
所以如果點的快了 就報500錯誤。這塊怎么處理 后面再講。
刷新 sentinel的控制台。
結束