需求
思路方案
前端使用websocket 建立通信
现状及问题
由于客户端与服务端websocket连接,是单台服务器建立通道,数据库变更到服务器消费,只会是其中一台服务器消费,其他服务器消费不到,导致其他服务器连接的客户端,接收不到实时的数据。
解决方案
方案名 |
优缺点 |
||
redis+定时 |
所有服务器都启动一个定时器,定时遍历redis中需要推送的,根据当前服务器socket的连接,推送对应客户端 |
缺点: 每台服务器都遍历一次所有的数据,资源浪费 |
|
kafka多个消费组 |
优点:广播形式,推送到所有服务器,实时性有保证,消息不易丢失 每台服务器都消费所有数据,资源浪费 |
||
rocketMq队列 |
优点:广播形式,推送到所有服务器,实时性有保证,消息不易丢失 每台服务器都消费所有数据,资源浪费 |
1、接收到数据库变更信息后,发送mq |
|
redis发布订阅 |
当某个服务器得到数据库变更时,在redis里存好实时数据,然后再在redis频道发送变更的key |
优点:redis广播,实时性有保证,轻量,易实现 每台服务器都消费所有数据,资源浪费 |
1、增加redis订阅频道 |
方案流程图
优化
后记
参考:
websocket 详解:https://blog.csdn.net/weixin_50339217/article/details/125160323
监听数据库变化参考:
https://blog.csdn.net/qq_45821251/article/details/127490460
前端实时更新数据的几种方式:https://www.jianshu.com/p/b7b363e5352a