Soul源码阅读-数据同步-总结

前言

  • 介绍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长轮徇方式同步数据的设计技巧。

你可能感兴趣的:(Soul源码阅读-数据同步-总结)