前言
- 介绍Soul-Admin和Soul-Web的数据同步的原理
数据同步
用户通过Soul-Admin更新配置时,会通过pull或push模式将变更信息同步给Soul网关。Soul网关不需要重启就可以获取最新的配置数据。
原理分析
Soul Admin
先看一下,Soul Admin更新配置数据的时序图
soul-admin在发生配置变更后,首先会持久化到DB中,然后通过ApplicationEventPublisher发布配置变更通知,DataChangedEventDispatcher会处理变更通知,然后根据配置的同步策略(http、websocket、zookeeper、nacos),将配置发送给对应的事件处理器:
事件处理器:
- websocket: soul-admin将变更后的数据主动推送给Soul网关,由WebsocketDataChangedListener类处理
- http:由HttpLongPollingDataChangedListener类处理,soul-adming接收到网关的http请求,首先会判断是否有变更的配置数据,如有则直接响应请求。如没有,则放入到任务队列中,并延迟60s后执行。60s后如果还没有数据就返回空,如有数据则响应请求。
- zookeeper:soul-admin将变更后的数据写入到zookeeper,由ZookeeperDataChangedListener类处理
- nacos:soul-admin将变更后的数据写入到nacos,由NacosDataChangedListener类处理
Soul网关
先看一下, Soul网关获取配置数据如何更新到本地缓存中
同步策略:
- websocket:由WebsocketSyncDataService类处理,接收变更的配置数据并写入到本地缓存
- http:由HttpSyncDataService类处理,soul网关主动发起长轮询请求,默认90s超时时间,如果soul-admin没有数据变更,则会阻塞http请求,如果有数据发生变更则响应变更的数据信息,如果超过60s仍然没有数据变更则响应空数据,网关层接到响应后,继续发起http请求,反复同样的请求。
- nacos:由NacosSyncDataService类处理,创建Listener。该Listener负责将变更的配置数据写入到本地缓存中。
- zookeeper:由ZookeeperSyncDataService类处理,也是创建IZkDataListener。该Listener负责将变更的配置数据写入到本地缓存中。
总结
对Soul的数据同步原理有了更深入的理解。尤其是学会了http长轮徇方式同步数据的设计技巧。