地理复制桥梁
对于大型应用程序,分布式缓存用于提高应用程序的性能、可靠性和运行时可扩展性。 因此,分布式缓存可能是灾难恢复计划中非常重要的一部分,灾难的范围从自然灾害到内部硬件灾难或软件故障。
最好和最常用的灾难恢复计划是将数据实时复制到其他备份站点。 因此,在需要时,您可以将实时用户重定向到备份站点,而不会出现任何错误。 但是,这需要确保您的活动缓存和备份缓存随时同步。 如果它们不同步,则可能会影响应用程序的缓存客户端。
NCache 通过桥接功能为您提供 WAN 复制。 在多个集群缓存之间创建一个桥,并通过该桥将数据从源复制到另一个站点。
如果您不仅有灾难恢复计划,还希望将应用程序部署在地理上分散的区域,以供广泛的客户使用,数据复制也可以为您解决问题。 这里可以有两个或多个活动站点,它们将处理相关区域的用户,也可以用作其他区域站点的备份。
远程数据复制是任何计划的关键组成部分,可确保有效且高效地保护数据并从重大中断中快速恢复。 数据的同步复制对于集群内部来说是有好处的,但是当缓存集群在地理上分开时,它对性能的影响就成为一个重要的考虑因素。 该网桥专为涉及通过 WAN 将数据从现场缓存复制到其他现场/异地缓存以进行灾难恢复的场景而设计。 由于异步复制,连接到活动缓存的所有客户端都会得到这样的印象:操作正在活动缓存上执行,而完整备份则无缝地保存到其他缓存。
当对源缓存进行操作时,会异步地交给桥接器。 然后,该操作将在网桥维护的队列中排队。 当桥接器发现目标缓存可用并准备好接受操作时,来自队列的操作将被传输到目标缓存。 通过这座桥,可以确保:
- 没有性能下降。
- 操作的执行顺序与原始缓存上的操作顺序相同。
- 在连接失败的情况下不会丢失操作。
可插拔缓存架构: 缓存之间不知道彼此; 他们只知道这座桥并将其数据复制到桥上。 由于这种松散耦合,您可以在多个缓存之间配置桥接,而不管它们的缓存拓扑如何。 您可以自由删除使用网桥配置的缓存。
数据的完整性: 在源高速缓存执行的操作由桥排队,保持它们在源高速缓存执行的实际顺序。 桥接器以相同的顺序对目标缓存执行操作。 目标缓存上的冲突已解决。 这样,缓存最终变得一致。
专用桥接服务: 与缓存服务一样,桥接器也是一个独立的专用服务,因此如果桥接器操作由于网络延迟而延迟,您的缓存操作不会受到影响。
配置网桥: 您可以在集群缓存所在的同一服务器上配置网桥,也可以在单独的服务器节点上创建它。 然后,您可以将任何集群缓存添加到桥中,数据将在它们之间复制。
灾难恢复: 您可以在主动和被动数据中心之间配置桥梁以实现灾难恢复。
处理地理分布的客户: 您可以拥有两个或多个活动站点来处理相关区域的用户,也可以用作其他区域站点的备份。
异步复制: 对于 WAN 复制,使用异步复制,以便缓存操作不会在桥接操作延迟的情况下受到影响。
队列备份: 网桥是一个多节点集群队列,其中一个节点是主动的,另一个节点是被动的,具有主动队列的备份以避免网桥上的数据丢失。
连接重试: 当发生任何连接失败时,桥接器还会尝试通过重试来复制所有操作。
桥复制器队列: 桥复制器队列大小包含在高速缓存大小中。 如果缓存无法连接到网桥,则操作将在缓存上排队,直到缓存已满。 如果缓存已满,则缓存项将被驱逐,以便为增加的桥接队列腾出空间。
缓存: 您可以将任何拓扑用于将成为网桥一部分的集群缓存。 您还可以在一个网桥中的每个站点上使用不同的拓扑缓存。 但是,强烈建议两侧使用相同的拓扑。
异地复制的缓存同步模式
NCache bridge 可以连接多个缓存,您可以为缓存提供以下任何一种同步模式以进行灾难恢复:
活动缓存:
活动缓存可以是任何拓扑,其中所有客户端都连接并执行读取和写入操作,这些操作通过桥复制到其他连接的缓存。被动缓存:
被动缓存可以是任何拓扑,但建议与主动缓存相同。 但是,在主动缓存上执行的所有操作都会复制到被动缓存。 客户端可以连接到被动缓存并执行读取和写入操作,但这些操作不会复制到主动缓存。 如果需要,可以在被动缓存上进行修改。如果活动站点因任何原因出现故障,您可以通过将其设为活动站点来将您的请求重定向到被动站点。 您的被动站点将表现为主动站点并处理所有请求,不会出现任何故障。
当您的旧活动站点准备就绪并重新启动后,您可以像以前一样重新配置您的配置。 使两个站点都处于活动状态,这会将所有数据从旧的被动站点传输到旧的活动站点。 当所有数据传输完毕后,您可以对被动站点进行配置并将所有请求重定向到主动站点。
在两个活动缓存之间通信的情况下,相同的缓存数据可能几乎同时在两个缓存上更新,这会产生冲突。 为了解决这个冲突, NCache 提供了一个可配置的 冲突解决者 这解决了桥接时间上的操作冲突。 默认情况下,最新的操作“获胜”并应用于缓存以防冲突。
如果任何站点出现故障,您可以将所有请求重定向到其他活动站点。 当被关闭的站点再次启动时,数据将从已运行的站点传输到此站点,并且可以将该区域的请求重定向到此站点。
备注
建议缓存具有除拓扑之外的相同配置,以避免出现问题。 例如,如果数据源配置在一个缓存上,则也应该在另一缓存上配置它。 这是因为来自一个站点缓存的相同操作规范将被复制到另一站点。
状态转移
如果要将源缓存的状态同步到目标缓存,可以在两个缓存之间手动触发状态转移。 这是通过一座桥发生的。
状态传输操作在缓存端排队,一旦连接到网桥,它就开始将其操作发送到网桥,然后中继到目标缓存。 一旦缓存之间的状态传输已经启动,您就不能再启动另一个状态传输 - 以确保系统的稳定性。
情况1:缓存中发生状态转移:
如果高速缓存 A 和高速缓存 B 正在进行状态传输,则高速缓存 A 将关闭并且不会恢复。 由于桥处于状态转移状态,因此任何其他传入的状态转移请求都可能被拒绝。 为了满足这一点,桥接器会智能地确定它是否在指定的时间间隔后停止接收来自缓存 A 的操作。 因此,该状态传输被认为已损坏,并且桥接器允许新的状态传输请求。
案例2:缓存和网桥有网络故障但不断开连接:
如果缓存和桥连接遇到网络故障,导致部分连接,操作和状态传输队列仍然完好无损。 因此,状态转移可以恢复,因为没有操作丢失。
桥接队列
缓存 A 是主动缓存,而缓存 B 是被动缓存。 Cache A 通过网桥向 Cache B 发送操作,但 Cache B 宕机了一段时间。 这意味着桥接队列正在因从高速缓存 A 发送的操作而填满,但不会因高速缓存 B 已关闭而出队。 有一天,桥接队列将完全填满,并且没有任何空间来存储更多操作。 因此,它告诉缓存 A 将操作保留在其末尾,直到有一些空间为止。 然后,操作仅在缓存端排队。 假设缓存 B 恢复正常,并且桥复制器队列开始向其发送操作,因此被出队。 一旦释放了可配置的空间量(默认为 20MB),桥接器就会告诉缓存 A 它现在可以发送其排队的操作。
但是,如果缓存队列已满并启用驱逐,缓存将驱逐其缓存项目,但不会驱逐排队的操作。 这可以防止操作丢失。