• Facebook
  • Twitter(现为X)
  • Youtube
  • 内衬
  • RSS
  • 文档
  • 比较
  • 博客
  • 下载
  • 联系我们
下载
显示/隐藏目录

直写式和后写式缓存概述

直写式和后写式是两种常用的缓存策略。 NCache 为了保持缓存数据与数据源的一致性,它们提供了内置机制,可以自动将分布式缓存与底层数据源同步,使应用程序能够根据工作负载需求,在同步一致性或高性能异步更新之间进行选择。

NCache 支持直写式缓存,允许通过缓存直接对数据源执行写入操作。这样,您可以同步缓存和数据源。在直写式缓存中, NCache 首先更新缓存存储,然后将该操作应用于数据源。例如,如果客户端应用程序更新了缓存中的某个条目,那么 NCache 同时还会更新数据源(如果启用了直写功能)。

要在应用程序中使用直写式缓存,您需要首先实现以下功能: IWriteThruProvider 界面。 NCache 内部将使用此自定义提供程序对数据源执行写入操作。 NCache 将在写入操作(添加、插入、删除)API 调用后调用您的提供商,并启用直写功能。

目前 NCache 提供两种直写式缓存模式,如下所示:

  1. 直写 (同步更新数据源)
  2. 后写 (异步更新数据源)
注意:

NCache 提供性能计数器 Write-thru/sec 用于直写操作。

什么是直写式缓存

在直写缓存中,操作首先应用于缓存存储,然后同步更新到配置的数据源。使用直写缓存,操作将在以下情况下完成: NCache 将该操作应用于数据源。如果即时数据源更新至关重要,并且您需要在缓存更新后立即更新数据源,则可以使用直写缓存。

什么是写后缓存

在直写模式下,由于数据源上的操作是同步的,因此操作速率将与用户对缓存的操作速率相同。对于用户流量较大的应用程序,用户对缓存的操作速率可能会非常高,这可能会使数据源不堪重负。此外,同步数据源操作可能会影响用户操作的响应时间。

为了克服这些问题,可以使用 Write-behind 代替 Write-through。在 Write-behind 中,数据源操作在 NCache 对缓存存储执行操作。更新缓存存储后,这些操作将排队等待,然后异步应用于已配置的数据源。因此,使用后写式缓存技术可以提高缓存操作的响应时间。

NCache 在 Write-behind 中提供了不同的配置设置来控制数据源上的操作流。例如,您可以指定 NCache 将通过Throttling对数据源应用Write-behind操作。

节流如何控制写入后性能

指示每秒应用于数据源的操作数。 节流的默认值为 500 ops/sec。 您可以通过 NCache 管理中心.

注意:

NCache 提供性能计数器 Write-behind/sec 用于后写操作。

后写模式

NCache 允许您单独或批量应用 Write-behind 操作。Write-behind 操作会维护一个 Write-behind 队列。所有 Write-behind 操作都将在此队列中排队,然后根据配置的批处理或非批处理模式应用于已配置的数据源,如下所述。

非批处理模式

默认情况下,Write-behind 操作将配置为非批处理模式。在此模式下,Write-behind 队列中的操作将根据配置的节流率逐一应用于数据源。例如,如果节流率为每秒 500 次操作, NCache 将每次将一个后写操作应用于数据源,并且每秒不会超过 500 个操作。

批处理模式

在批处理模式下,根据操作选择批处理/批量操作 operation delay. 你可以配置 operation delay 对于 Write-behind 操作,表示每个操作在应用于数据源之前必须在 Write-behind 队列中等待的时间(以毫秒为单位)。默认情况下,其值为零。

批处理间隔是可配置的间隔,根据该间隔 NCache 定期检查 Write-behind 队列中是否存在操作延迟超时操作。例如,如果操作延迟配置为 1000 毫秒,批处理间隔配置为 5 秒, NCache 每 5 秒检查一次 Write-behind 队列中的操作,并选择所有已超过操作延迟的操作(所有在队列中等待最后 1000 毫秒的操作)。

批量选择操作后,将根据配置的节流率将其应用于数据源。假设从 Write-behind 队列中选择了 1000 个操作,然后以 500 个操作为一批将其应用于数据源(如果节流率为 500 ops/sec),因为每秒应用于数据源的最大操作不能超过配置的节流值。

您可以指定从几秒到几天和几个月的操作延迟时间。 通过这种方式,您可以在可配置的时间内暂停对数据源的操作。 NCache 还提供了 Write-behind 队列、操作计数和当前批处理操作计数的性能计数器。对于 Write-behind,如果启用了批处理,则已准备好在数据源上执行的操作将从 Write-behind 队列中出队。

注意:

当前批处理间隔中出列的操作数将由 当前批处理操作计数计数器.

热应用支持

NCache 支持热应用的 Write-behind 设置,允许您在运行时更改 Write-behind 配置,而无需停止缓存。您可以通过 NCache 管理中心及 NCache 将动态合并这些更改。

在热应用支持中,你可以将 Write-behind 模式从批处理更改为非批处理,反之亦然。例如,如果你已将批处理模式更改为非批处理,那么 NCache 将忽略操作延迟值,并逐个执行操作。此外,您可以根据需要在运行时更改节流率;类似地,操作延迟、批处理间隔、失败操作队列限制和失败操作驱逐率也可以在运行时更改。

警告

你只能增加失败操作队列限制的值;否则, NCache 将使用其默认值进行进一步的操作。

集群环境中的后写

