Memorystore for Valkey 常见问题解答

在本页中,您可以找到有关使用 Memorystore for Valkey 的以下常见问题解答 (FAQ):

我们建议您使用多少内存和 CPU?

我们建议内存用量不要超过 80%,还建议您以 60% 的平均 CPU 利用率运行。这样一来,您就可以承受单个可用区丢失的情况,这大约相当于总容量的三分之一。在此方案中,剩余节点的平均 CPU 利用率约为 90%。

如何监控 CPU 和内存用量?

如需监控主 Memorystore for Valkey 节点及其任何读取副本的 CPU 用量,请使用 /instance/cpu/maximum_utilization 指标。此指标用于衡量实例中所有节点的最大 CPU 利用率,范围为 0.0 (0%) 到 1.0 (100%)。如需了解详情,请参阅 CPU 使用最佳实践

如需监控主 Memorystore for Valkey 节点及其读取副本使用的内存,请使用 /instance/node/memory/utilization 指标。此指标用于衡量实例中单个节点的内存利用率,范围为 0.0(0%)到 1.0(100%)。

如何设置提醒来监控 CPU 和内存用量?

如需为 CPU 和内存用量设置监控提醒,请使用 Cloud Monitoring。例如,您可以设置提醒,以便在 /instance/memory/maximum_utilization 指标超出您设置的阈值时收到通知。如需了解详情,请参阅设置内存用量监控提醒

建议您保持客户端应用中的多少个连接处于打开状态?

建议您使用客户端的基准来确定最佳设置。每个客户端的建议起点是每个 Valkey 节点一个连接。如需了解详情,请参阅避免 Valkey 上的连接过载

我们还建议您为客户端启用流水线,以便客户端可以处理更多请求并更快地处理这些请求。

如何监控实例的客户端连接数?

如需监控您使用的客户端连接数,请使用 /instance/node/clients/connected_clients 指标。此指标衡量的是连接到实例中每个节点的客户端数量。

如果客户端连接过多,该怎么办?

您可以使用 /instance/clients/maximum_connected_clients 指标找到客户端连接的最大数量,该数量必须小于与 maxclients 参数关联的值。如果这两个值相等,请执行以下操作:

假设您即将举办的活动会为您的商家带来流量高峰,您会怎么做?

您可以配置 Memorystore for Valkey 以满足您的业务需求。在这种情况下,您可以通过以下方式增加实例的容量:

  • 您可以向实例添加分片。这样,实例就可以使用更多 CPU 来处理大量数据或流量。实例的容量由实例中的分片数量决定。通过添加分片,应用可以应对不断增长的需求,而不会降低性能。
  • 您可以将节点类型更改为更大的节点类型。这样可以为实例提供更多内存。实例的容量由实例的节点类型决定。例如,您可以将节点类型从 standard-small 节点类型更改为 highmem-medium 节点类型。

建议您在活动开始前几天增加实例的容量。此外,为帮助您伸缩实例的容量,并提高伸缩实例的速度和可靠性,请在流量较低的时段伸缩实例。如需了解如何监控实例流量,请参阅监控实例

您如何保护自己的数据?

为确保数据安全,Memorystore for Valkey 为您提供以下机制:

  • 身份和访问权限管理 (IAM) 身份验证:使用 IAM 帮助您管理用户和服务账号的登录访问权限。基于 IAM 的身份验证与 Valkey AUTH 集成,让您无需依赖静态密码即可无缝轮替凭据 (IAM 令牌)。
  • 传输加密:使用传输层安全协议 (TLS) 加密所有 Valkey 流量。启用传输加密后,Valkey 客户端通过安全连接进行通信。未配置为使用 TLS 的 Valkey 客户端会被屏蔽。

客户端代码方面的最佳实践有哪些?

