该系统是一个上游系统,有个需求,需要同步消息到下游服务,下游服务有很多,功能一样,拥有的权限不一样。 每个下游服务需要同步的信息不一样,即上游要分好权限,同步不同的信息给下游。 比如说 A 机器需要 i 信息,B 机器需要 j 信息,C 机器需要 ij 信息。
问题是,如果想用 mq 的方案,怎么实现。比如说 kafka,每个机器分一个 topic 性能是不是难以保证,因为下游服务数量可能成百上千。
另外,如果新加一个机器,需要全量同步之后再用 mq 同步,是不是也不好做,现在没想出什么方案可以解决初始化全量的问题。
1
lecher 2019-05-29 18:23:57 +08:00
考察一下 pulsar 这类的支持订阅多个主体、支持权限的 MQ ?
|
2
petelin 2019-05-29 18:41:58 +08:00 1
kafka, 创建不同的 topic, 然后每个 topic 创建多个 Partition 就行了
初始化全量更新, 可以将这些数据先写到流里. |
3
mooncakejs 2019-05-29 18:44:14 +08:00
支持 tag 的消息队列
|
4
j2gg0s 2019-05-29 20:33:10 +08:00
RabbitMQ 会更适合
|
5
dawncold 2019-05-29 23:13:14 +08:00
告诉下游哪些数据有变更让他们来取?
|
6
CoderGeek 2019-05-30 01:33:17 +08:00
zk ? 订阅和发布注册监听的意思吗? pull 还是 push
|
7
CoderGeek 2019-05-30 01:34:16 +08:00
消息队列只是其中一个 还需要其他辅助的实现把
|
8
ysweics 2019-05-30 09:52:04 +08:00 via iPhone
用队列通知下游说权限更新了,下游收到消息自己去接口里面拉权限,不一定非要在队列消息里面把权限信息给过去
|
9
axbx 2019-05-30 10:34:50 +08:00
用 rabbitmq 吧 支持模式匹配
|
10
yxjn OP @petelin 下游成百上千个机器,每个机器拥有的权限可能不相同,而且会经常变化。按照 topic 区分的话,担心 topic 过多会影响性能。而且同样的信息发给多个 topic (按权限区分)效率也不高。
|
13
yxjn OP @mooncakejs rocketmq 似乎可行,不知道 tag 很多的时候会不会有性能影响,我再看下。
|
14
petelin 2019-05-30 11:40:28 +08:00
@yxjn 不太懂为什么同样的消息要按照不同的权限区分.我的理解同一中消息就应该放在同一个 topic 里, 然后客户端权限验证可以走别的,比如接口鉴权, 发现自己没有读对应消息权限之后, 就不要在消费了. 发现有了新权限, 就开始消费.
|
17
lihongjie0209 2019-05-30 11:56:51 +08:00
你解决了全量初始话的问题的话记得去 redis 提交一个 pr, redis 主从就是这么干的.
|