View a markdown version of this page

持久性选项 - 亚马逊 ElastiCache

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

持久性选项

ElastiCache for Valkey 提供了两个耐久性选项:同步和异步写入。

使用同步写入,成功的写入操作将在返回到客户端之前永久存储在 Multi-AZ 事务日志中。这会产生个位数毫秒的写入延迟,并确保在出现故障时不会丢失任何已确认的写入操作。

使用异步写入时,成功的写入操作会返回给客户端,然后才能永久存储在 Multi-AZ 事务日志中。由于写入操作无需等待持久存储在 Multi-AZ 事务日志中,因此写入操作延迟等同于 ElastiCache 没有耐久性。但是,如果失败,最多可能会丢失成功写入操作的最后 10 秒。

要了解异步写入可能造成的数据丢失,可以考虑耐久性缓冲区的概念。耐久性缓冲区代表所有已被主节点接受但尚未保存到 Multi-AZ 事务日志的写入的最大时长。主节点跟踪最早的未确认写入的年限。只要此时长保持在 10 秒以下,该节点就会继续正常接受新的写入。如果最早的未确认写入的时间超过 10 秒,则主节点将拒绝所有传入的写入命令,直到它赶上为止。在此期间,读取操作继续以微秒延迟提供。待处理的写入保留后,该节点将自动恢复接受写入。这样可以确保在发生故障时将潜在的数据丢失限制在 10 秒钟的写入时间内。

将您的客户端配置为向异步持久集群发送流量时,请确保客户端以指数回退方式自动重试任何因集群关闭错误消息而被拒绝的写入命令。有关配置客户端以处理此错误和其他暂时性错误的指南,请参阅最佳实践: Valkey/Redis OSS 客户端和亚马逊 ElastiCache

该图显示了异步耐久性缓冲区如何在五种状态下工作:写入进入缓冲区,事务日志将其保留;如果缓冲区超过 10 秒,则新的写入将被拒绝,直到日志赶上。

选择耐久性选项

当您的应用程序无法容忍故障期间的任何数据丢失时,请使用同步写入。通过同步写入,除了缓存以外,您还可以 ElastiCache 用于不可接受的数据丢失的更多用例,例如 RAG 应用程序的知识库、AI 代理内存、AI 代理工作流程状态、支付代币化、流媒体元数据、游戏玩家状态和实时库存管理。

当您的应用程序优先考虑写入性能并且可以承受故障期间可能丢失多达 10 秒的未提交数据时,请使用异步写入。此选项非常适合应用程序数据缓存、会话存储、游戏排行榜和实时分析等工作负载。

对持久集群的驱逐政策的考虑

持久集群使用与非耐用集群相同的默认参数组。此参数组设置maxmemory-policyvolatile-lru。通过此政策,亚马逊 ElastiCache 可能会驱逐在内存压力下设置了生存时间 (TTL) 的密钥。即使在耐用集群上也可能发生这种情况。

要防止使用 TTL 逐出密钥,请创建自定义参数组并将其设置为maxmemory-policynoeviction使用noeviction,当内存已满而不是移除密钥时,写入命令会返回错误。

监控BytesUsedForCacheDatabaseMemoryUsagePercentage确保您的集群有足够的内存来容纳您的工作负载。