为了以最佳方式使用客户端代码搭配 Memorystore for Valkey,我们建议您遵循以下最佳实践:

  • 如需将应用连接到 Memorystore for Valkey 中已启用集群模式的实例,请使用我们推荐的客户端,例如 valkey-goiovalkeyvalkey-pyValkey GLIDE

    如果您使用其他客户端,请确保使用可感知集群的 Valkey 客户端,该客户端会维护实例中哈希槽到相应节点的映射。这样一来,请求就可以发送到正确的节点。这样可以避免重定向造成的性能开销。如需了解详情,请参阅 Valkey 客户端最佳实践

  • 我们建议您将连接超时时间间隔设置为 5 秒,并将请求超时时间间隔设置为 10 秒。如果您将超时时间间隔设置为更短的时间,Memorystore for Valkey 可能会遇到重新连接风暴,从而使服务面临风险。

  • 当客户端定期重试失败的请求,且各次请求之间的延迟时间不断增加时,请使用指数退避算法作为网络应用的标准错误处理策略。

  • 使用我们的客户端库代码示例。例如,valkey-go 客户端的默认值符合我们的所有建议,因此您无需为此客户端配置任何内容。

您有哪些数据恢复选项?

Memorystore for Valkey 提供以下数据恢复能力功能:

  • 高可用性:Memorystore for Valkey 在副本节点中提供冗余容量。如果发生故障,Memorystore for Valkey 可以使用此容量来运行,而不会出现任何停机时间。

  • 持久性:当环境意外崩溃时,Memorystore for Valkey 会自动恢复环境。这称为持久性

    Memorystore for Valkey 提供以下类型的持久性:

    • Redis 数据库 (RDB) 持久性:通过将数据快照保存到持久性存储空间来保护数据。您可以选择快照时间间隔来确定这些快照的频率。 如果发生节点故障,即使无法进行故障切换,您也可以恢复数据。

    • 仅附加文件 (AOF) 持久性:如果您想优先考虑数据持久性,请使用此类型的持久性。AOF 持久性通过将每个写入命令记录到名为 AOF 文件的日志文件中,持久地存储数据。如果发生系统故障或重启,服务器会按顺序重放 AOF 文件命令,以恢复您的数据。

  • 备份:手动将 Memorystore for Valkey 实例恢复到特定时间点。此外,您还可以使用备份来导出和分析数据。

    备份在以下情况下非常有用:

    • 灾难恢复:将备份用作灾难恢复计划的一部分。如果发生灾难,您可以将数据恢复到新的 Memorystore for Valkey 实例。
    • 数据迁移:在不同的 Memorystore for Valkey 实例之间迁移数据。您可以整合数据或将其迁移到其他区域。您还可以从 Memorystore for Valkey 实例恢复备份。
    • 共享数据:在不同团队或应用之间共享数据。这样一来,您就可以进行协作、离线数据分析和数据交换。
    • 合规性:定期备份缓存数据,以确保合规性。
    • 安排备份:除了创建按需备份之外,您还可以为实例配置备份时间表。这样一来,Memorystore for Valkey 会定期为该实例启动备份。
  • 跨区域复制:从主实例创建辅助实例,以使您的实例可在不同区域中用于读取。如果发生区域性服务中断,辅助实例还可为灾难恢复方案提供冗余。

    Memorystore for Valkey 上的跨区域复制可为您带来以下好处:

    • 灾难恢复:如果主实例的区域变得不可用,您可以分离或切换到另一个区域中的辅助实例,以处理读取和写入请求。辅助实例在不发出切换或分离命令的情况下处理读取请求。
    • 按地理位置分布的数据:按地理位置分布数据可让数据更靠近您,并缩短读取延迟时间。
    • 读取流量的地理位置负载均衡:如果一个区域中的连接速度较慢或过载,您可以将流量路由到另一个区域。

如何让实例发挥最佳性能?

