什么是使分布式队列打勾的架构模式/解决方案?
请分享有序和无序类型。
答案 0 :(得分:10)
您可以将队列的后端视为复制数据库。 (我假设您正在谈论的队列认为自己是持久:当他们接受消息时,他们保证至少一次交付。)
作为复制数据库,消息队列后端使用复制协议确保消息至少在 N 主机上,然后才确认收件人已发送给发件人。常见的复制协议是2PC,3PC和共识协议,如Raft,Multi-Paxos和Chain Replication。
要向接收方发送消息,您必须使用消息租约执行几乎相同的复制。队列服务器将消息保留一段时间;它将消息发送给接收方,如果/当接收方收到消息时,服务器将删除该消息。否则,服务器会将消息重新发送到下一个可用的接收器。
一些消息队列停在那里,其他消息队列添加了许多铃声和口哨声。 SQS是一个队列实现,它不会添加许多花里胡哨,以便它可以扩展更多。例如,它允许它们对队列进行分片,以便一个SQS队列实际上由如上所述的许多甚至数千个队列组成。顺便说一句,我曾经听过一个SQS开发人员在你每秒接受数百万条消息时会问另一个“什么'命令'意味着?”
话虽这么说,一些队列做提供强有力的排序保证。 (我已经实现了几种类型的系统。)这样做的成本是缩放的能力。为了保持排序,队列的复杂性也在增加。队列必须维护所有消息的有序日志,并在其服务器上复制相同的顺序。这比无序复制要困难得多。有序队列系统通常选择主来维护排序,所有消息都路由到主服务器。他们还倾向于使用更复杂的协议进行复制。