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
實現。
randomloadbalance
roundrobinloadbalance
同時採用strategy pattern在meta-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...