在什么情况下 AWS SNS 标准主题可以传递一条以上的消息,这在 FIFO 主题中是不允许的

On what condition can AWS SNS Standard topic deliver more than one message which is not allowed in FIFO topic

谁能用分布式计算的术语解释一下,为什么 AWS SNS 标准主题可以传递多条消息,而这在 SNS FIFO 主题中是严格不允许的。 背后的架构是什么?

文档说:

**Best-effort deduplication**: 
A message is delivered at least once, but occasionally more than one copy of a 
message is delivered.

它认为 short polling in SQS 说明了为什么分布式系统有时与完全集中式系统的工作方式不同:

When you consume messages from a queue using short polling, Amazon SQS samples a subset of its servers (based on a weighted random distribution) and returns messages from only those servers. Thus, a particular ReceiveMessage request might not return all of your messages

AWS 没有分享其内部架构的确切细节,但我认为类似的情况可以解释为什么 SNS 可能会传递重复的消息。即,某些支持 SNS 的服务器可能无法及时收到给定消息已送达的通知,并重新发送。

SNS FIFO 可能需要一个集中式系统来管理消息,但同时它整体低于非 FIFO。

在 SNS 标准(至少一条消息)的情况下,客户端 ACK 有时可能会失败(网络 failure/partition)或其他情况。如果服务器 dosent 收到 ACK,它将重新尝试相同的消息传递。在这些极少数情况下,客户端可能会收到同一消息的另一副本。

当 AWS SNS FIFO 保证最多有一条消息时,AWS 只是有一套非常“可用”的硬件用于 FIFO SNS,否则在分布式系统中确认最多一条消息是不正确的。并且它必须保持高度一致性以确认有序的消息。