之前我们分析四种数据的同步方式,本文主要是总结数据同步方式,和我们怎么是使用 websocket, http long polling, nacos, zookeeper 的。
同步方式总结
之前我们分析过四种同步方式,这里从是否需要第三方插件,同步方式(增量/全量)两方面总结:
http 长轮询:
-
- 不需要第三方,顾名思义是基于 Http 长轮询的。
-
- 同步方式: 启动时全量同步,后期每次更新时增量同步。
websocket:
-
- 不需要第三方,是全双工通信协议
-
- 启动时全量同步,每次更新时增量同步
Zookeeper:
-
- 依赖第三方服务, Zookeeper。
-
- 启动时全量同步,每次有更新需要从节点获取更新的数据。所以也是启动时全量,更新时增量
nacos:
-
- 依赖第三方服务, nacos 服务。
-
- 启动时全量同步,当有数据更新会先取消之前的订阅,会重新订阅新的数据,这相当于也是全量同步。
这四种:如果在集群不大的情况下,websocket 完全能胜任工作,而当连接数过多时,需要 Zookeeper 等第三方服务的形式。
soul 代码库
涉及到的核心模块为:
- soul-admin : 后台管理模块
- soul-bootstrap : 网关启动模块
- soul-spring-boot-starter :soul 自定义封装的自动配置类
- soul-sync-data-center :soul 数据同步模块
如何实现自定义同步方式
admin 端
-
- 在 application.yml 文件中
soul.sync中填写需要的配置
- 在 application.yml 文件中
-
- 在 admin > config 文件夹中增加相应的 XXXProperties,XXXConfiguration。
XXXConfiguration中注册 ConfigService 的Bean;
- 在 admin > config 文件夹中增加相应的 XXXProperties,XXXConfiguration。
-
- 在 adimin > listener 文件夹中新建相应的方式的文件夹,在其中实现
DataChangedListener, 在 XXXDataChangedListener 中实现相应的逻辑
- 在 adimin > listener 文件夹中新建相应的方式的文件夹,在其中实现
-
- 在 admin > config 中的 DataSyncConfiguration 的文件注册相应的 Bean
目录结构如下图所示:
bootstrap 端
-
- 在 soul-bootstrap 的 application-dev.yml 文件中配置所需要的配置,和 soul-admin 的相互对应
-
- 生成自定义的 bootstarter, 在 soul-spring-boot-starter 的子模块 soul-spring-boot-starter-sync-data-center 中自定义 starter 模块。由于需要在 starter 中注册相应的 Service 的Bean
-
- 在模块 soul-sync-data-center 中新增的 soul-sync-data-xxx,新建 XXXService 来实现相应的逻辑。
总结
- admin 端利用 ApplcationEvent 机制,解耦了数据同步的方式,使得这块配置变得方便。
- bootstrap 端利用注册模块的方式,达到了解耦,这设计思路值得学习。
- soul 值得学习的内容不至于此。