我有一个服务器,一次只能处理20个请求。当大量请求到来时,我想将请求数据存储在某些队列中。并读取一组请求(即20个)并分批处理。理想的方式是什么?使用SQS或运动学。我很困惑。
答案 0 :(得分:3)
SQS =简单队列服务用于以1:1的顺序对消息进行排队(一旦消息被使用,将从队列中将其删除)
Kinesis =低延迟,高容量数据流...通常适用于1:N(许多消息使用者)
由于Kinesis还存储了一段时间的数据,因此两者经常会混淆,但是它们的架构模式完全不同。
队列=> SQS。
数据流=> Kinesis。
取自https://aws.amazon.com/kinesis/data-streams/faqs/:
问:Amazon Kinesis数据流与Amazon SQS有何不同?
Amazon Kinesis Data Streams可以实时处理流 大数据。它提供记录的顺序以及 以相同的顺序读取和/或重播记录到多个亚马逊 运动学应用程序。 Amazon Kinesis客户端库(KCL)提供 给定分区键的所有记录到同一记录处理器, 使构建来自同一对象的多个应用程序更容易 Amazon Kinesis数据流(例如,执行计数, 聚合和过滤)。
Amazon Simple Queue Service(Amazon SQS)提供可靠,高度可靠的服务 可伸缩的托管队列,用于存储消息之间的传递 电脑。 Amazon SQS使您可以轻松地在分布式数据库之间移动数据 应用程序组件,并帮助您构建其中的应用程序 消息是独立处理的(消息级别的确认/失败 语义),例如自动化的工作流程。
问:我什么时候应该使用Amazon Kinesis Data Streams,什么时候应该使用 使用Amazon SQS?对于具有以下用途的用例,我们建议使用Amazon Kinesis Data Streams: 与以下内容类似的要求:
- 将相关记录路由到同一记录处理器(如在流式MapReduce中一样)。例如,计数和聚合是 将给定键的所有记录路由到同一记录时更简单 处理器。
- 记录的排序。例如,您要在保持维护的同时将日志数据从应用程序主机传输到处理/归档主机。 日志语句的顺序。
- 多个应用程序可以同时使用同一流的能力。例如,您有一个应用程序可以更新 实时仪表板,以及另一个将数据归档到Amazon Redshift的仪表板。 您希望两个应用程序都使用同一流中的数据 同时并独立。
- 几个小时后可以按相同顺序使用记录。例如,您有一个计费应用程序和一个审计应用程序,它们 比计费应用程序晚几个小时。因为亚马逊 Kinesis Data Streams最多可以存储7天的数据,您可以运行 在开票申请后的7天内审核申请。
对于具有以下要求的用例,我们建议使用Amazon SQS: 类似于以下内容:
- 消息语义(例如消息级别的确认/失败)和可见性超时。例如,您有一个工作项队列,想跟踪 成功完成每个项目。亚马逊SQS 跟踪确认/失败,因此应用程序不必维护 持久检查点/游标。 Amazon SQS将删除已确认的消息 并在配置的可见性超时后重新发送失败的消息。
- 单个消息延迟。例如,您有一个作业队列,需要延迟安排单个作业。借助Amazon SQS,您可以 将个别邮件配置为最多延迟15分钟。
- 在读取时动态增加并发性/吞吐量。例如,您有一个工作队列,想添加更多的读者,直到 积压已清除。借助Amazon Kinesis Data Streams,您可以扩展 到足够数量的分片(但是,请注意,您需要 提前提供足够的碎片)。
- 利用Amazon SQS的透明扩展能力。例如,您缓冲请求,并且由于偶尔的负载变化 负载高峰或业务的自然增长。因为每个 缓冲的请求可以独立处理,Amazon SQS可以扩展 透明地处理负载,无需任何配置说明 从你那里来。