SQS在峰值负载方面是否优于DynamoDB



一个服务在ECS上运行,并将请求的URL写入DynamoDB。动态缩放被激活,以防止DynamoDB的成本过高。DynamoDB的扩展速度比任何给定时间收到的请求都慢,因此一些调用不会被记录。我现在的问题是,写信给SQS是否是更好的方式,因为文档上写着:

标准队列支持每秒、每个API操作(SendMessage、ReceiveMessage或DeleteMessage(几乎不受限制的API调用次数。

当然,消息必须写回DynamoDB,但其他服务可以这样做。

每秒到SQS的消息吞吐量真的是无限的吗?所以向SQS发送消息肯定比增加DynamoDB每秒的写入量更便宜?

我不知道这是否是一个好答案。但回忆起当时与我的架构师的一次讨论,我们得出的结论是,无论负载如何,都应该为这个问题设置一个队列。即使服务中断,它也会保留请求,因此还有一个额外的好处。

SQS和Dynamo适合两种截然不同的用例。与其说哪个更好,不如说哪个适合你的需要。

Dynamodb是一个基于NoSQL文档的数据库。当您有已知的数据访问模式时,这是最好的选择,这些模式需要随着时间的推移而持续,您需要快速访问,但可能不会做出太多更改(或者至少这些更改不必绝对立即,在5毫秒以下即可访问(。dynamodb中的每个文档与标准SQL表中的一行相似(但也非常不同(,因为它将具有属性(列(键(分区和排序键(,并且可以通过查询检索(尽管动态动态查询对Dynamo不利(

SQS是一个队列系统。它没有持久性。JSON对象的有效负载被放入队列中,然后由某个端点进行处理——要么是Lambda,要么是放入dynamo,或者完全取决于您的产品用例的其他东西。它非常适合您经常接收到突发数据,但您的系统需要一些时间来处理每个单独的有效载荷,例如它正在等待其他系统完成才能处理下一个有效载荷,因此,您必须垂直扩展,而不是水平扩展(只需并行处理所有有效载荷((能够通过单个或仅几个线程同时处理更多有效负载(。当数据在队列中等待时,您不能访问进入的数据,不对所述数据进行查询,只能等待数据弹出/推离队列,并由您设置的任何系统进行处理。

你的问题的答案完全取决于你的用例和你的系统-这是我们SO永远不会真正理解或知道的,因为我们总是通过你听到它,而从来没有真正体验过它。因此,要回答它,你需要了解Dynamo和SQS的功能,每种功能的优缺点,然后确定哪种最适合您的产品

最新更新