Soul原始碼總結 01 26

2021-10-17 17:21:24 字數 2030 閱讀 8996

divideplugin主要soul閘道器處理http protocol的主要外掛程式, 當有http請求打到soul閘道器的時候,soulwebhandler會執行divideplugin來對http請求做相應的處理。divideplugin做的處理主要是對http請求進行**,主要原理是根據不同的負載均衡演算法將請求**到註冊到soul閘道器的某一台具體機器上。同時在soul-admin端的upstreamcheckservice會起乙個定時任務,來檢查快取中的divideupstream是否下線。

soul-plugin-divide中實現了loadbalance介面,由@spi註解標註,並由abstractloadbalancer實現,並且提供了三種不同的演算法來實現loadbalancing:

基於md5的hash演算法, 由hashloadbalance實現。

randomloadbalanceroundrobinloadbalance

同時採用strategy patternmeta-inf裡加入相應的策略配置:

然後通過打斷點追蹤**,我們會發現在divideplugin執行doexecute方法時會根據傳入的rulehandler來選擇相應的loadbalancer。預設的loadbalance演算法是hashloadbalance

我們可以注意一下abstractloadbalance中的calculatewarmupweight方法, 該方法根據uptime, warmup, weight這三個引數來計算出路由的權重。

我們仍然可以通過打斷點進行追蹤,在soul閘道器啟動時會自動將divideplugindatahandler這個bean注入到ioc容器中

dividepluginhandler中規定了處理selector的方法

其核心在於upstreamcachemanager這個類。如果在配置檔案中soul.upstream.check=true,就會定時開啟乙個任務來定期掃瞄檢查divideupstream是否有下線的instance, 並從本地快取upstream_map_temp中移除。

upstreamcheckutils中主要進行ip探活的邏輯處理,核心**如下

我們可以看出分別是對是對url進行正則檢查,socket探活,ping探活這三種檢查手段來判斷ip探活。

divideplugin是熱插拔思想的一種體現,這種思想在soul admin中應用的非常普遍。同時divide外掛程式也提供了hash, random, roundrobin三種演算法來提供負載均衡。同時divide外掛程式也提供了ip探活機制,實現服務上下線的靈活治理。

Soul原始碼總結 01 20

總結首先啟動soul admin和soul bootstrap專案,在soul bootstrap控制台日誌會發現 soul admin與soul閘道器預設建立websocket通訊,那麼具體在 中是如何實現的呢?soul sync websocket urls ws localhost 9095 ...

Soul原始碼總結 01 22

總結 不要忘記檢查pom.xml中是否加入相關依賴項 啟動soul admin和soul bootstrap專案,在soul bootstrap控制台看到以下日誌 說明此時http長輪詢同步機制建立成功.soul閘道器http長輪詢機制可以參考官網的圖示以及說明 soul http long pol...

Soul原始碼總結 01 29

首先啟動專案soul admin以及soul bootstrap,以soul examples中的soul example http為例,註冊到soul閘道器上。同時在soul admin外掛程式管理中心開啟hystrix外掛程式 同時配置selector以及相關的rule,這裡以http loca...