在本文中,理解 Amazon SQS 的事情事理以及如何利用它来创建分布式运用程序,探索 SQS 的组件及其架构。什么是亚马逊 SQS?
Amazon SQS(大略行列步队做事)是一种行列步队做事,它使运用程序组件能够通过交流相互通信。这被广泛用于构建事宜驱动系统或解耦AWS上的做事。
亚马逊 SQS 的特点持久性:存储在行列步队中,直到它们被发送或吸收端点传送或删除。有担保的通报:至少通报一次,并且与发送时的顺序相同。重新投递:如果一条未被确认,它将在从行列步队中删除之前重新发送最多 3 次。可见性超时:可以设置为在设定的韶光后过期和删除,纵然它们尚未发送。亚马逊 SQS 的上风Amazon SQS 是一种高度可靠且 可扩展的 行列步队做事,使您能够可靠地连接您的运用程序。它供应以下好处:
等等,行列步队不是该当设计成前辈先出的吗?嗯,是的,但是对付 SQS,它变得有点繁芜。AWS 声称他们已尽最大努力按顺序处理,但时时时会涌现被不按顺序处理的情形。

SQS 具有具有大量冗余的分布式架构。这意味着有不止一个存储。在运行时,是从个中一个商店中随机选取的。
让我试着用一个类最近更好地阐明这一点。假设一行三人去火车站售票柜台购票。他们决定站在三个不同的行列步队中,谁先拿到票,谁就会关照其他人,这样他们就可以从行列步队中出来——分布式和冗余。让我们假设所有三个行列步队在该实例中具有相同的人数。很巧的是,另一组三人险些同时进入了车站。当他们分成三队时,第二组的一个人成功地超越了第一组,排在了个中一个行列步队的前面。轮到他们时,第二组的人比另一组先拿到票——这不是我们想要的,但有时会发生。
那么,出路何在?如果须要严格的 FIFO 顺序,AWS 建议利用 FIFO 行列步队。与标准 SQS 不同,FIFO SQS 担保严格排序。
打个比方,假设您走进一家银行并立即收到一个代币。代币持有者按顺序得到做事,打消了有人不按顺序得到做事的可能性。
如何处理?标准 SQS 行列步队担保“至少一次”处理。这意味着不会丢失并且至少会被处理一次。但是“至少一次”该当是什么意思?这是否意味着可以多次处理?嗯,答案是肯定的。
让我们首先看一下生命周期。以下是阶段:
被放入行列步队。它被消费者捡起来。处理后,消费者将其从行列步队中删除。把稳: 在后期处理中,不会自动删除——它必须由消费者明确删除。
在第 2 阶段和第 3 阶段之间,是“翱翔中的”。当在传输中时,可见性超时开始发挥浸染,它会抑制行列步队中的,使其不再被处理。可以配置可见性超时,默认值为 30 秒。这个想法是必须处理,然后在可见性超时到期之前从行列步队中删除,以避免重复处理。
但是,有时在处理过程中会卡住,导致可见性超时过期,会再次被消费者吸收。此外,在删除过程中,个中一台做事器可能会脱机,并且会保留在该特定做事器上。当它规复时,会被再次处理。因此,在利用标准 SQS 时,绝对有必要将运用程序设计为幂等的。也便是说,纵然一条被处理了不止一次,也不应该对业务产生任何影响。
回到我们火车站的例子,让我们假设一旦一个团体中的一个人拿到了票,他就会给这个团体中的所有其他人发短信。但是,在发送文本时,如果个中一位吸收者的手机掉线,则该人将收不到并会再次购买机票。这是一个可以被多次处理的常见场景。
另一方面,FIFO SQS 中的恰好被处理一次。这就引出了另一个主要的话题——如何处理重复的?标准 SQS 不关心您是否输入了重复的——下线运用程序该当是幂等的。
另一方面,FIFO 行列步队不许可重复。它创建一个重复数据删除 ID,它实质上是一个基于有效负载的哈希值。但是,如果必须在一个小的韶光窗口内处理相同的:默认的重复数据删除 ID 将不起浸染,并且必须创建一个自定义的随机重复数据删除 ID,并且将许可处理所有传入的,纵然它恰好是与之前的一条相同。
您该当利用哪种类型的 SQS?根据履历,您该当始终利用标准 SQS。它是分布式的、冗余的,并且具有无限的吞吐量。毕竟,它旨在相称轻松地扩展和做事所有类型的事情负载。但是,如果严格的顺序对付您正在构建的运用程序至关主要并且您不太关心吞吐量,那么显然,FIFO 将是您的最佳选择。