在这个快速可靠的应用程序处理时代,每个人都在选择分布式缓存以从他们的应用程序中获得最佳性能。 如果您的 Web 应用程序吸引高流量导致极高的交易量,那么您肯定需要 NCache.
NCache 是一种内存分布式缓存解决方案,提供 线性可扩展性 到 .NET 和 Java 应用程序。 在各种 拓扑结构 这 NCache 为您提供,最受欢迎的是 分区副本 拓扑。 分区副本拓扑为您提供了两全其美、线性可扩展性和高可用性。
在 Partitioned-Replica 集群中,数据在所有节点上进行分区和复制。 因此,如果服务器节点出现故障,其客户端可以通过与其副本副本交互来继续其操作。 一旦节点出现故障,就会触发状态转移过程以自动重新平衡孤立数据。 现在假设您有一个分区副本集群,并且您需要停止其中一个节点进行维护,同时知道您将在不久之后重新启动该节点? 让我们看看这种行为是什么以及它对您来说可能是一个挑战。
NCache 更多信息 分区副本 NCache 配套文档 维护模式 NCache 配套文档
维护期间的自动再平衡挑战
每次在 Partitioned-Replica 集群中停止节点时; 触发状态转移以重新平衡整个集群的数据。 此过程可能需要比预期更多的时间,这会影响您的应用程序的性能,尤其是当节点拥有数十 GB 的数据时。
下图解释了当节点停止时 Partitioned-Replica 集群的行为。
在这个图中,你有一个 NCache 具有三个节点的分区副本集群。 这里介绍了五个阶段来解释当一个节点在集群中停止时会发生什么。
- 1阶段: NCache的分区副本 具有三个节点 A、B 和 C,每个节点都有一个活动节点和一个副本节点。
- 第 2 阶段:节点 C 暂时停止以进行维护。 它的活动和副本不再是集群的一部分,并触发状态传输。
- 第三阶段:数据 redis集群中的贡献(完全没有必要). 这里,节点 C 的孤立数据在状态传输停止后在剩余节点 A 和 B 之间分配。 根据这个划分,他们的副本节点也被更新了。 这种状态转移是完全没有必要的,因为停止的节点很快就会重新启动。
- 阶段 4:节点 C 重新启动。 在这个阶段,集群的行为就像节点 C 已经离开集群一样。 数据后 redistribution,节点 C 再次启动。
- 阶段 5:节点 C 重新加入集群并再次处理数据 redis贡品. 由于其数据已经在 A 和 B 之间分发,因此当 C 重新加入时,会再次在整个集群中触发状态转移,以将新数据分配给节点。
理想情况下,这似乎是完美的解决方案。 您停止一个节点,就会发生状态转移。 你修复任何你想要修复的东西,然后再次启动那个节点。 再次触发状态转移以平衡所有桶。
但为什么这不是理想的解决方案? 这里出了什么问题?
不必要地提示状态转移有几个缺点。 他们是:
- 由于多次网络调用和处理开销而导致的高成本。
- 当节点持有大量数据时,时间复杂度高。
- 当节点在状态转移期间重新启动并导致状态转移中的状态转移时的错误行为。
NCache 更多信息 分区副本 NCache 配套文档 维护模式-NCache 配套文档
解决方案:维护模式感知分区副本
考虑到节点离开和加入集群时发生的所有这些不必要的状态转移的挫折, NCache 为您提供 维护模式.
维护模式允许您在特定时间段内停止节点并在其维护结束时启动它。 该模式确保在节点进行维护期间,不会在集群内触发状态转移线程。 此外,在集群包含大量数据的情况下也非常有用。
下图解释了维护模式与正常停止节点的不同之处。
- 第 1 阶段:Partitioned-Replica 拓扑的结构 of NCache 图中显示了 POR 集群包含三个包含大量数据的服务器节点。
- 阶段 2:节点 C 停止。 通过维护模式停止节点 C 进行维护。
- 第三阶段:数据 redis报应。 在这里,C 的副本变为活动状态并开始寻址节点 C 的客户端。 这消除了触发状态传输的需要,因此,只要集群处于维护状态,状态传输线程就会停止。 这解决了在节点 C 停止后不必要的状态传输在集群中平衡数据时面临的问题。
- 阶段 4:节点 C 重新启动。 出于维护目的而停止后,节点 C 等待重新启动。 每当集群退出维护模式时,节点 C 就会启动。
- 第 5 阶段:数据传输。 在集群的那个阶段,节点 C 从其副本部分接收所有数据并通过状态传输更新整个节点(即活动 C 和副本 B)。
NCache 更多信息 分区副本 NCache 配套文档 维护模式-NCache 配套文档
如何停止节点进行维护
您可以使用 Web Manager 或 PowerShell的. 以下是如何停止节点进行维护的方法 网络管理员. 在停止节点时,系统会要求您提及要保持该节点处于维护状态的维护时间。 这个超时被认为是一个不能触发状态转移的时间段。
以下步骤允许您停止要停止维护的任何节点。
- 访问你的 NCache 网络管理员
- 转到 Clustered Caches 并选择需要维护的集群
- 在其各个节点中,选择需要维护的节点。
转到其设置并选择选项 停止维护.
如何从维护模式中退出节点
一旦集群进入维护模式,Web 管理器用于退出该集群。 以下是需要遵循的步骤:
- 从你的 NCache 网络管理员, 转到集群缓存
- 选择正在维护的集群。
- 转到其设置并选择 退出维护模式.
除了从 Web 管理器中,节点可以通过多种方式退出维护模式。 需要考虑这些情况,因为有些情况可能会影响您的应用程序的性能。
在以下情况下,节点可以退出维护模式:
- 维护节点启动时: 如果正在维护的节点是通过管理器或通过 PowerShell 命令手动启动的,则该节点将退出维护模式。
- 当超时到期时: 当为维护提供的超时到期时,会触发状态转移,集群会自动退出维护模式。
- 当节点离开集群时: 只要集群处于维护状态,任何节点都不能优雅地离开集群。 但是,如果该集群的一个节点强行离开,该集群不可避免地会退出维护模式,尽管仍在维护过程中。 在这里,您应该注意的一点是,如果正在维护的节点离开,则数据丢失的可能性很大。
无论您使用哪种方法退出维护模式,该信号本身就是状态传输线程触发整个集群的自动平衡过程的提示。
加起来
如果您希望在不影响应用程序性能的情况下在分区副本集群缓存中进行修补,请查看 NCache 维护模式。 维护模式允许您修复错误、添加补丁、升级软件或硬件,而不会导致任何应用程序停机。 您所要做的就是按照上述步骤,亲自检查一下有多非凡 NCache 维护模式是。