【问题标题】:rabbitmq python - notifications design pattern to scale for thousands of usersrabbitmq python - 为成千上万的用户扩展的通知设计模式
【发布时间】:2012-07-08 14:44:15
【问题描述】:

我们的网站有大约 50,000 名用户,每日活跃流量相当不错。我们正在为我们的用户群设计新的通知功能。

我们的要求如下:

  1. 用户属于不同的组。
  2. 一个用户可以是多个组的一部分。
  3. 当用户在群组中上传图片时,无论在线还是离线,该特定群组的所有成员都应收到“上传新图片”的通知。

我们考虑为每个用户创建每个组和队列的rabbitmq交换。但是在设计正确的方式前感到困惑!

假设,即使用户在通知生成几天后登录站点,他也应该收到通知。我们最终将消息存储在数据库中,这对于离线用户来说根本不是一件好事。

有人可以建议适当的设计模式并解释此用例吗?我们正在使用 celery + rabbitmq + tornado。龙卷风应该直接与芹菜消费者对话吗?用户离线时消息存储在哪里?

【问题讨论】:

  • 我会为此使用 XMPP 服务器(如 ejabberd);通过渠道通知非常适合这种用例(每组一个渠道)。
  • 嗨 Martijn,你的意思是使用 rabbitmq 进行实时通知并不适合成千上万的用户。我一直在阅读诸如通过 rabbitmq 使用的 pub-sub 模式之类的用例。你能更详细地解释一下吗?谢谢
  • 我很快就会实现类似的功能,XMPP 更适合订阅者(最终用户)不会在很短的时间内阅读消息的用例,因此您可能需要将消息存储很长时间。对可靠性的期望也大不相同;如果有人错过了一张还不错的新图片上传,真的。

标签: python rabbitmq celery tornado


【解决方案1】:

我有类似的项目。那么它是如何工作的:

  • 将消息从您的事件源(django、celery、任何地方)放入您的兔子队列
  • 您可以使用 pika+tornado IOLoop(因此当消息到达 tornado 时,您将通过 pika 循环收到通知,当请求来自 http,或通过 Tornado 连接 websocket 时)
  • 使用在 TornaodApplication websockets 中打开的集合为用户发送消息

您可以在我的 github 上通过 torando+rabbitmq 记录非常接近的项目:https://github.com/rmuslimov/RapidLog

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多