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 中。