Akka协调是一组用于分布式协调的工具。

模块信息

xml

租约

租约是用于分布式锁的可插入API。

应用租约

租约加载:

  • 租约名称
  • 配置地位以批示应加载的实现
  • 所有者名称

任何租约施行都应提供以下保障:

  • 具备雷同名称的租约即便在不同的节点上屡次加载,也是雷同的租约
  • 一次只有一位所有者能够获取租约

取得租约:

获取租约会返回CompletionStage,因为通常通过第三方零碎(例如Kubernetes API服务器或Zookeeper)来实现租约实现。

一旦取得租约,便能够调用checkLease以确保仍取得租约。因为租约施行是基于其余分布式系统的,因而租约可能会因为第三方零碎超时而失落。此操作不是异步的,因而能够在执行任何重要的操作之前调用它。

租约有一个所有者。如果同一所有者尝试屡次获取租约,它将胜利,即租约是可重入的。

抉择对于您的用例而言惟一的租约名称很重要。如果租约对于集群中的每个节点都须要惟一,则能够应用集群主机端口:

对于在同一节点上有多个不同租约的用例,则必须在名称中增加一些惟一的内容。例如,能够将租约与集群分片一起应用,在这种状况下,每个分片的租约名称中都蕴含分片ID。

设置租约心跳

如果具备租约的节点解体或无响应,则心跳超时是其余节点能够获取租约的工夫。如果没有此超时,则在节点解体的状况下,须要操作员干涉以开释租约。这是最平安的抉择,但并非在所有状况下都可行。

该值应大于预期的最大JVM暂停,例如垃圾收集,否则其余节点能够获取租约,而后当原始节点再次响应时,原始租约所有者只有很短的工夫采取行动,例如敞开分片或单例。

其余Akka模块中的用法

租约可用于集群单例和集群分片。

租约施行

Kubernetes API

施行租约

实现应扩大akka.coordination.lease.javadsl.Lease

该办法应提供以下保障:

  • acquire应以以下内容实现:如果已获取租约,则为true;如果租约是由另一个所有者承揽的,则为false;如果无奈与实现租约的第三方零碎通信,则为失败。
  • release 应以以下内容实现:如果已明确开释了租约,则为true;如果相对没有开释租约,则为false;如果未知,则为失败;如果已开释租约,则失败。
  • checkLease应该返回false直到acquire CompletionStage实现;如果因为与第三方通信谬误而导致租约失落,则应该返回false。Check 租约也不应阻止。
  • 仅在aquire CompletionStage实现后才调用获取租约失落回调,如果租约失落,则应调用该命令,例如失去与第三方零碎的通信。

另外,预计租约施行将蕴含生存工夫机制,这意味着万一节点解体,租约将永远不会保留。如果用户在这种状况下为了最大的安全性而心愿内部干涉,则能够将生存工夫设置为有限。

配置必须为租约实现的FQCN定义lease-class属性。

租约实现应反对以下属性,其中默认值来自akka.coordination.lease:

该配置地位被传递到getLease中。