关于akka:Cluster-Specification

59次阅读

共计 2638 个字符,预计需要花费 7 分钟才能阅读完成。

本文档介绍了 Akka Cluster 的设计概念。无关应用 Akka 群集的指南,请参见:

  • 集群应用
  • 基于经典 Akka API 的群集应用
  • 集群成员服务

介绍

Akka Cluster 提供了容错的、扩散的点对点集群成员服务,没有单点故障或单点瓶颈。它基于 gossip 协定和主动故障检测器实现。

Akka Cluster 容许构建分布式应用程序,其中一个应用程序或服务逾越多个节点(实际上是多个 ActorSystem)。

条款

  • 节点

集群的逻辑成员。物理机上可能有多个节点。由主机名: 端口:uid 元组定义。

  • 集群

一组节点通过集群成员服务连贯在一起。

  • leader

集群中的单个节点充当领导者。治理集群收敛和成员状态转换。

gossip

Akka 中应用的集群成员基于 Amazon 的 Dynamo 零碎,尤其是 Basho 的 Riak 分布式数据库中采纳的办法。集群集成员应用 Gossip 协定进行通信,该协定中群集的以后状态是通过群集随机进行的,优先传递给那些没有看到最新版本的成员。

矢量时钟

矢量时钟是一种数据结构和算法,用于在分布式系统中生成事件的局部排序,检测违反因果关系。

在 gossip 中,咱们应用矢量时钟来协调和合并群集状态的差别。向量时钟是一组(节点,计数器)对。群集状态的每次更新都会随同矢量时钟的更新。

Gossip 收敛

集群在某个工夫点收敛到某个节点上。节点能够证实集群中所有其余节点都已察看到集群状态。在 gossip 时,通过传递一组看到以后状态版本的节点实现收敛。该信息在 gossip 概述中称为可见集。当所有节点都蕴含在可见汇合中时,就会收敛。

当任何节点都不可达时,gossip 就不会收敛。节点须要再次可拜访,或挪动到敞开和删除状态(请参阅集群成员生命周期局部)。这只会阻止领导者执行其集群成员治理,并且不会影响在集群运行的应用程序。例如,这意味着在网络分区期间无奈向群集增加更多节点。节点能够退出,然而在分区修复或无法访问的节点已敞开之前,它们将不会移入 Up 状态。

故障检测

Akka 群集中的故障检测负责检测群集的其余部分是否无法访问该节点。为此,咱们应用了 Phi 应计故障检测器。为了可能应答突发异常情况(例如垃圾收集暂停、瞬态网络故障),能够轻松配置故障检测器以适应您的环境和需要。

在群集中,每个节点都由几个(默认最多 5 个)其余节点监控。要监控的节点是从哈希排序的节点环中的街坊中抉择的。这是为了减少跨机架和数据中心进行监督的可能性,然而在所有节点上的程序都是雷同的,这能够确保齐全笼罩。

当检测到任何节点不可达时,该数据将通过 gossip 流传到集群的其余部分。换句话说,只有一个节点须要将一个节点标记为不可达,以使集群的其余部分将该节点标记为不可达。

故障检测器还将检测节点是否再次可拜访。当监督不可达节点的所有节点再次将其视为可达时,在 gossip 流传之后,群集将认为它是可达的。

如果无奈将零碎消息传递到节点,它将被隔离,而后就无奈从无法访问的节点变为能够拜访。如果存在太多未确认的零碎音讯(例如,监控,已终止,近程 actor 部署,由近程父级监督的 actors 失败),则会产生这种状况。而后,须要将节点移至“已敞开”或“已删除”状态(请参阅集群成员生命周期),必须重新启动被隔离节点的 actor 零碎,而后能力再次退出集群。

更多详细信息,请参见以下内容:

  • Phi 应计故障检测器实现
  • 应用故障检测器

Leader

八卦收敛之后,能够确定集群的领导者。没有领导者选举过程,只有呈现八卦收敛,任何节点都能够始终确定地辨认领导者。领导者只是一个角色,任何节点都能够成为领导者,并且它能够在收敛回合之间扭转。领导者是按顺序排列的第一个节点,它能够充当领导者角色,领导者的首选成员国在这里起立并来到(无关成员国家的更多信息,请参阅集群成员资格生命周期)。

领导者的角色是将成员移入和移出群集,将加入成员更改为向上状态,或将退出成员更改为已移除状态。以后,领导者动作仅通过八卦收敛接管到新的集群状态来触发。

种子节点

种子节点是退出群集的新节点的联系点。启动新节点时,它将向所有种子节点发送一条音讯,而后将联接命令发送到首先响应的种子节点。

种子节点配置值对正在运行的群集自身没有任何影响,它仅与新节点退出群集无关,因为它有助于它们找到将连贯命令发送到的联系点;新成员能够将此命令发送给集群的任何以后成员,而不仅是种子节点。

Gossip 协定

推挽式八卦的变体用于缩小在集群四周发送的八卦信息的数量。在推挽式八卦中,将发送摘要以示意以后版本,而不是理论值。而后,八卦的接收者能够将其具备较新版本的任何值发送回去,还能够申请其具备过期版本的值。Akka 应用带有矢量时钟的单个共享状态进行版本控制,因而 Akka 中应用的推挽式八卦变体利用此版本仅依据须要推送理论状态。

周期性地,默认值为每 1 秒一次,每个节点抉择另一个随机节点来发动一轮八卦。如果少于 1 / 2 的节点驻留在可见集中(曾经看到新状态),则群集将闲聊 3 次,而不是每秒一次。调整后的八卦距离是在状态更改后放慢晚期流传阶段的收敛过程的一种办法。

闲聊的节点的抉择是随机的,但偏差可能没有看到以后状态版本的节点。在每次八卦替换过程中,当尚未达到收敛时,一个节点会以很高的概率(可配置)与另一个不属于所见汇合的节点进行八卦,即可能具备较旧版本的状态。否则,它会随随便便闲聊节点。

这种有偏见的抉择是一种在状态更改后减速前期流传阶段的收敛过程的办法。

对于大于 400 个节点的集群(可配置,并由教训证据表明),逐步升高 0.8 的概率,以避免出现过多并发八卦申请的单个散乱者。八卦接收者还具备一种机制,能够通过抛弃已在邮箱中排队太长时间的音讯来爱护本人免受太多同时发的八卦音讯的侵害。

当群集处于聚合状态时,闲聊只会向所选节点发送一条蕴含闲聊版本的闲聊状态音讯。一旦集群发生变化(意味着不收敛),它将再次回到有偏差的八卦中。

八卦状态或八卦状态的接收者能够应用八卦版本(矢量时钟)来确定是否:

它具备八卦状态的新版本,在这种状况下,它会将其发送回八卦
它具备过期的状态版本,在这种状况下,接收者通过回传其八卦状态版本来向闲聊者申请以后状态
它的八卦版本抵触,在这种状况下,不同的版本将合并并发回
如果收件人和八卦版本雷同,则不会发送或申请八卦状态。

八卦的周期性具备很好的状态变动批处理成果,例如很快将多个节点彼此连贯到一个节点将导致仅一个状态更改被流传到集群中的其余成员。

八卦音讯应用 protobuf 进行序列化,并且也被压缩以减小无效负载大小。

正文完
 0