【问题标题】:Selecting message queue approach for multiple consumers in AWS在 AWS 中为多个消费者选择消息队列方法
【发布时间】:2016-11-20 07:29:11
【问题描述】:

请帮助为以下用例选择 MQ 应用程序/系统/方法:

检查特定用户的传入消息 -> 读取消息(如果有) -> 从队列中删除,最好保留在 AWS 中。

上下文:

  • 社交网络应用,用户接收消息,即 我需要通过收件人 ID 来识别传入的邮件。
  • 该应用每 30 秒对新消息进行一次长轮询。
  • 消息大小为
  • 根据目前的估计,我每月总共需要 1 亿多条消息检查(但是,消息要少得多,这些只是检查)。
  • 虽然用户确认选择 OK 或 Ignore 的消息,但不确定 MQ 系统是否需要 ACK 支持。

我在 AWS。最初想到 SQS,但我读的越多,它看起来就越不匹配 - 无法以按收件人过滤的方式设置消息收件人 ID 等,但也许我错了。 我还考虑过的一个选项是仅使用 DynamoDB 的“消息”表,分区键为 userId,排序键为 messageId,因此我将能够轻松地由用户查询,但关心成本。

如果可能的话,我更愿意留在 AWS 中,或者至少使用 SQS 之类的 SAAS,因为作为一个 1 人创业公司,我真的希望避免在支持自托管系统方面遇到麻烦。

谢谢! D

【问题讨论】:

    标签: amazon-web-services redis queue message-queue amazon-sqs


    【解决方案1】:

    这两点你都是对的:

    • 由于您指出的限制,SQS 无法工作。
    • DynamoDB 可以工作,但成本很高。

    我可以提出以下建议:

    • 创建一个 Redis 集群,可能在 Amazon ElastiCache 上。
    • 在其中为每个用户创建一个List
    • 每当有新消息出现时,将其附加到相关用户的列表中。
    • 要传递消息,只需从用户列表中读取。此外,如果需要,刷新队列。

    我的建议与 Twitter 管理每个用户的新闻提要和主页提要的方式非常相似。

    它也应该很便宜。

    【讨论】:

    • 谢谢你,科坦!是的,我看到 Instagram 和 Tumblr 以及其他人也使用了类似的方法。
    • 确实如此。完毕。再次感谢!
    猜你喜欢
    • 2014-01-22
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 2013-08-08
    • 2013-06-09
    • 2012-05-24
    相关资源
    最近更新 更多