2.12. 网络分区和降级集群
数据网格集群可能会遇到脑裂情形,因为集群中的节点子集相互隔离,并且节点之间的通信变得不连接。当发生这种情况时,在次要分区中的数据网格缓存进入 DEGRADED 模式,而大多数分区中的缓存仍可用。
垃圾回收(GC)暂停是网络分区的最常见原因。当 GC 暂停导致节点变得不响应时,Data Grid 集群可以在脑裂网络中开始操作。
除了处理网络分区外,尝试通过控制 JVM 堆使用以及使用现代的低暂停 GC 实现(如 Shenandoah)来避免 GC 暂停。
CAP theorem 和 partition 处理策略
CAP theorem 代表分布式、键/值数据存储的限制,如 Data Grid。发生网络分区事件时,您必须在一致性或可用性之间进行选择,而数据网格修复分区并解决任何冲突的条目。
- 可用性
- 允许读写操作。
- 一致性
- 拒绝读写操作。
数据网格还可允许在将集群重新加入时进行读取。通过允许应用程序访问(潜在的过时)数据来拒绝对条目的写入和可用性,此策略具有更均衡的选择。
删除分区
作为将集群重新投入到正常操作的一部分,Data Grid 会根据合并策略来解析冲突条目。
默认情况下,数据网格不会尝试解决合并冲突,这意味着集群可以更早地返回健康状态,且在正常集群重新平衡之外没有性能损失。然而,在这种情况下,缓存中的数据会更有可能不一致。
如果您配置合并策略,则数据网格需要更长的时间来修复分区。配置合并策略会导致数据网格从每个缓存中检索条目的每个版本,然后解决以下冲突:
|
| Data Grid 找到集群中大多数节点上存在的值,并应用它,这可以恢复过期的值。 |
|
| 数据网格应用集群中发现的第一个非null 值,可恢复日期值。 |
|
| 数据网格删除所有具有冲突值的条目。 |
2.12.1. 垃圾回收和分区处理 复制链接链接已复制到粘贴板!
长垃圾回收(GC)时间可以增加 Data Grid 检测网络分区所需的时间。在某些情况下,GC 可能会导致数据网格超过检测分割的最大时间。
另外,当在分割后合并分区时,Data Grid 会尝试确认集群中存在所有节点。因为没有超时或上限应用到节点的响应时间,所以把集群视图合并的操作可能会延迟。这可能导致网络问题以及 GC 时间。
GC 在通过分区处理影响性能的另一个场景是当 GC 暂停 JVM 时,导致一个或多个节点离开集群。当发生这种情况且在 GC 完成后挂起的节点时,节点可能会过期或有冲突的集群拓扑。
如果配置了合并策略,Data Grid 会在合并节点前尝试解决冲突。但是,只有在节点有不兼容的哈希值时,才会使用合并策略。如果每个片段至少有一个通用所有者,则两个一致的哈希是兼容的,如果它们至少有一个通用所有者,则不兼容。
当节点有旧但兼容的哈希时,Data Grid 会忽略过期的集群拓扑,且不会尝试解决冲突。例如,如果一个节点因为垃圾回收而暂停,集群中的其他节点也将其从一致的哈希中移除,并将它替换为新的所有者节点。如果 numOwners > 1,旧的一致的哈希值以及新的一致的哈希值为每个键都有通用所有者,这使得数据网格能够兼容,并允许数据网格跳过冲突解析过程。