前言
- 介紹Soul-Admin和Soul-Web的數(shù)據(jù)同步的原理
數(shù)據(jù)同步
用戶通過Soul-Admin更新配置時民轴,會通過pull或push模式將變更信息同步給Soul網(wǎng)關(guān)墓拜。Soul網(wǎng)關(guān)不需要重啟就可以獲取最新的配置數(shù)據(jù)龄章。
原理分析
Soul Admin
先看一下须板,Soul Admin更新配置數(shù)據(jù)的時序圖
soul-admin在發(fā)生配置變更后榛鼎,首先會持久化到DB中逃呼,然后通過ApplicationEventPublisher發(fā)布配置變更通知,DataChangedEventDispatcher會處理變更通知者娱,然后根據(jù)配置的同步策略(http抡笼、websocket、zookeeper黄鳍、nacos)推姻,將配置發(fā)送給對應(yīng)的事件處理器:
事件處理器:
- websocket: soul-admin將變更后的數(shù)據(jù)主動推送給Soul網(wǎng)關(guān),由WebsocketDataChangedListener類處理
- http:由HttpLongPollingDataChangedListener類處理框沟,soul-adming接收到網(wǎng)關(guān)的http請求藏古,首先會判斷是否有變更的配置數(shù)據(jù),如有則直接響應(yīng)請求忍燥。如沒有校翔,則放入到任務(wù)隊列中,并延遲60s后執(zhí)行灾前。60s后如果還沒有數(shù)據(jù)就返回空防症,如有數(shù)據(jù)則響應(yīng)請求。
- zookeeper:soul-admin將變更后的數(shù)據(jù)寫入到zookeeper哎甲,由ZookeeperDataChangedListener類處理
- nacos:soul-admin將變更后的數(shù)據(jù)寫入到nacos蔫敲,由NacosDataChangedListener類處理
Soul網(wǎng)關(guān)
先看一下, Soul網(wǎng)關(guān)獲取配置數(shù)據(jù)如何更新到本地緩存中
同步策略:
- websocket:由WebsocketSyncDataService類處理炭玫,接收變更的配置數(shù)據(jù)并寫入到本地緩存
- http:由HttpSyncDataService類處理奈嘿,soul網(wǎng)關(guān)主動發(fā)起長輪詢請求,默認(rèn)90s超時時間吞加,如果soul-admin沒有數(shù)據(jù)變更裙犹,則會阻塞http請求尽狠,如果有數(shù)據(jù)發(fā)生變更則響應(yīng)變更的數(shù)據(jù)信息,如果超過60s仍然沒有數(shù)據(jù)變更則響應(yīng)空數(shù)據(jù)叶圃,網(wǎng)關(guān)層接到響應(yīng)后袄膏,繼續(xù)發(fā)起http請求,反復(fù)同樣的請求掺冠。
- nacos:由NacosSyncDataService類處理沉馆,創(chuàng)建Listener。該Listener負(fù)責(zé)將變更的配置數(shù)據(jù)寫入到本地緩存中德崭。
- zookeeper:由ZookeeperSyncDataService類處理斥黑,也是創(chuàng)建IZkDataListener。該Listener負(fù)責(zé)將變更的配置數(shù)據(jù)寫入到本地緩存中眉厨。
總結(jié)
對Soul的數(shù)據(jù)同步原理有了更深入的理解锌奴。尤其是學(xué)會了http長輪徇方式同步數(shù)據(jù)的設(shè)計技巧。