为 AWS 中的多个消费者选择消息队列方法
Selecting message queue approach for multiple consumers in AWS
请帮助为以下用例选择 MQ app/system/approach:
检查特定用户的传入消息 -> 阅读消息(如果可用) -> 从队列中删除,最好留在 AWS 中。
上下文:
- 社交网络应用,用户接收消息,即
我需要通过收件人 ID 识别收到的邮件。
- 该应用每 30 秒对新消息进行一次长轮询。
- 邮件大小 <1Kb。
- 根据目前的估计,我每月总共需要检查 1 亿多条消息(但是,消息少得多,这些只是检查)。
- 虽然用户确认消息选择确定或忽略,但不确定是否需要来自 MQ 系统的 ACK 支持。
我在 AWS。最初想到 SQS,但我读得越多,它看起来就越不适合 - 无法以按收件人过滤的方式设置消息收件人 ID 等,但也许我错了。
我还考虑过的选项之一是只使用 DynamoDB 的 "messages" table,分区键是 userId,排序键是 messageId,这样我就可以很容易地由用户查询,但是担心有成本。
如果可能的话,我更愿意留在 AWS 或至少使用像 SQS 这样的 SAAS,作为一个单人创业公司,我真的想避免支持自托管系统的麻烦。
谢谢!
D
你在这两点上都是对的:
- 由于您指出的限制,SQS 将无法工作。
- DynamoDB 可以,但成本很高。
我可以提出以下建议:
- 创建一个 Redis 集群,可能在 Amazon ElastiCache。
- 其中,每个用户制作一个List。
- 每当收到新消息时,将其附加到相关用户列表中。
- 要传递消息,只需从用户列表中读取即可。另外,如果需要,刷新队列。
我的建议与 Twitter 管理每个用户的新闻源和主页的方式非常相似。
应该也很便宜
请帮助为以下用例选择 MQ app/system/approach:
检查特定用户的传入消息 -> 阅读消息(如果可用) -> 从队列中删除,最好留在 AWS 中。
上下文:
- 社交网络应用,用户接收消息,即 我需要通过收件人 ID 识别收到的邮件。
- 该应用每 30 秒对新消息进行一次长轮询。
- 邮件大小 <1Kb。
- 根据目前的估计,我每月总共需要检查 1 亿多条消息(但是,消息少得多,这些只是检查)。
- 虽然用户确认消息选择确定或忽略,但不确定是否需要来自 MQ 系统的 ACK 支持。
我在 AWS。最初想到 SQS,但我读得越多,它看起来就越不适合 - 无法以按收件人过滤的方式设置消息收件人 ID 等,但也许我错了。 我还考虑过的选项之一是只使用 DynamoDB 的 "messages" table,分区键是 userId,排序键是 messageId,这样我就可以很容易地由用户查询,但是担心有成本。
如果可能的话,我更愿意留在 AWS 或至少使用像 SQS 这样的 SAAS,作为一个单人创业公司,我真的想避免支持自托管系统的麻烦。
谢谢! D
你在这两点上都是对的:
- 由于您指出的限制,SQS 将无法工作。
- DynamoDB 可以,但成本很高。
我可以提出以下建议:
- 创建一个 Redis 集群,可能在 Amazon ElastiCache。
- 其中,每个用户制作一个List。
- 每当收到新消息时,将其附加到相关用户列表中。
- 要传递消息,只需从用户列表中读取即可。另外,如果需要,刷新队列。
我的建议与 Twitter 管理每个用户的新闻源和主页的方式非常相似。
应该也很便宜