1.Amazon SQS是什么?
Amazon Simple Queue Service (SQS) 是一种完全托管的消息队列服务,可让您分离和扩展微服务、分布式系统和无服务器应用程序。SQS 消除了与管理和运营消息型中间件相关的复杂性和开销,并使开发人员能够专注于重要工作。借助 SQS,您可以在软件组件之间发送、存储和接收任何规模的消息,而不会丢失消息,并且无需其他服务即可保持可用。使用 AWS 管理控制台、命令行界面或您选择的 SDK 和三个简单的命令,在几分钟内即可开始使用 SQS。
SQS 提供两种消息队列类型。标准队列提供最高吞吐量、最大努力排序和至少一次传送。SQS FIFO 队列旨在确保按照消息的发送顺序对消息进行严格一次处理。
2.优势
消除管理开销
AWS 负责管理所有正在进行的操作和底层基础设施,以提供高度可用且可扩展的消息队列服务。SQS 无需前期成本,无需购买、安装和配置消息收发软件,无需耗时地构建和维护配套基础设施。SQS 队列会以动态方式自动创建和扩展,从而使您可以快速而高效地构建和扩展应用程序。
可靠传送消息
使用 Amazon SQS 可以在任意吞吐量级别传输任何规模的数据,而不会丢失消息,并且无需其他服务即可保持可用。借助 SQS,您可以分离应用程序组件,以让其独立运行,在发生故障时不影响其他组件,从而提高系统的总体容错能力。每个消息有多个副本以冗余的方式存储在多个可用区中,以确保它们在需要时随时可用。
保证敏感数据安全
借助 Amazon SQS,您可以使用服务器端加密 (SSE) 功能加密每个消息正文,以在应用程序之间交换敏感数据。Amazon SQS SSE 与 AWS Key Management Service (KMS) 集成,使您能够集中管理保护 SQS 消息的密钥以及保护其他 AWS 资源的密钥。AWS KMS 会将加密密钥的每次使用情况记录到 AWS CloudTrail,以帮助满足您的监管与合规性需求。
以经济高效的方式进行弹性扩展
Amazon SQS 利用 AWS 按需进行动态扩展。SQS 可以根据您的应用情况进行弹性扩展,因此,您无需担心容量规划和预配置。每个队列的消息数量不限,而且标准队列能提供几乎无限的吞吐量。相对于自行管理的消息收发中间件采用的“不中断”模式,按使用量付费的模式可以为您节约大量成本。
3.队列类型
标准队列
无限吞吐量:标准队列支持每个 API 操作几乎无限数量的每秒事务数 (TPS)。
至少一次传递:消息至少传送一次,但偶尔会传送消息的多个副本。
最大努力排序:消息偶尔可能按不同于其发送时的顺序传递。
只要应用程序能够处理多次传送和不按顺序传送的消息,就会有多种场景可以使用标准消息队列,例如:
- 将实时用户请求从密集的后台工作中解耦:让用户在调整媒体大小或对媒体编码时上传媒体。
- 将任务分配给多个工作程序节点:处理大量信用卡验证请求。
- 将消息分批以便进一步处理:计划要添加到数据库的多个条目。
FIFO 队列
高吞吐量:默认情况下,FIFO 队列每秒支持最多 300 条消息(每秒 300 次发送、接收或删除操作)。如果每个操作批处理 10 条消息(上限),则 FIFO 队列每秒支持最多 3000 条消息。要请求提高上限,请登记支持请求。
一次性处理:消息传递一次并在使用者处理并删除它之前保持可用。队列本身不会引入重复消息。
先进先出传递:严格保留消息的发送和接收顺序(即先进先出)。
FIFO 队列旨在当操作和事件的顺序至关重要时,或者在不能容忍重复的情况下增强应用程序之间的消息收发,例如:
- 确保按正确的顺序执行用户输入的命令。
- 通过按正确的顺序发送价格修改来显示正确的产品价格。
- 防止学员在注册账户之前参加课程。
4、功能
- 无限的队列和消息:在任何区域中创建无限数量的 Amazon SQS 队列,并且消息数量不受限制
- 负载大小:消息负载可包含最多 256 KB 的任意格式的文本。每 64 KB“区块”的已发布数据以 1 次请求计费。例如,1 次负载为 256 KB 的 API 调用将以 4 次请求计费。要发送大小超过 256KB 的消息,您可以使用适用于 Java 的 Amazon SQS 扩展客户端库,它采用 Amazon S3 来存储消息负载。可使用 SQS 发送消息负载的引用。
- 批处理:批量发送、接收或删除消息,每批最多 10 条消息或 256 KB。批消息与单条消息的消耗量相同,这意味着对于使用批消息的客户而言,SQS 更具成本效益。
- 长轮询尽可能快地接收新消息的时候减少外部轮询,从而实现最低成本。在您的队列为空时,长轮询请求会为下一条消息等待至多 20 秒。长轮询请求和普通请求的消耗量相同。
- 可将消息在队列中最多保留 14 天。
- 同时发送和读取消息。
- 消息锁定:收到消息后,在处理期间它会变为“锁定”状态。这可防止其他计算机同时处理该消息。如果消息处理失败,锁定会过期,而消息也重新变为可用。
- 队列共享:匿名或使用特定 AWS 账户安全共享 Amazon SQS 队列。队列共享还可按 IP 地址和一天中的时刻进行限制。
- 服务器端加密 (SSE):使用由 AWS Key Management Service (AWS KMS) 托管的密钥来保护 Amazon SQS 队列中的消息内容。只要 Amazon SQS 收到消息,SSE 就会对其进行加密。这些消息以加密的形式进行存储,且仅当它们发送到授权的客户时,Amazon SQS 才会对其进行解密。
- 死信队列 (DLQ):处理具有死信队列的用户未成功处理的消息。当超出消息的最大接收数时,消息将会移动到与原队列相关的 DLQ 中。为 DLQ 设置单独的用户进程,以便帮助分析和理解消息卡住的原因。DLQ 的类型必须与来源队列 (标准队列或 FIFO 队列) 相同。