Amazon Simple Queue Service(SQS)
适用于微服务、分布式系统和无服务器应用程序的完全托管的消息队列
Amazon Simple Queue Service (Amazon SQS) 是一种完全托管的消息队列服务,可轻松分离和扩展微服务、分布式系统及无服务器应用程序。Amazon SQS 用于在分布式应用程序组件之间传送数据,可帮助您分离这些组件。
Amazon Simple Queue Service (Amazon SQS) 提供安全、持久且可用的托管队列,可让您集成和分离分布式软件系统和组件。Amazon SQS 提供常见的构造,例如死信队列和成本分配标签。它提供了一个通用 Web 服务 API,并且可通过 AWS 开发工具包支持的任何编程语言访问。
什么是微服务架构?
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。
每个服务运行在其独立的进程中,服务和服务间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。
什么是CAP理论?
Consistency :指数据的强一致性。如果写入某个数据成功,之后读取,读到的都是新 写入的数据:如果写入失败,之后读取的都不是写入失败的数据。 Availability :指服务的可用性 Partition-tolerance :指分区容错
在分布式系统中 P是基本要求,而单体服务是 CA 系统, 微服务系统通常是 AP 系统,即同时满足了可用性和分区容错。
什么是分布式?
所谓分布式,无非就是将一个系统拆分成多个子系统并分布到多个服务器上.
简单的说,是指将用户界面、控制台服务、数据库管理三个层次部署在不同的位置上。其中用户界面是客户端实现的功能,控制台服务是一个专门的服务器,数据管理是在一个专门的数据库服务器上实现的。
什么是托管?
托管(collocation)是移动和出售的聚合体,有些时候还意味着适当的订单。在互联网上,此术语(经常被拼做“colocation”或“co-location”)被用来描述服务商为客户的通信设备提供的空间。如,一个网站所有者可能将自己网站的服务器放到Internet服务提供商(ISP)的机房中,一个ISP可能将它的网络路由器放到提供交换服务的其它ISP的机房中。还有一种托管方法就是将设备放在客户的房屋中,ISP提供专线。
SQS 提供两种消息队列类型。标准队列提供最高吞吐量、最大努力排序和至少一次传送。SQS FIFO 队列旨在确保按照消息的发送顺序对消息进行严格一次处理。
- 标准队列
无限吞吐量:标准队列支持每个 API 操作几乎无限数量的每秒事务数 (TPS)。
至少一次传递:消息至少传送一次,但偶尔会传送消息的多个副本。
最大努力排序:消息偶尔可能按不同于其发送时的顺序传递。
应用场景:只要应用程序能够处理多次传送和不按顺序传送的消息,就会有多种场景可以使用标准消息队列,例如:
- 将实时用户请求从密集的后台工作中解耦:让用户在调整媒体大小或对媒体编码时上传媒体。
- 将任务分配给多个工作程序节点:处理大量信用卡验证请求。
- 将消息分批以便进一步处理:计划要添加到数据库的多个条目。
- FIFO 队列
-
高吞吐量:默认情况下,FIFO 队列每秒支持最多 300 条消息(每秒 300 次发送、接收或删除操作)。如果每个操作批处理 10 条消息(上限),则 FIFO 队列每秒支持最多 3000 条消息。
一次性处理:消息传递一次并在使用者处理并删除它之前保持可用。队列本身不会引入重复消息。
先进先出传递:严格保留消息的发送和接收顺序(即先进先出)。
-
应用场景:FIFO 队列旨在当操作和事件的顺序至关重要时,或者在不能容忍重复的情况下增强应用程序之间的消息收发,例如:
确保按正确的顺序执行用户输入的命令。
通过按正确的顺序发送价格修改来显示正确的产品价格。
防止学员在注册账户之前参加课程。 -
功能
无限的队列和消息:在任何区域中创建无限数量的 Amazon SQS 队列,并且消息数量不受限制
负载大小:消息负载可包含最多 256 KB 的任意格式的文本。每 64 KB“区块”的已发布数据以 1 次请求计费。例如,1 次负载为 256 KB 的 API 调用将以 4 次请求计费。要发送大小超过 256KB 的消息,您可以使用适用于 Java 的 Amazon SQS 扩展客户端库(对Amazon SQS客户端的扩展,支持通过Amazon S3发送和接收高达2GB的消息),它采用 Amazon S3 来存储消息负载。可使用 SQS 发送消息负载的引用。
管理大型 Amazon Simple Queue Service (Amazon SQS)消息,您可以使用 Amazon Simple Storage Service (Amazon S3)和 适用于 Java 的 Amazon SQS 扩展客户端库.
适用于 Java 的 Amazon SQS 扩展客户端库的作用:
- 指定消息是始终存储在 Amazon S3 中还是仅在其大小超过 256 KB 时存储在 中。
- 发送引用存储在S3bucket中的单个消息对象的消息
- 从S3存储桶检索消息对象
- 从S3bucket中删除消息对象
冗余服务器
冗余服务器是指重复配置系统的一些部件。
当系统发生故障时,冗余配置的部件介入并承担故障部件的当系统发生故障时,比如某一设备发生损坏,冗余配置的部件可以作为备援,及时介入并承担故障部件的工作,由此减少系统的故障时间。
冗余尤用于应急处理。冗余可以存在于不同层面,如网络冗余、服务器冗余、磁盘冗余、数据冗余等。
可见性超时
Amazon SQS设置可见性超时的作用是为了防止其他使用者再次处理消息,可见性超时是 Amazon SQS 防止其他使用者接收和处理消息的时间段。消息的默认可见性超时为 30 秒。最小值为 0 秒。最大值为 12 小时。
注:当使用者接收并处理来自某个队列的消息时,消息将保留在该队列中。Amazon SQS 不会自动删除消息。因为 Amazon SQS 是分布式系统,所以无法保证使用者实际收到消息(例如,由于连接问题或由于使用者应用程序问题)。因此,使用者在接收和处理消息后必须从队列中删除该消息。
Amazon SQS 消息在队列中从创建到删除的整个生命周期
- 生产者(组件1)将消息A发送到队列,消息分布在 Amazon SQS 服务器冗余。
- 当消费者(组件2)准备好处理消息时,它会消耗来自队列的消息,消息A返回。在处理 Message A
期间,它仍保留在队列中,并且在可见性超时期间不返回至后续接收请求。 - 使用者(组件2)从队列中删除消息A,以防止在可见性超时到期时再次接收和处理消息。
注意
Amazon SQS 自动删除在队列中已过了最大消息保存期的消息。默认的消息保存期为 4 天。不过,您可使用 SetQueueAttributes 操作将消息保存期设为介于 60 秒和 1209600 秒 (14 天) 之间的值。