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