亚马逊SQS

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)。
至少一次传递:消息至少传送一次,但偶尔会传送消息的多个副本。
最大努力排序:消息偶尔可能按不同于其发送时的顺序传递。
在这里插入图片描述

应用场景:只要应用程序能够处理多次传送和不按顺序传送的消息,就会有多种场景可以使用标准消息队列,例如:

  1. 将实时用户请求从密集的后台工作中解耦:让用户在调整媒体大小或对媒体编码时上传媒体。
  2. 将任务分配给多个工作程序节点:处理大量信用卡验证请求。
  3. 将消息分批以便进一步处理:计划要添加到数据库的多个条目。
  • FIFO 队列
  1. 高吞吐量:默认情况下,FIFO 队列每秒支持最多 300 条消息(每秒 300 次发送、接收或删除操作)。如果每个操作批处理 10 条消息(上限),则 FIFO 队列每秒支持最多 3000 条消息。
    一次性处理:消息传递一次并在使用者处理并删除它之前保持可用。队列本身不会引入重复消息。
    先进先出传递:严格保留消息的发送和接收顺序(即先进先出)。
    在这里插入图片描述

  2. 应用场景:FIFO 队列旨在当操作和事件的顺序至关重要时,或者在不能容忍重复的情况下增强应用程序之间的消息收发,例如:
    确保按正确的顺序执行用户输入的命令。
    通过按正确的顺序发送价格修改来显示正确的产品价格。
    防止学员在注册账户之前参加课程。

  3. 功能
    无限的队列和消息:在任何区域中创建无限数量的 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 扩展客户端库的作用:

  1. 指定消息是始终存储在 Amazon S3 中还是仅在其大小超过 256 KB 时存储在 中。
  2. 发送引用存储在S3bucket中的单个消息对象的消息
  3. 从S3存储桶检索消息对象
  4. 从S3bucket中删除消息对象

冗余服务器

冗余服务器是指重复配置系统的一些部件。
当系统发生故障时,冗余配置的部件介入并承担故障部件的当系统发生故障时,比如某一设备发生损坏,冗余配置的部件可以作为备援,及时介入并承担故障部件的工作,由此减少系统的故障时间。
冗余尤用于应急处理。冗余可以存在于不同层面,如网络冗余、服务器冗余、磁盘冗余、数据冗余等。

可见性超时

Amazon SQS设置可见性超时的作用是为了防止其他使用者再次处理消息,可见性超时是 Amazon SQS 防止其他使用者接收和处理消息的时间段。消息的默认可见性超时为 30 秒。最小值为 0 秒。最大值为 12 小时。

注:当使用者接收并处理来自某个队列的消息时,消息将保留在该队列中。Amazon SQS 不会自动删除消息。因为 Amazon SQS 是分布式系统,所以无法保证使用者实际收到消息(例如,由于连接问题或由于使用者应用程序问题)。因此,使用者在接收和处理消息后必须从队列中删除该消息。

在这里插入图片描述
在这里插入图片描述
Amazon SQS 消息在队列中从创建到删除的整个生命周期
在这里插入图片描述

  1. 生产者(组件1)将消息A发送到队列,消息分布在 Amazon SQS 服务器冗余。
  2. 当消费者(组件2)准备好处理消息时,它会消耗来自队列的消息,消息A返回。在处理 Message A
    期间,它仍保留在队列中,并且在可见性超时期间不返回至后续接收请求。
  3. 使用者(组件2)从队列中删除消息A,以防止在可见性超时到期时再次接收和处理消息。

注意
Amazon SQS 自动删除在队列中已过了最大消息保存期的消息。默认的消息保存期为 4 天。不过,您可使用 SetQueueAttributes 操作将消息保存期设为介于 60 秒和 1209600 秒 (14 天) 之间的值。

猜你喜欢

转载自blog.csdn.net/weixin_43372169/article/details/109691717