由于为 Write-behind 操作维护了一个 Write-behind 队列,因此有一个单独的专用线程监视器执行其操作。Write-behind 的拓扑级别详细信息如下:

  • 复制拓扑: 所有节点上都维护有 Write-behind 队列,但 Write-behind 异步处理器仅存在于协调器节点上。这意味着所有 Write-behind 操作都通过此节点执行,并复制到集群范围内的其他节点队列。这样,如果某个节点发生故障,则下一个协调器节点将执行所有剩余的 Write-behind 操作。

  • 分区副本拓扑: 每个活动节点上都维护有 Write-behind 队列,并将其复制到相应的副本。每个节点负责其对数据源的 Write-behind 操作。

  • 分区拓扑: 每个分区上都维护一个后写队列,每个节点负责其对数据源的后写操作。

缓存操作结果

NCache 为您提供了根据操作结果在缓存中同步写入操作的灵活性。在数据源上应用操作(添加/插入)后,您可以根据以下条件指定操作状态: NCache 将同步缓存存储。 例如,在数据源操作失败的情况下,您可以决定从缓存中删除或保留该数据。 您还可以在数据源上重试该操作。 为此,您必须指定 Success/Failure/FailureRetry/FailureDontRemove as OperationResult.Status of OperationResult. 这在 Write-through 和 Write-behind 缓存中均有提供。

数据源运行状态及其对应的动作由 NCache 描述如下:

  • 成功:这表示数据源操作成功,项目已添加到数据源中,所以 NCache 也会将其保存在缓存中。

  • 失败: 这表示数据源操作失败,无法将项目添加到数据源,所以 NCache 也会将其从缓存中删除。

  • 失败不要删除:这表示数据源操作失败,无法将项目添加到数据源,但是 NCache 会将其保存在缓存中。

  • 失败重试:这表示数据源操作失败,无法将项目添加到数据源,所以 NCache 将该项目保留在缓存中并重试。重试将作为后写操作完成。

重试失败的操作

NCache 允许您在数据源上失败时重试直写/后写操作。为此,如果您启用操作重试,则 NCache 将在数据源上重试该操作。如果是 Write-through 或 Write-behind,所有重试操作都将重新排队到 Write-behind 队列,这意味着 Write-through 重试操作将作为 Write-behind 操作异步重试。

注意:

NCache 还提供了一个性能计数器 Datasource failed operations/sec. 对返回的数据源执行的写操作 Failure/FailureRetry/FailureDontRemove as OperationResult.Status of OperationResult 此计数器每秒计数。

NCache 允许您限制失败操作的重试次数。在这种情况下,您可以通过以下方式指定失败操作队列限制: NCache 管理中心,如果超出该限制,您可以通过可配置的驱逐率驱逐失败的操作。在这里, NCache 当重试队列已满时,将驱逐大多数重试操作。 每个操作都有一个 RetryCount 与其关联的属性,该属性在数据源上重试每次操作时都会增加。

为了这, NCache 提供了一个性能计数器 Write-behind failure retry count 和 Write-behind evictions/sec。 该 Write-behind failure retry count 显示重新排队重试的操作数。 数据源写操作返回 FailureRetry as Status in OperationResult 将重新排队重试。 然而, Write-behind evictions/sec 计数器显示每秒驱逐的重试操作数。

数据源操作后更新缓存

如前所述,在直写缓存中,操作首先在缓存存储上执行,然后对数据源执行。可能存在这样的情况:在对数据源执行操作后,数据会被修改,例如,在标识列的情况下,其值可能会被数据源操作修改。在这种情况下,缓存和数据源中的数据可能会变得不一致。为了处理这个问题, NCache 允许您指定是否在数据源操作后更新缓存中的数据。 您可以启用 UpdateInNCache 标志在缓存存储上再次执行操作(添加/插入),使其与数据源同步,从而通过 Write-through 缓存同步更新缓存存储中的操作或通过 Write-behind 缓存异步更新缓存存储中的操作。

注意:

NCache 还提供了一个性能计数器 Datasource updates/sec 显示数据源写入操作后缓存中每秒更新操作的数量。

在本节中

配置直写提供程序
解释了直写式提供程序接口,并提供了该接口的示例实现。

使用直写式
提供使用 Write-through 进行基本操作的示例 NCache.

使用后写
提供使用 Write-behind 进行基本操作的示例 NCache.

联系我们

联系电话

+1 214-619-2601   (美国)

+44 20 7993 8327   (英国)

 
邮箱地址

sales@alachisoft.com

support@alachisoft.com

NCache
  • 版本比较
  • NCache 卓越
  • 基准
下载
定价
尝试游乐场

部署
  • 云(SaaS 和软件)
  • 内部部署
  • Kubernetes
  • Docker
技术用例
  • ASP.NET 会话
  • ASP.NET Core 会话
  • 发布/订阅消息
  • 实时 ASP.NET SignalR
  • 物联网(IOT)
  • NoSQL 数据库
  • 流处理
  • 微服务
相关资源
  • 杂志文章
  • 第三方文章
  • 专题文章
  • 视频
  • 白皮书
  • 作品
  • 会谈
  • 博客
  • 文档
客户案例研究
  • 评价
  • 客户
支持
  • 安排演示
  • 论坛(谷歌组)
  • 小技巧
关于我们
  • 领导团队
  • 合作伙伴
  • 新闻
  • 活动
  • 加入我们
联系我们

  • 英语简体中文法语版德语版意大利语版日语版韩语版葡萄牙语西班牙语

  • 联系我们
  •  
  • 网站地图
  •  
  • 使用条款
  •  
  • 隐私政策
©版权所有 Alachisoft 2002 - 版权所有。 NCache 是 Diyatech Corp. 的注册商标。
Back to top