跳至主要内容

Amazon SQS 功能

队列类型

全部打开

Amazon SQS 针对不同的应用程序要求提供两种队列类型:

标准队列

无限吞吐量:标准队列对每个 API 操作的每秒事务数(TPS)几乎没有限制。

至少一次交付:一条消息至少交付一次,但偶尔会交付消息的多个副本。

最优排序:有时,消息的交付顺序可能与发送顺序不同。

您可以在许多情况下使用标准消息队列,只要您的应用程序可以处理多次到达且无序的消息,例如:

  • 将实时用户请求与密集的后台工作分离:让用户在调整媒体大小或编码媒体的同时上传媒体。
  • 将任务分配给多个 Worker 节点:处理大量信用卡验证请求。
  • 批处理消息以供将来处理:计划将多个条目添加到数据库中。
  • FIFO 队列

    高吞吐量:默认情况下,FIFO 队列支持每秒处理多达 3000 条批处理消息,或者 300 条未进行批处理的消息(每秒 300 次发送、接收或删除操作)。如果您需要更高的吞吐量,可以在 Amazon SQS 控制台上为 FIFO 启用高吞吐量模式,未启用批处理时,该模式支持每秒处理多达 70000 条消息;若启用批处理,吞吐量还能进一步提升。 有关每个区域的 FIFO 高吞吐量模式配额的详细明细,请参阅亚马逊云科技文档

    “正好一次”处理:消息只交付一次,在使用者处理并删除它之前一直可用。队列中不会引入重复项。

    先进先出交付:消息的发送和接收顺序严格保持一致(即先进先出)。 

    FIFO 队列用于在操作和事件的顺序至关重要或重复内容不可接受时增强应用程序之间的消息收发,例如:

  • 确保以正确的顺序执行用户输入的命令。
  • 以正确的顺序发送价格修改,以显示正确的产品价格。
  • 阻止学生在注册账户之前注册课程。
  • 功能

    全部打开

    • 无限的队列和消息:在任何区域中创建无限数量的 Amazon SQS 队列并附带无限数量的消息

    • 有效负载大小:消息有效负载最多可包含 256KB 任何格式的文本。有效负载中每 64KB 的“数据块”按 1 次请求计费。例如,对 256KB 有效负载的单次 API 调用将按四次请求计费。

    • 批处理:批量发送、接收或删除消息,最多 10 条消息或 256KB。批处理的成本与单条消息相同,这意味着 SQS 对于使用批处理的客户而言更具成本效益。

     

    • 长轮询减少无关轮询,在尽快接收新消息的同时最大限度地降低成本。当队列为空时,长轮询请求在下一条消息到达前最多等待 20 秒钟。长轮询请求的成本与常规请求的成本相同。
    • 公平队列:减轻多租户队列中噪声邻居的影响。当某个租户发送大量消息或需要更长的处理时间时,公平队列有助于在所有租户之间保持一致的发送和接收消息时间。通过在消息中添加消息组 ID 来启用公平队列,无需对使用者进行任何更改。

     

    • 队列中的消息最多可保留 14 天。

    • 同时发送和读取消息。

    • 消息锁定:收到消息后,消息在处理过程中变为“锁定”状态。这样可以防止其他计算机同时处理消息。如果消息处理失败,锁定状态将过期,消息将再次可用。

    • 队列共享:匿名或与特定的亚马逊云科技 WS 账户安全共享 Amazon SQS 队列。队列共享也可能受到 IP 地址和时间限制。

    • 服务器端加密(SSE):使用 AmazonWS Key Management Service(AmazonWS KMS)中托管的密钥保护 Amazon SQS 队列中的消息内容。一旦 Amazon SQS 收到消息,SSE 就会对其进行加密。这些消息以加密形式存储,Amazon SQS 仅在这些消息发送给授权使用者时才对其进行解密。

    • 死信队列 (DLQ):使用死信队列处理使用者未成功处理的消息。当消息超过最大接收计数时,该消息将被移动到与原始队列关联的 DLQ 中。为 DLQ 设置单独的使用者进程,这有助于分析和理解消息卡住的原因。DLQ 的类型必须与源队列的类型相同(标准队列或 FIFO)。

    将 Amazon SQS 与其他亚马逊云科技基础设施 Web 服务结合使用

    全部打开

    Amazon SQS 消息队列可以与 Amazon RedshiftAmazon DynamoDBAmazon Relational Database Service(RDS)Amazon Elastic Compute Cloud(EC2)Amazon Elastic Container Service(ECS)AmazonWS LambdaAmazon S3 等其他亚马逊云科技服务一起使用,使分布式应用程序更具可扩展性和可靠性。以下是一些常见的设计模式:

  • 工作队列:解耦分布式应用程序的组件,这些组件可能无法同时处理相同的工作量。
  • 缓冲区和批处理操作:增加架构的可扩展性和可靠性,让临时的卷峰值更加平滑,且不会丢失消息或增加延迟。
  • 请求卸载:通过对请求进行排队,将慢速操作从交互式请求路径中移出。
  • 扇出将 SQS 与 Simple Notification Service(SNS)结合使用,将消息的相同副本并行发送到多个队列。
  • 优先级:使用单独的队列来确定工作的优先级。
  • 可扩展性:由于消息队列会将您的进程解耦,因此可以轻松提升消息的发送或接收速率,您只需添加另一个进程即可。
  • 弹性:当系统的一部分出现故障时,您不需要关闭整个系统。消息队列使系统的组件解耦,因此,如果从队列中读取消息的进程失败,则消息仍然可以添加到队列中,以便在系统恢复时进行处理。
  •  

    预期用途和限制

    全部打开

    使用本服务需遵循亚马逊云科技客户协议