开发人员和软件架构师的一个常见噩梦是他们唯一的 Web 服务器/数据源崩溃,丢失了数千个连接的客户端、应用程序和宝贵的数据。 在分布式负载平衡缓存层的帮助下,例如 NCache 您可以使您的应用程序层具有高度可扩展性和可用性。 随着事务负载的增加,您可以添加更多服务器。 分布式架构确保没有单点故障。
NCache 是内存中的 分布 为您的应用程序提供最佳性能的数据存储。 这 NCache 集群是 自愈 和动态的。 它包含的节点可以自动平衡彼此之间的负载,而无需用户干预每次集群更新。
这个博客让您快速了解如何 NCache 提供 可扩展性 和性能,同时保持 100% 的正常运行时间。 为了理解 NCache 详细架构,您可以查看此视频:
保持高可用性 NCache 簇
NCache的分布式和复制架构确保 100% 正常运行时间 即使一个节点意外关闭。 NCache的点对点架构和集群和客户端的运行时发现,无需用户干预,确保了如此高的可用性。 而且, NCache 提供智能故障转移支持,因此集群始终可用于所有连接的客户端。
对等架构
NCache 提供 动态缓存集群 用 对等架构 没有单点故障的地方。 缓存集群具有互连的服务器,并且它包含一个协调器(最高级的服务器节点),用于管理集群的成员资格。 如果协调器出现故障,则该角色将传递到集群中下一个最高级的服务器。 它确保集群成员管理中没有单点故障。
集群和客户端内的运行时发现
簇:
一旦服务器启动,它必须至少知道集群中的另一台服务器。 服务器包含多个缓存服务器的列表,并尝试连接到其中的任何一个。 一旦它连接到一个服务器,它就会向该服务器询问集群协调器,并要求协调器将其添加到集群的成员列表中。
协调器在运行时将此新服务器添加到集群中,并通知其他连接的服务器新服务器已加入集群。 它还通知新服务器有关集群的所有成员。 然后,新服务器与集群中的所有服务器建立 TCP 连接。
业主:
一旦客户端连接到缓存服务器,它会在运行时从该服务器接收以下信息:
- 集群成员信息
- 缓存拓扑信息
- 数据分布图
客户端使用此信息来帮助确定要连接到哪些缓存服务器以及如何根据缓存拓扑访问缓存。
集群和客户端内的运行时发现
In NCache,在运行时发现集群和客户端的方式如下:
簇:
由于集群是节点的集合,因此一旦服务器启动,它必须知道集群中至少有一个其他服务器。 该服务器包含多个缓存服务器的列表,并尝试连接到其中的任何一个。 一旦它连接到服务器,它就会向该服务器询问集群协调器,并要求协调器节点将其添加到集群的成员列表中。
协调器在运行时将此新服务器添加到集群中,并通知其他连接的服务器新服务器已加入集群。 它还会更新有关集群所有成员的新服务器。 然后新服务器建立一个 TCP连接 与集群中的所有服务器。
业主:
一旦客户端连接到缓存服务器,它会在运行时从该服务器接收以下信息:
客户端使用此信息来帮助确定要连接到哪些缓存服务器以及如何根据缓存访问缓存。 缓存拓扑。
故障转移支持
作为 NCache 集群是自我修复的,如果在运行时添加或删除服务器,它会在集群内和客户端提供故障转移支持。
- 集群故障转移支持: 集群通过在每次集群更新时更新其与其他服务器的连接来自动重新排列自己。
- 客户端故障转移支持: 如果服务器断开连接,客户端会自动连接到集群中的另一台服务器。 同样,如果添加了服务器,客户端会自行更新并可以连接到新服务器。
有关高可用性功能的更多详细信息,请访问我们的博客 高可用性承诺 NCache.
维护模式
NCache 支持其维护模式 副本的分区 拓扑。 尽管 POR 拓扑本身通过每个节点的副本确保了高可用性。 但是,如果您需要在缓存上运行升级或补丁更新,则需要一个一个停止每个集群节点。 但是,停止缓存节点会触发 状态转移 在整个缓存集群中导致过度使用网络和 CPU 等资源,极大地影响缓存可用性。
NCache 维护模式通过为您提供停止节点进行维护的选项来解决此问题。 一旦一个节点 停止,它通知集群在特定的超时时间内停止任何状态传输。 当集群进行维护时,该节点的副本将充当活动节点并服务于客户端的数据请求。 一旦节点本身重新加入集群,它就会从其副本节点请求数据。 从本质上讲,维护模式可以为您的集群节省昂贵的状态传输过程的成本。
NCache 更多信息 NCache 配套文档 维护模式 NCache 配套文档
实现运行时可扩展性 NCache 簇
自 NCache 存储您的数据并提供高级功能,例如 Pub/Sub 消息传递 和 查询执行,如果您的所有事务仅在一台服务器上,您可能会遇到内存或计算限制。 这就是为什么 NCache 提供无缝线性扩展以处理增加的请求/秒并存储更多数据。
NCache 网络管理员 使扩展您的环境就像单击按钮一样简单,瞧,您拥有一个带有其他节点的动态集群,而无需停止您的客户端。 下面的 GIF 显示了动态扩展集群是多么简单 NCache:
并行操作
NCache 有一个 动态集群 这让客户端只需一跳即可接收所需的数据,因为客户端在集群内得到有效处理,无需任何用户干预。 此外,客户端操作在所有节点上并行发送和执行。 每个节点的结果都被编译成一个结果,从而使操作具有可扩展性。 由于并行性,它还提高了事务的性能。
流水线
流水线, NCache 通过组合在一个 TCP 调用中发送到服务器的多个客户端操作来减少网络开销。 类似地,客户端在一次调用中以单个块的形式接收操作结果。 它有助于扩展运营。
对象池
通过对象池, NCache 服务器将对象池化并重用它们以防止一遍又一遍地调用垃圾收集器。 垃圾收集是一项性能密集型任务,因此减少了调用 GC 的需要,从而提高了环境的性能和可扩展性。
客户端缓存
NCache 提供 客户端缓存,位于缓存之上的缓存,驻留在应用程序所在的位置。 由于客户端缓存位于应用程序和集群缓存之间,它会自动同步并提高性能,尤其是对于读取操作。 客户端缓存的使用减少了网络开销。
更多详细信息,您可以查看博客: 可扩展性架构 NCache – 洞察力
结论
NCache,作为 .NET 本机 分布式缓存 解决方案,无缝融入您的应用程序堆栈。 由于对象池、并行操作和位于应用程序旁边的客户端缓存,它极大地提高了性能。 除了可扩展之外,它还始终保持 100% 的正常运行时间,以确保 高可用性 数据和客户端。