节点如何相互通信,或者它们如何在IaaS环境中相互了解(以分散的方式)?例如:this article about Akka on Google's IaaS描述了随机交互的1500+分散群集。这个过程的概要是什么?
答案 0 :(得分:2)
解释Akka集群如何详细工作将会很长,但我可以尝试给出一个概述。
Akka的会员资格实际上是一个高度专业化的CRDT。由于谈论矢量时钟本身将是一个冗长的讨论,我将使用类似git的存储库的类比。
您可以想象每个Akka节点都维护自己的存储库,其中HEAD指向群集的当前状态(由该节点知道)。当节点引入更改时,它会分支,并开始将更改传播到其他节点(此部分或多或少是随机的)。
我们称之为 monotonic 的某些变化在git类比中意味着分支可以简单地合并。这些更改只是在收到它们时由其他节点合并,然后它们会将合并提交传播给其他节点,最终所有内容都会稳定(HEAD指向相同的内容)。
还有其他一些变化并非易于合并(非单调)。然后,过程是节点首先发送提案:“我想做出这个非平凡的改变C”。这是必需的,因为其他节点需要知道这个待定的“复杂”变化并做好准备。这在节点之间传播,直到每个人都收到它。现在我们处于“每个人都知道有人提议做出改变C”的状态,但这还不够,因为没有人真正意识到存在协议。
因此,存在另一个“回合”,其中节点开始传播信息“I,节点Y,意识到已经提出了改变C的事实”。最终,一个或多个节点意识到存在协议(这或多或少是分布式确认协议)。所以状态现在是“至少有一个节点知道每个节点都知道已经提出了变更C”。这是(部分)我们称之为收敛。此时,知道协议的节点(或多个节点)将进行合并并传播它。
请注意,我在这里高度简化了解释,显然魔鬼(和缩放)在细节中:)