SQS可以为单个帐户扩展到1,000,000个队列吗?

joh*_*ell 3 messaging message-queue amazon-sqs amazon-web-services

我需要一个消息服务,允许我为每个用户创建一个频道,以便于实时通知.如果我有大约100,000到100万用户,那么为每个用户创建一个SQS队列是否有意义?

根据SQS定价文档,创建100万个队列只需0.40美元,但是我会遇到扩展问题吗?

另外,有没有办法在队列上设置过期日期?如果用户删除了他们的帐户,则他们的队列不再需要存在.

Yes*_*rni 5

创建队列不是问题.轮询甚至长时间轮询队列对你来说真的很贵.为了处理实时通知,您需要轮询每个队列,其中包含1M个队列,每5秒钟一次.

根据SQS定价,免费套餐后每百万请求的价格为每个请求0.00000040美元.

这意味着您将调用ReceiveMessage API以获取:

1000000 queues * 17280 (1 day in seconds / 5 seconds) = 17280000000 times.

最糟糕的情况是每天6912.00美元.

您需要以更好的方式构建解决方案.


Kre*_*ase 5

“为每个用户提供一个通道,以便于实时通知” - 为此,您不需要为每个用户设置一个专用队列 - 您可以使用一个主消息队列来完成此操作,并且根据您的流量模式,可能会有一些溢出排队处理超高流量用户。

你说“一队”?“这到底将如何扩展到 100 万用户?”

用户数量无关紧要。重要的是您的消息消费可以跟上消息生产(每秒传入消息)。如果你能做到这一点,对你的用户来说就像是实时的。

  • 消息消耗可以扩展到您愿意花费的程度 - 只需生成一个线程来处理每个传入的消息(使用线程池!)
    • 当然,您需要将每个主机限制为 X 个处理线程,这取决于它可以处理的线程数(因此“只要您愿意”)
    • 溢出队列是为了控制成本——如果你被扩展到每秒处理 10K 条消息,你不希望用户每秒向你发送 100 万条消息,从而淘汰你的服务和你的其他客户- 将它们节流到某个合理的限制,并以较低的优先级处理其余的消息。

“但是……数百万。” - 是的。SQS 可以处理很多。与多个单租户通道相比,单个多租户队列在架构和成本方面的扩展性好得多。