探活模塊
shenyu網關對服務的活躍探測,避免將請求轉發到失活的機器上面,並在給定次數的失敗探測時候,將服務下線。
shenyu網關包含的活體探測點
- SoulAdmin對服務機的活體檢測
SoulAdmin對下游服務探活
在websocket的時候,進行服務數據的注冊,並將服務器的數據ip等放置在各個selector當中,保存在數據庫。之后在類UpstreamCheckService當中,對這些注冊的服務器進行探活。
啟動
-
參數初始化
- 在初始化組件UpstreamCheckService時,會初始化幾個探活參數,checked:是否進行探活,zombieCheckTimes:僵屍服務檢測次數(在一次探測失敗后,判定為僵屍服務,再進行四次探測,如果依舊失敗,則從服務器列表移除) scheduledTime:探測間隔時間:默認10s 調用setup()方法,進行定時探活的開啟
-
啟動定時線程
定時任務
- scheduled()方法
ZOMBIE_SET:僵屍服務列表
UPSTREAM_MAP:服務列表
checkZombie:檢查僵屍服務
check:檢查所有服務
首次進入時,僵屍服務列表為空,所以先看check()方法 -
遍歷所有服務,進行連通性檢查,使用方法checkUrl()
這里判斷,如果使用http或者https的話,獲取ip+端口,如果沒有端口,則根據協議判斷443或者80
checkIP檢驗ip的格式,isHostConnector和isHostReachable檢查聯通
InetAddress.getByName:在給定主機名的情況下確定主機的IP地址,如果參數為null,獲得的是本機的IP地址
isReachable:發送及監聽ICMP包 - 如果連通成功,則回到check方法,修改服務狀態,如果連通失敗,修改服務狀態,並且添加到僵屍服務Set集合當中
- 更新處理器updateHandler
重新設置UPSTREAM_MAP,只將連通的放置進去,並且更新數據庫,並通過publishEvent發布到各個監聽服務當中
SoulBootstrap-websocket同步,探測同步對象(對soul-admin群探活)
soulbootstrap啟用websocket向souladmin同步數據,會啟動探活程序
-
在配置文件中配置websocket方式同步數據時,配置urls,spring啟動時調用WebsocketSyncDataService的構造器 -
將會開啟一個以urls的服務數量為大小的定時線程
在啟動websocket連接后,將所有的soul-admin的websocket連接添加到clients集合當中
遍歷clients,各開啟一條線程,進行活躍性的探測,如果client的狀態為關閉,則進行重連,並打印日志,如果為未關閉,則發送ping,進行探測,每10s執行一次。
Divide插件對下游服務的探活
divide插件用於對請求的分發,此處探活默認關閉,需要在啟動參數設置開啟,探活用於對下游服務的活躍性檢測,減少分發到非活躍服務的次數
- 在UpstreamCacheManager類的初始化時,會調用其構造器,在構造器中,開啟對下游服務的探活
開啟核心線程數為1,延遲30s,並且每30s執行一次scheduled方法的定時線程池。 - 調用scheduled方法
對UPSTREAM_MAP里面所有的服務進行探活,並將所有活躍的服務放置到UPSTREAM_MAP_TEMP當中。
其他使用到探活機制的還有
Soul-admin:http長輪訓,數據變化監聽,更新本地緩存
consul方式同步數據