如需优化 Memorystore for Valkey 实例的性能,请执行以下操作:

  • 请遵循内存管理CPU 使用方面的最佳实践,因为这些实践可让您的实例获得最佳性能。
  • 使用审核日志监控实例的访问情况。这样一来,您就可以确定实例的管理员活动(Admin Activity 审核日志)或访问实例数据的用户(Data Access 审核日志)是否存在任何问题。
  • 使用只读副本。在 Memorystore for Valkey 中,复制是异步的。因此,主节点中的数据不会立即显示在副本中。如果您可以处理略微过时的数据,请使用只读副本。这可大幅提高读取吞吐量并缩短延迟时间。
  • 避免使用资源密集型 Valkey 命令。使用这些命令可能会导致以下性能问题:

    • 延迟时间较长和客户端超时
    • 因增加内存用量的命令而导致的内存压力
    • 节点复制和同步期间出现数据丢失,因为 Valkey 主线程被阻塞
    • 资源不足的健康检查、可观测性和复制

    请改用更节省资源的命令,而不要使用这些命令。例如,如需扫描整个键空间,请使用 SCAN,而不要使用 KEYS 命令。

    如需详细了解消耗大量资源的 Valkey 命令及其节省资源的替代方案,请参阅消耗大量资源的 Valkey 命令

  • 如果您的业务需求允许您为数据设置过期时间,我们建议您这样做。设置过期时间可以减少内存消耗。

  • 将 Memorystore for Valkey 实例的版本升级到最新实例版本。较新的软件版本在可靠性和性能方面有所改进。

  • 修改 maxmemory-policy 参数的值。此参数用于指定当实例数据达到 maxmemory 限制时 Valkey 遵循的行为。

    当实例内存已满且有新的写入时,Valkey 会根据实例的maxmemory政策逐出键,为写入腾出空间。如果将
    maxmemory-policy 参数的值设置为 noeviction,则当实例达到最大内存时,Memorystore for Valkey 会返回错误。不过,Memorystore for Valkey 不会覆盖或逐出数据。如需提高实例的可用性,请更改 maxmemory-policy 参数的值,以便 Memorystore for Valkey 可以逐出键。

    如需详细了解可为 maxmemory-policy 参数设置的不同值,请参阅 maxmemory 政策。如需详细了解如何更新此参数,请参阅更新配置参数

  • 调整 Memorystore for Valkey 实例,使其达到所需的缓存命中率。这有助于您确定合适的数据库大小,以便数据库能够处理适当百分比的命中次数。

    如需调整实例,请执行以下操作:

    1. 使用 total_keyspace_hits_counttotal_keyspace_misses_count 监控指标可分别确定实例的键查找成功总次数和键查找失败总次数。
    2. 将命中总数除以命中和未命中总数
      (即命中数/ [命中数 + 未命中数])。所得的商即为命中率。
    3. 如需调整实例以获得适合您的命中率,请扩缩实例。您可以增加或减少分片数量,也可以升级或降级节点类型。如需了解详情,请参阅实例容量伸缩简介

    提高命中率有助于缩短系统延迟时间并提高吞吐量。找到适合您在效果、伸缩和费用目标方面的平衡点。

  • 默认情况下,我们建议您针对实例运行性能基准测试,以确定增加连接数是否可以提高性能,而不会导致连接饱和。建议的起点是将客户端配置为针对每个 Valkey 节点打开一个连接。

  • 为您的客户启用流水线,以便客户可以处理更多请求并更快地处理这些请求。如需配置流水线,请使用客户端库。如需了解详情,请参阅与此库关联的文档。

如何优化实例的高可用性?

我们建议您创建高可用性的多可用区实例,而不是单可用区实例,因为前者可提供更高的可靠性。

如果您创建的是高可用性实例,我们建议您使用 /instance/node/replication/offset 指标。通过使用此指标,您可以监控实例中单个节点的复制偏移量(以字节为单位)。复制偏移量是指 Memorystore for Valkey 尚未在主节点和只读副本之间复制的字节数。