How do nodes communicate with each other, or how do they become aware of each other (in a decentralized manner) in an IaaS environment? As an example: this article about Akka on Google's IaaS describes a 1500+ decentralized cluster intercommunicating randomly. What is the outline of this process?
1 回答
详细解释 Akka 集群的工作原理会很长,但我可以尝试给出一个概述。
Akka 中的成员集本质上是一个高度专业化的 CRDT。由于谈论 Vector Clocks 本身将是一个冗长的讨论,因此我将使用类似 git 的存储库的类比。
您可以想象每个 Akka 节点都维护自己的存储库,其中 HEAD 指向集群的当前状态(该节点知道)。当一个节点引入一个变化时,它会分叉,并开始将变化传播到其他节点(这部分或多或少是随机的)。
有一些我们称之为单调的变化,在 git 类比中这意味着分支可以简单地合并。这些更改只是在其他节点收到它们时被合并,然后它们会将合并提交传播给其他节点,最终一切都稳定下来(HEAD 指向相同的内容)。
还有其他类型的更改并非易事(非单调)。然后这个过程是一个节点首先发送一个提案:“我想做这个不平凡的改变C”。这是必需的,因为其他节点需要知道这个未决的“复杂”变化并做好准备。这在节点之间传播,直到每个人都收到它。现在我们处于“每个人都知道有人提议进行更改 C”的状态,但这还不够,因为还没有人真正意识到存在协议。
因此,还有另一个“回合”,节点开始传播信息“我,节点 Y,知道已经提出了更改 C”的事实。最终,一个或多个节点意识到存在协议(这或多或少是一种分布式确认协议)。所以现在的状态是“至少一个节点知道每个节点都知道已经提出了变更 C”。这(部分)是我们所说的收敛。此时,知道该协议的节点(或多个节点)将进行合并并传播它。
请注意,我在这里高度简化了解释,显然魔鬼(和缩放)在细节中:)