请教一个消息队列方案

2019-05-29 18:21:16 +08:00
 yxjn

该系统是一个上游系统,有个需求,需要同步消息到下游服务,下游服务有很多,功能一样,拥有的权限不一样。 每个下游服务需要同步的信息不一样,即上游要分好权限,同步不同的信息给下游。 比如说 A 机器需要 i 信息,B 机器需要 j 信息,C 机器需要 ij 信息。

问题是,如果想用 mq 的方案,怎么实现。比如说 kafka,每个机器分一个 topic 性能是不是难以保证,因为下游服务数量可能成百上千。

另外,如果新加一个机器,需要全量同步之后再用 mq 同步,是不是也不好做,现在没想出什么方案可以解决初始化全量的问题。

4222 次点击
所在节点    Java
20 条回复
lecher
2019-05-29 18:23:57 +08:00
考察一下 pulsar 这类的支持订阅多个主体、支持权限的 MQ ?
petelin
2019-05-29 18:41:58 +08:00
kafka, 创建不同的 topic, 然后每个 topic 创建多个 Partition 就行了

初始化全量更新, 可以将这些数据先写到流里.
mooncakejs
2019-05-29 18:44:14 +08:00
支持 tag 的消息队列
j2gg0s
2019-05-29 20:33:10 +08:00
RabbitMQ 会更适合
dawncold
2019-05-29 23:13:14 +08:00
告诉下游哪些数据有变更让他们来取?
CoderGeek
2019-05-30 01:33:17 +08:00
zk ? 订阅和发布注册监听的意思吗? pull 还是 push
CoderGeek
2019-05-30 01:34:16 +08:00
消息队列只是其中一个 还需要其他辅助的实现把
ysweics
2019-05-30 09:52:04 +08:00
用队列通知下游说权限更新了,下游收到消息自己去接口里面拉权限,不一定非要在队列消息里面把权限信息给过去
axbx
2019-05-30 10:34:50 +08:00
用 rabbitmq 吧 支持模式匹配
yxjn
2019-05-30 11:30:55 +08:00
@petelin 下游成百上千个机器,每个机器拥有的权限可能不相同,而且会经常变化。按照 topic 区分的话,担心 topic 过多会影响性能。而且同样的信息发给多个 topic (按权限区分)效率也不高。
yxjn
2019-05-30 11:32:03 +08:00
@j2gg0s @axbx rabbitmq 用的不多,我再看下。能再详细说下么。
yxjn
2019-05-30 11:34:25 +08:00
@ysweics 这样可能也有同样的问题,下游是多个服务,我怎么精确的把权限通知到下游。
yxjn
2019-05-30 11:37:01 +08:00
@mooncakejs rocketmq 似乎可行,不知道 tag 很多的时候会不会有性能影响,我再看下。
petelin
2019-05-30 11:40:28 +08:00
@yxjn 不太懂为什么同样的消息要按照不同的权限区分.我的理解同一中消息就应该放在同一个 topic 里, 然后客户端权限验证可以走别的,比如接口鉴权, 发现自己没有读对应消息权限之后, 就不要在消费了. 发现有了新权限, 就开始消费.
yxjn
2019-05-30 11:44:51 +08:00
@petelin 需求决定的,:-D 下游只需要拥有权限的信息。
luozic
2019-05-30 11:54:31 +08:00
@lecher pulsar 出錢的基本的定制需求還是有的;又免費,又要求一堆增值功能的,呵呵呵呵。
lihongjie0209
2019-05-30 11:56:51 +08:00
你解决了全量初始话的问题的话记得去 redis 提交一个 pr, redis 主从就是这么干的.
ysweics
2019-05-30 11:58:17 +08:00
@yxjn 那你的问题就是怕消息发送出去以后,下游的服务的应用没有收到信息,或者消费失败,那个可以通过分布式消息一致性的方案来解决,这个就能监控到具体的消费流程了
yxjn
2019-05-30 12:07:36 +08:00
@ysweics 不是这个问题,是如何分好权限,并通过 mq 精准的推到不同的服务上。
ysweics
2019-05-30 12:17:16 +08:00
@yxjn 那就是根据上面 V 友提供的方案,可以用模式匹配,你设计的思路只是把消息推送过去,然后下游消费,上游不用管。(我在开始回答的里面想的是我自己想的第二个方案,开始发送的时候,不用管模式匹配的问题,直接一个更新的命令发给所有的服务,然后服务统一到一个权限接口里面去请求,然后逻辑处理 ,相当于你的更新是推的逻辑,我这边想的拉的逻辑)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/568866

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX