在我们进入之前 客户端缓存,让我们缩小一点,了解一下缓存的基础知识。 在计算中,缓存是用作辅助存储的高速内存,以避免昂贵的数据传输并优化在单个服务器节点上运行的简单应用程序的性能。 但是在负载均衡的分布式系统中,单个请求由多个应用程序节点处理。 这是缓存导致性能下降的地方。
为了解决这种紧急情况,为满足每秒极端事务负载并需要高可用性和 线性可扩展性.
开发人员可以从市场上许多流行的分布式缓存选项中进行选择,例如 NCache. NCache 是一种速度极快且可线性扩展的内存分布式缓存,可缓存应用程序数据以减少昂贵的数据库访问并缩短响应时间。 但尽管如此,通过在缓存之上添加缓存仍然可以提高性能 -客户端缓存。
NCache 更多信息 .NET 中的分布式缓存 高可用 NCache
客户端缓存如何工作 NCache?
在大多数情况下,分布式缓存托管在网络上的一组专用缓存服务器上,因此您的应用程序必须进行网络访问才能获取数据。 这并不像在本地和从应用程序进程中访问数据那样快。
为了处理这个问题, NCache 提供 客户端缓存. 客户端缓存用作驻留在应用程序进程附近的临时存储,以便更轻松、更快速地获取数据。 客户端缓存将您的应用程序的性能提升到一个更高的水平,因为在同一台客户端计算机上运行的多个应用程序可以使用以下方式进行通信和共享数据 OutProc 模式. 客户端缓存使热数据集更靠近您的应用程序,即使在应用程序的进程中 InProc 模式 这带来了巨大的性能提升。
In NCache,使用客户端缓存非常简单。 应用程序端无需更改代码。 这是一个简单的配置选项。 您可以通过 NCache 网络管理员 或者 NCache- 支持的 PowerShell cmdlet. 配置客户端后,客户端应用程序将自动开始使用它。
让我们通过一个电子商务应用程序的示例来了解客户端缓存(也称为一级缓存或 L1 缓存)的工作原理。 应用程序频繁访问当前活跃用户的产品目录和数据。 这些数据可以保存在客户端缓存中,在客户端(应用程序所在的位置)上运行。 这样可以避免跨集群缓存(也称为二级缓存或 L2 缓存)的网络旅行,并且可以更快地从 L1 缓存提供数据。
现在您必须考虑如何在两个缓存之间同步数据,以便始终为应用程序提供来自 L1 缓存的更新数据。
L1 和 L2 Cache 之间的数据同步
为确保应用程序始终获取最新数据,两个后台线程在客户端缓存中运行。 在客户端缓存中运行的这两种强大的同步机制可确保应用程序始终获取最新数据,并具有更高的性能和可扩展性。 两个后台线程是:
基于通知的线程
当数据添加到 L1 Cache 时,它会立即注册数据更改通知,L2 Cache 会跟踪 L1 Cache 保存的缓存项,并在数据发生更新/删除更改时监视更改。 在修改 L2 缓存中的数据时,L1 缓存会收到更改通知,作为响应,L1 缓存会与 L2 同步。
基于轮询的线程
这是一种回退机制,仅当 L1 和 L2 缓存之间的通信由于网络故障或连接丢失而停止时才会触发。 在这种情况下,L1 Cache 等待 10 秒,然后轮询自身并请求 L2 Cache 中的数据更改。 收到更改通知后,它会与 L2 缓存同步。
要充分利用客户端缓存的好处,您可以在两种可用的进程级隔离模式中的任何一种中使用它。
客户端缓存中的隔离模式
客户端缓存 在运行应用程序的客户端节点上运行。 根据您的性能需求和应用程序架构,您可以选择客户端缓存支持的以下进程级隔离模式之一。 NCache Client Cache 存在两种模式:InProc 和 OutProc。
InProc 模式:
In InProc 模式,Client Cache 运行在应用程序进程内部,消除了进程间通信。 InProc 模式为应用程序提供了最大的性能,因为数据保持对象形式,降低了成本 序列化和反序列化.
在 InProc 模式下,其他应用程序实例之间的数据不共享,因此应用程序的每个实例都托管一个专用的客户端缓存实例,从而提高了性能。
OutProc 模式:
In OutProc 模式, Client Cache 在其客户端节点上的专用进程中运行。 应用程序和客户端缓存之间的通信通过 TCP 套接字进行。 OutProc 模式支持数据共享,因此多个应用程序实例可以与同一个客户端缓存进行通信。 它有一个主要优势,因为数据在多个应用程序之间共享,因此由一个应用程序加载或更新的数据可供其他应用程序使用。
InProc 和 OutProc 模式的性能比较:
有多个因素可以衡量 InProc 和 OutProc 模式的性能,即数据可用性、资源消耗和速度。
数据可用性: 在 OutProc 模式下,缓存重启不会导致数据丢失,从而提供数据稳定性。 而在 InProc 模式下,缓存重新启动会导致数据丢失。
资源消耗: 当内存等资源不受限制时,InProc 模式可提供最佳性能,因为每个客户端缓存实例都保存其数据副本。 与 InProc 模式相比,OutProc 模式需要更少的物理资源。
速度: Client Cache InProc 模式非常快,因为它就像堆上的一个对象,它以反序列化的方式保存东西,节省了 序列化/反序列化 您必须为任何 OutProc 或对缓存的任何远程访问执行此操作。
Client Cache 的操作流程
Client Cache 更接近应用层,Client Cache 是集群缓存的子集。 因此,所有操作都以分布式方式发生。
所有基于key的读操作都直接在L1 Cache上进行,基于key的写操作如Add、Insert、Remove等都是先在L2 Cache上进行,然后添加到L1 Cache中再返回给应用程序。
数据在返回到应用程序之前返回到 L1 Cache,以便下次请求相同的数据时直接从 L1 Cache 提供。
非基于键的读写操作仅在 L2 Cache 执行,因为 L1 Cache 保存 L2 Cache 的子集。
其他客户端缓存实例通过后台数据更新 同步机制.
客户端缓存中的同步模式:
在您的应用程序本地时,客户端缓存不是独立的。 相反,它始终与集群缓存同步。 这可确保客户端缓存中的数据永不过时。
NCache 客户端缓存提供两种模式 数据同步 在客户端缓存和集群缓存之间。 客户端缓存保存集群缓存数据的副本。 集群缓存中发生的任何更改都必须在客户端缓存中同步,因为应用程序层直接与客户端缓存通信。 数据同步的两种模式是乐观和悲观。
乐观模式 是数据同步的默认模式 NCache. 同步发生在后台,当应用程序请求数据时,它会从客户端缓存返回给应用程序。
更敏感且需要使用新数据的应用程序 悲观模式 用于数据同步。 当应用程序请求数据时,L1 Cache 与 L2 Cache 验证版本并提供更新的数据。
结论
NCache 允许您利用具有分布式缓存的客户端缓存。 使用客户端缓存最好的部分是在用户端没有编程。 这是一个简单的配置设置,并且客户端缓存会自动插入。客户端缓存在许多方面提高了执行读取多于写入的应用程序的性能。 因此,请下载完整的 60 天试用版 NCache Enterprise 并亲自尝试一下。