【发布时间】:2012-07-08 14:44:15
【问题描述】:
我们的网站有大约 50,000 名用户,每日活跃流量相当不错。我们正在为我们的用户群设计新的通知功能。
我们的要求如下:
- 用户属于不同的组。
- 一个用户可以是多个组的一部分。
- 当用户在群组中上传图片时,无论在线还是离线,该特定群组的所有成员都应收到“上传新图片”的通知。
我们考虑为每个用户创建每个组和队列的rabbitmq交换。但是在设计正确的方式前感到困惑!
假设,即使用户在通知生成几天后登录站点,他也应该收到通知。我们最终将消息存储在数据库中,这对于离线用户来说根本不是一件好事。
有人可以建议适当的设计模式并解释此用例吗?我们正在使用 celery + rabbitmq + tornado。龙卷风应该直接与芹菜消费者对话吗?用户离线时消息存储在哪里?
【问题讨论】:
-
我会为此使用 XMPP 服务器(如 ejabberd);通过渠道通知非常适合这种用例(每组一个渠道)。
-
嗨 Martijn,你的意思是使用 rabbitmq 进行实时通知并不适合成千上万的用户。我一直在阅读诸如通过 rabbitmq 使用的 pub-sub 模式之类的用例。你能更详细地解释一下吗?谢谢
-
我很快就会实现类似的功能,XMPP 更适合订阅者(最终用户)不会在很短的时间内阅读消息的用例,因此您可能需要将消息存储很长时间。对可靠性的期望也大不相同;如果有人错过了一张还不错的新图片上传,真的。
标签: python rabbitmq celery tornado