唯一的目的 NCache 是为您的应用程序提供最佳性能。 为了达到这些性能数字,您需要您的缓存环境能够轻松且经济高效地扩展。
As NCache 是一个内存数据存储,第一个问题是在一个物理盒子上分配给它的有限内存。 二是计算极限。 我们都知道 NCache, 除了提供 基本的 CRUD 操作,还支持许多高级功能,例如 发布/订阅, 查询,基于标准的获取调用等。当客户端对这些功能的请求变得很多时,对更多处理能力的需求就会增加。 这意味着您的缓存服务器迟早会达到其最大处理限制。 当这件事发生时, NCache 不会抛弃你。 相反,有一个解决方案,我在这里向您解释。
NCache 更多信息 .NET 中的分布式缓存 高可用 NCache
线性可扩展性 NCache
当您的环境达到上述限制时, NCache 允许您向缓存集群添加一个新的服务器节点(或多个节点)。 添加新服务器基本上是通过向集群添加新的物理节点 NCache 网络管理员 or NCache PowerShell 工具 这增强了整体内存并为您提供了另一种资源来解决过多的传入请求。
这确保了线性可扩展性。 如何? 因为您添加的节点越多,您将获得更好的性能。 在 NCache,向集群添加额外的节点不会导致任何导致一致吞吐量下降的开销。 根据最近完成的性能基准, NCache 实现 2 个服务器节点,每秒 5 万次操作! 如果那不是胜利,那我不知道是什么。
而关于这一切的最好的部分是 动态 的性质 NCache 聚类。 这意味着您不必停止现有进程、应用程序或任何节点,只需将新节点添加到集群。
NCache 更多信息 NCache 性能基准 NCache 性能基准 - 视频
让我们深入挖掘并阐明什么 NCache 功能带来可扩展性表。
可扩展性的客户端操作
NCache 客户端具有此内置功能,它会自动直接与每个服务器节点连接。 和 NCache 分布图允许客户端知道哪个节点有它需要的数据。 因此,来自客户端的操作不会经过多个跃点和节点。 相反,它直接跳转到具有特定数据的服务器。 这个简单而巧妙的功能有助于扩展您的环境。
操作可扩展性的并行性
NCache 支持各种高级操作,如 查询, 批量操作, 标签,以及许多其他需要在多个节点上执行的操作。 而不是以循环方式将这些操作发送到每个节点, NCache 允许您将每个操作并行发送到每个节点。
例如,客户端想要查询存储在缓存中的数据,因此它将查询发送到集群的所有节点。 每个节点都将在其存储的数据集上本地执行该查询,并与客户端共享结果。 客户端合并来自所有服务器节点的所有结果并将一个结果返回给所有最终应用程序。 每个节点并行运行相同的查询,从而提高可扩展性并加快系统速度。
用于扩展操作的流水线
NCache 使用 流水线 创建需要在单个 TCP 调用中通过网络发送的操作块。 这种技术减少了一个一个发送多个请求并等待它们的确认的开销。
让我们在这里举个例子。 说 NCache 客户端正在向服务器发送 100 次操作,这通常意味着客户端将执行 100 次 I/O 操作。 为了这些操作的成功,从用户模式到内核模式的每一个事务都将消耗大量的 CPU 资源。 过多的 CPU 消耗是昂贵的,它会降低我的应用程序的性能。
在这里,客户端流水线所做的是将要发送到一台服务器的所有操作组合起来,并在一个专用的 I/O 调用中发送该块。 服务器端流水线确保服务器在一个简单的调用中接收多个 I/O 调用。 服务器发回的响应也会一起接收。 不仅如此,服务器还尝试一次性对这些传入操作产生最大响应。
因此,在专用调用中发送到服务器的 100 个操作在一次调用中被服务器接收。 它获得的操作结果由服务器在一次调用中发送。 这种技术有助于极大地扩展系统。
分区副本中的可扩展后台复制
客户端在服务器节点上执行的任何更新操作都需要复制,以实现对副本服务器的容错和高可用性。 NCache 服务器在后台执行此复制,无需任何客户端参与。 除了作为后台进程之外,这种复制是批量完成的,以节省最大的成本。 由于所有操作都通过后台复制进行扩展,因此此过程会产生可扩展性,并且还可以使您的缓存具有高可用性。 双赢。
可扩展性的后写缓存
如果客户端想要在数据库中写入数据,发送到服务器的相同请求将在缓存和数据库中写入该数据。
此功能的异步实现是 后写 这允许您的服务器在没有任何计算延迟的情况下访问数据库。 通过这种方式,您的数据库和缓存保持同步,同时保持您希望从内存缓存中获得相同的性能。
如果 NCache 客户端向缓存服务器发送启用了 Write-behind 的请求,服务器将该数据写入缓存中,将控制权返回给客户端,并在后台使用批处理系统来确保数据也存储在数据库中。 这种机制使您的应用程序具有可扩展性。
通过内存管理中的对象池实现可扩展性
在 .NET 环境中,当自动垃圾收集器 (GC) 激活时,应用程序中正在进行的所有活动都会停止,这会在内存中数据计算中产生暂停。 这些暂停会对应用程序的性能造成很大影响。 你创建的对象越大,GC 就会越多,这个命中就越大。
为了避免这些长时间的 GC 暂停, NCache 作为本机 .NET 缓存使用对象池技术作为其自己的内存管理。 在这个机制中, NCache 服务器将对象池化并重用它们,而不是创建新的对象,从而减少调用 GC 的需要。 这种需求越少,您从应用程序中获得的性能就越高,因此可扩展性就越高。
NCache 更多信息 服务器端操作 流水线化 NCache
客户端缓存以提高可扩展性
关于可扩展性, 客户端缓存 证明自己是最重要的特征之一 NCache.
客户端缓存将集群缓存中最常用的数据存储在运行应用程序的同一台机器上。 在应用程序和集群缓存之间使用客户端缓存可为您提供靠近应用程序的本地缓存资源。 此缓存将处理应用程序的大部分读取请求,这不可避免地会降低 I/O 成本。 因此,您不仅可以快速访问更新的数据,而且您的应用程序也可以扩展。
如果您通过降低访问本地节点的成本从 OutProc 客户端缓存移动到 InProc 客户端缓存,则可以进一步优化此可伸缩性图表。
总结可扩展性 NCache
在充分利用您的应用程序的同时,您可能会遇到两个主要挫折。 要么缓存上的计算负载增加,要么达到数据存储的设定界限,这两者都可以通过扩展得到显着改善 NCache. 您可以完全控制 NCache 它具有丰富的功能,可随时为您的环境带来可扩展性。 那你还在等什么? 获取NC缓存!