Soul 数据同步总结

200 阅读2分钟

之前我们分析四种数据的同步方式,本文主要是总结数据同步方式,和我们怎么是使用 websocket, http long polling, nacos, zookeeper 的。

同步方式总结

之前我们分析过四种同步方式,这里从是否需要第三方插件,同步方式(增量/全量)两方面总结:

http 长轮询:

    1. 不需要第三方,顾名思义是基于 Http 长轮询的。
    1. 同步方式: 启动时全量同步,后期每次更新时增量同步。

websocket:

    1. 不需要第三方,是全双工通信协议
    1. 启动时全量同步,每次更新时增量同步

Zookeeper:

    1. 依赖第三方服务, Zookeeper。
    1. 启动时全量同步,每次有更新需要从节点获取更新的数据。所以也是启动时全量,更新时增量

nacos:

    1. 依赖第三方服务, nacos 服务。
    1. 启动时全量同步,当有数据更新会先取消之前的订阅,会重新订阅新的数据,这相当于也是全量同步。

这四种:如果在集群不大的情况下,websocket 完全能胜任工作,而当连接数过多时,需要 Zookeeper 等第三方服务的形式。

soul 代码库

涉及到的核心模块为:

  • soul-admin : 后台管理模块
  • soul-bootstrap : 网关启动模块
  • soul-spring-boot-starter :soul 自定义封装的自动配置类
  • soul-sync-data-center :soul 数据同步模块

如何实现自定义同步方式

admin 端

    1. 在 application.yml 文件中 soul.sync 中填写需要的配置
    1. 在 admin > config 文件夹中增加相应的 XXXProperties,XXXConfiguration。 XXXConfiguration 中注册 ConfigService 的Bean;
    1. 在 adimin > listener 文件夹中新建相应的方式的文件夹,在其中实现 DataChangedListener, 在 XXXDataChangedListener 中实现相应的逻辑
    1. 在 admin > config 中的 DataSyncConfiguration 的文件注册相应的 Bean

目录结构如下图所示: admin 端目录结构

bootstrap 端

    1. 在 soul-bootstrap 的 application-dev.yml 文件中配置所需要的配置,和 soul-admin 的相互对应
    1. 生成自定义的 bootstarter, 在 soul-spring-boot-starter 的子模块 soul-spring-boot-starter-sync-data-center 中自定义 starter 模块。由于需要在 starter 中注册相应的 Service 的Bean
    1. 在模块 soul-sync-data-center 中新增的 soul-sync-data-xxx,新建 XXXService 来实现相应的逻辑。

总结

  1. admin 端利用 ApplcationEvent 机制,解耦了数据同步的方式,使得这块配置变得方便。
  2. bootstrap 端利用注册模块的方式,达到了解耦,这设计思路值得学习。
  3. soul 值得学习的内容不至于此。

参考资料

全双工通信的 WebSocket