峰值负载、故障、系统中断很可能是缓存集群的一部分,无需担心。 但是,绝对没有解决这种情况的方法! 针对此类风险因素的故障恢复是缓存集群的主要要求,因此从故障场景中恢复总是很方便。 在某些情况下,数据丢失可以忽略不计并且可以轻松处理,但在某些涉及关键任务数据的情况下,不能将数据保护和可用性作为次要要求。
NCache 不会丢失您的数据!
NCache作为内存中的分布式数据缓存存储,它提供了一种架构,可以在峰值负载或停机时间下确保数据的高可用性。 即使在节点永久离开集群等灾难性情况下,您的数据也保持 100% 可用。 NCache 设计用于处理运行时添加或删除服务器节点。
您还可以使用热门适用功能在运行时修改缓存配置。 通过点对点架构, NCache 为您省去最大的“单点故障”问题。 故障转移支持不仅在缓存集群中提供,而且在连接到缓存的客户端中也提供。 它使 NCache 高度动态且非常有信心声称没有数据丢失。 让我们看下图来理解 NCache的可用性。
步骤 1 显示了一个连接的集群,其中客户端与 NCache 具有对等架构的集群。
图 2 显示了由于任何灾难而离开缓存集群的节点。
下图显示缓存集群平衡了剩余节点之间的数据,并且客户端保持连接到缓存集群。
缓存拓扑
NCache 提供不同的数据存储拓扑,您可以根据自己的需求存储数据。 看看下面的拓扑:
- 镜像拓扑: 顾名思义, 镜像 拓扑是指具有两个节点的集群,一个是与被动节点镜像的主动节点。
- 复制拓扑: In 复制 拓扑,每个节点上都复制了相同的数据。
- 分区缓存:在 分区 拓扑,每个服务器节点都有一个分区,数据在节点和它的分区之间平均分配。
- 副本缓存的分区: 副本分区 拓扑是最快的拓扑,因为它保留了每个分区的副本。 每个分区都在不同的服务器上复制,并且副本是被动的,这意味着客户端无法连接到它们。
现在让我们讨论缓存拓扑的数据可用性。 提到的每个拓扑都有不同的特性。 复制拓扑 确保数据在所有节点上复制,从而保持数据 100% 可用。 在 分区拓扑,如果单个节点宕机,部分数据会丢失。 然而,在 分区副本 拓扑,因为每个分区都有一个副本,如果一个节点丢失,数据是 redis在剩余的节点中致敬。 它使 POR 拓扑在数据可用性方面最有效。 异步分区副本拓扑具有可能导致数据丢失的后台数据复制,但是,使用同步 POR 拓扑不会发生数据丢失,因为通过客户端应用程序进行复制。
点对点架构 NCache
对等架构意味着没有主节点或从节点的概念 NCache. 集群由一组定义明确的服务器组成,每台服务器都连接到缓存集群中的所有其他服务器。 有一个协调节点负责管理整个集群。 协调节点是加入集群的节点中最高级的节点。 如果协调器节点离开集群,则下一个最高级节点将成为协调器节点。 协调节点也将数据分布的全部信息共享给其他节点,这样下一个协调节点就已经知道了数据分布的全部。
数据分发基于桶进行。 单个桶是数据分布的最小单位。 所有的桶均匀地分布在缓存集群中的节点之间。
例如,具有两个节点和 1000 个数据桶的缓存集群在每个节点上保留 500 个数据桶。 NCache 根据分布图分布数据。 分布图将存储桶与存储桶所在的节点进行映射。
数据从一个节点传输到另一个节点的过程称为 状态转移. 它将数据桶一个桶一个地从现有(源节点)传输到新的(分配的)节点。 状态转移发生的时间,所有失败/与给定存储桶相关的操作都被定向到源节点,直到整个状态转移过程发生。 一旦状态转移过程完成,所有节点都会被告知状态转移已完成。
集群和客户端中的运行时发现
NCache 因其动态特性而在数据可用性方面表现出色。 如果一个节点加入缓存集群,所有服务器和客户端节点都会在运行时提供此信息,从而进行数据分发。 协调器节点确保新服务器已加入缓存集群,并将新服务器节点添加到缓存集群的节点列表中。 它还通知所有其他服务器节点有关进入缓存集群的新服务器节点。 之后,新的服务器节点获取与所有其他服务器节点的 TCP 连接。 因此,新服务器在加入缓存集群之前没有关于现有缓存服务器节点的信息。
同样,缓存客户端也在运行时被发现。 客户端在连接到缓存集群时不需要知道整个缓存集群和所有服务器节点。 它只需要单个正在运行的缓存服务器的信息。 它使用此连接来查看要连接到哪些缓存服务器。 以下是连接建立后向客户端提供的重要信息:
- 数据分布图:保存哪些数据驻留在哪个服务器节点上的信息的映射,以便可以轻松访问。
- 缓存拓扑: 有关缓存拓扑的信息,用于确定要连接到哪个缓存服务器。
- 集群成员信息:关于集群成员的信息,例如新节点进入集群或现有节点离开集群。
- 有关的信息 压缩或加密.
- 序列化信息: 二进制或 JSON。
连接故障转移支持
NCache cluster 是一个动态的自我修复集群,可以在运行时处理任何故障转移。 两种故障转移支持由 NCache:
- 集群内的故障转移支持:如果缓存服务器在任何时候离开集群,缓存集群会非常有效地从缓存服务器的丢失中自我修复。 进一步解释,这意味着缓存集群在剩余的缓存服务器节点之间划分数据桶,并更新所有缓存服务器节点关于新的分布。
- 客户端内的故障转移支持:与缓存服务器类似,缓存客户端也会根据其他现有的缓存服务器进行自我调整。 如果客户端连接到缓存服务器并且由于服务器节点不可用而导致连接丢失,则连接到它的所有客户端都会自动移动到其他现有节点。
维护模式
维护模式 是另一个用户驱动的功能,由 NCache. 如前所述,状态转移发生在每个离开或加入集群的节点上。 在服务器节点离开集群以避免不必要的状态转移的情况下,维护模式会派上用场。 它使您可以控制停止节点进行维护,并为您的集群节省昂贵的状态传输过程的成本。 在维护节点时,所有操作都由副本节点提供。 一旦节点重新加入集群,它就会与副本节点同步状态。
结论
处理缓存数据时,数据可用性是最大的挑战。 NCache 具有丰富的高端功能,可以不惜一切代价处理数据可用性,在灾难性情况下提供即时损害控制。 不仅如此, NCache 具有非常可扩展的架构,不仅提供高可用性,还允许您线性扩展缓存集群。 所以,可以肯定地说 NCache 是您的应用程序架构所需的最佳缓存层。