Amazon MemoryDB 常见问题

一般性问题

Amazon MemoryDB 是与 Valkey 和 Redis OSS 兼容的持久型内存数据库服务,可提供超快性能。MemoryDB 使您在现代应用程序(例如使用微服务架构构建的应用程序)方面实现微秒级读取延迟、个位数毫秒级写入延迟、高吞吐量和多可用区持久性。这些应用程序需要低延迟、高可扩展性,并使用 Valkey 和 Redis OSS 的灵活数据结构和 API 使开发过程更加灵活、简单。MemoryDB 将您的整个数据集存储在内存中,并利用分布式事务日志来保证内存速度和数据的持久性、一致性和可恢复性。您可以将 MemoryDB 用作完全托管式主数据库,从而无需单独管理缓存、持久的数据库或所需的底层基础设施即可构建高性能应用程序。

首先,您可以使用 AWS 管理控制台、命令行界面(CLI)或软件开发工具包(SDK)创建新的 MemoryDB 集群。要在控制台中创建 MemoryDB 集群,请登录并导航到 Amazon MemoryDB。然后,选择“开始使用”,再选择“创建新集群”。 有关更详细的步骤以及如何开始使用 CLI,请查看 MemoryDB 文档

兼容,MemoryDB 与 Valkey 和 Redis OSS 兼容,并支持您熟悉的数据类型、参数和命令。这意味着您现在已经在 Valkey 和 Redis OSS 上使用的应用程序代码、客户端和工具可以与 MemoryDB 一起使用。MemoryDB 支持所有 Valkey 和 Redis OSS 数据类型,例如字符串、列表、集合、哈希、有序集合、hyperloglog、位图和流。此外,MemoryDB 还支持 200 多个 Valkey 和 Redis OSS 命令,但 Valkey 和 Redis OSS 管理员命令除外,因为 MemoryDB 会为您管理集群。

有关 MemoryDB 支持的 Redis OSS 版本的信息,请访问 MemoryDB 文档

MemoryDB 集群是为单个数据集提供服务的一个或多个节点的集合。MemoryDB 数据集分为多个分片,每个分片都有一个主节点和最多 5 个可选副本节点。主节点处理读取和写入请求,而副本仅处理读取请求。主节点可以失效转移到副本节点,将该副本提升为该分片的新主节点。有关更多信息,请访问 MemoryDB 文档

MemoryDB 是一款持久内存数据库,适用于需要超快速、与 Valkey 或 Redis OSS 兼容的主数据库的工作负载。如果您的工作负载需要一个提供超快性能(微秒级读取和个位数毫秒级写入延迟)的持久数据库,应考虑使用 MemoryDB。如果您想使用 Valkey 或 Redis OSS 数据结构和 API 以及持久的主数据库来构建应用程序,MemoryDB 也可能非常适合您的应用场景。最后,您应该考虑使用 MemoryDB 来简化应用程序架构,并使用缓存代替数据库来降低成本,从而提高耐久性和性能。

ElastiCache 是一项服务,常用于使用 Valkey、Memcached 或 Redis OSS 缓存来自其他数据库和数据存储的数据。如果您想使用现有主数据库或数据存储加速工作负载的数据访问(微秒级读取和写入性能),应考虑将 ElastiCache 用于缓存这些工作负载。如果您想使用 Valkey 或 Redis OSS 数据结构和 API 来访问存储在主数据库或数据存储中的数据,您还应该考虑在应用场景中使用 ElastiCache。

有关目前的限制和限额,请参阅 MemoryDB 文档。

性能和持久性

MemoryDB 的吞吐量和延迟因节点类型、负载大小和客户端连接数量而异。MemoryDB 可在集群分片的主节点上提供微秒级读取延迟、个位数毫秒级写入延迟和先写后读延迟。MemoryDB 每秒最多可支持 39 万个读取请求和 10 万个写入请求,而且每个节点可支持高达 1.3 GB/s 的读取吞吐量和 100 MB/s 的写入吞吐量(基于对只读和只写工作负载的内部测试)。MemoryDB 集群将数据分片到一个或多个节点,使您能够向集群添加更多分片或副本,以提高合计吞吐量。

除了在内存中存储您的整个数据集以外,MemoryDB 还利用分布式事务日志来提供数据持久性、一致性和可恢复性。通过跨多个可用区存储数据,MemoryDB 可以快速恢复和重启数据库。通过将数据存储在内存中,MemoryDB 可以提供超快的性能和高吞吐量。

MemoryDB 利用分布式事务日志来持久存储数据。通过跨多个可用区存储数据,MemoryDB 可以快速恢复和重启数据库。此外,MemoryDB 可为副本节点提供最终一致性,并在主节点上提供一致性读取。

Valkey 和 Redis OSS 包括可选的仅附加文件(AOF)功能,该功能可将数据保存在主节点磁盘上的文件中以实现持久性。但是,由于 AOF 将数据本地存储在单个可用区的主节点上,因此存在数据丢失的风险。此外,如果某个节点发生故障,副本节点也可能会出现一致性问题。

是的,MemoryDB 支持高可用性。您可以创建具有多可用区可用性的 MemoryDB 集群,不同可用区最多具有 5 个副本节点。当主节点发生故障时,MemoryDB 会自动进行失效转移,将其中一个副本节点升级为新的主节点并将写入流量定向到该副本节点。此外,MemoryDB 还会利用分布式事务日志来确保副本上的数据保持最新状态,即使在主节点发生故障时也是如此。对于计划外停机,失效转移通常在 20 秒内发生,而对于计划内停机,失效转移通常在 200 毫秒内发生。

MemoryDB 使用分布式事务日志持久存储在数据库恢复、重启、失效转移以及主节点和副本节点之间实现最终一致性期间写入数据库的数据。

Valkey 和 Redis OSS 允许在每个分片的主节点上进行写入和强一致性读取,并允许从只读副本节点进行最终一致性读取。如果主节点发生故障,这些一致性属性将无法得到保证,因为写入操作可能会在失效转移期间丢失,从而违反一致性模型。

MemoryDB 的一致性模型与 Valkey 和 Redis OSS 类似。但是,在 MemoryDB 中,数据不会在失效转移期间丢失,因此无论节点是否发生故障,客户端都可以从主节点读取写入数据。只有成功保存在多可用区事务日志中的数据才可见。副本节点最终仍保持一致,且延迟指标将发布到 Amazon CloudWatch

在适用于 Redis OSS 的 MemoryDB 7.0 版中,我们引入了增强型 I/O 多路复用,可以进一步大规模提高吞吐量和降低延迟。适用于 Valkey 的 MemoryDB 7.2 版也支持增强型 IO 多路复用。增强型 I/O 多路复用非常适合具有多个客户端连接的吞吐量受限工作负载,其优势会随工作负载并发级别扩展。例如,与适用于 Redis OSS 的 MemoryDB 6 版相比,使用 r6g.4xlarge 节点并运行 5200 个并发客户端时,吞吐量(每秒读取和写入操作数)可增加高达 46%,P99 延迟可减少高达 21%。对于这些类型的工作负载,节点的网络 I/O 处理可能成为扩展能力的限制因素。通过增强型 IO 多路复用,每个专用网络 IO 线程会将来自多个客户端的命令传送到 MemoryDB 引擎,从而利用引擎的高效批量处理命令的能力。

有关更多信息,请参阅文档

数据摄取和查询

要向 MemoryDB 集群写入数据和从中读取数据,请使用所支持的 Valkey 或 Redis OSS 客户端之一连接到集群。有关受支持的 Valkey 或 Redis OSS 客户端的列表,请参阅 Valkey 或 Redis OSS 文档。有关如何使用 Valkey 或 Redis OSS 客户端连接到 MemoryDB 集群的说明,请参阅 MemoryDB 文档。 Valkey 将与现有的 Redis OSS 客户端一起使用,因此当您从 Redis OSS 迁移到 Valkey 时,无需更换客户端。

硬件、扩展和维护

您可以创建一个最多包含 500 个节点的 MemoryDB 集群。假设您有 250 个主节点,每个主节点都有一个副本以实现高可用性(总共 500 个节点),那么将提供约 100 TB 的最大内存存储容量。

能,您可以横向和纵向调整 MemoryDB 集群的大小。您可以通过添加或移除节点来横向扩展集群。您可以选择添加分片以将数据集分布到更多分片,还可以向每个分片添加额外的副本节点以提高可用性和读取吞吐量。您还可以移除分片和副本以缩减集群。此外,您也可以通过更改节点类型来纵向扩展集群,这会更改每个节点的内存和 CPU 资源。在横向和纵向调整大小操作期间,您的集群会继续保持在线状态并处理读取和写入请求。

MemoryDB 让您可以轻松维护和更新集群,并提供两种不同的集群维护流程。首先,对于某些强制性更新,MemoryDB 会在您指定的维护时段内自动修补集群。其次,对于某些更新,MemoryDB 使用服务更新,您可以在将来的维护时段内随时或计划应用这些更新。某些服务更新会在特定日期之后自动安排在维护时段内。集群更新有助于增强集群的安全性、可靠性和运行性能,而且您的集群会继续保持在线状态并处理读取和写入请求。有关集群维护的更多信息,请参阅 MemoryDB 文档

备份和还原

能,您可以创建快照来备份 MemoryDB 集群的数据和元数据。您可以手动创建快照,也可以使用 MemoryDB 的自动快照计划程序在每天指定的时间拍摄新快照。您可以选择快照创建后最多保留 35 天,也可以选择将其保留在 MemoryDB。快照存储在 Amazon S3 中,Amazon S3 的耐久性为 99.999999999%(11 个 9)。此外,您也可以选择在删除集群时拍摄集群的最终快照。此外,您还可以将 MemoryDB 快照从服务导出到您的 Amazon S3 存储桶中。有关快照的更多信息,请参阅 MemoryDB 文档

能,您可以在创建新的 MemoryDB 集群时从快照还原 MemoryDB 集群。

能,您可以从 Valkey 或 Redis OSS RDB 文件还原 MemoryDB 集群。您可以在创建新的 MemoryDB 集群时指定要从中还原的 RDB 文件。

能,您可以将数据从 ElastiCache 迁移到 MemoryDB。首先,创建 ElastiCache 集群的快照,然后将其导出到 S3 存储桶中。接下来,创建一个新的 MemoryDB 集群并指定要从中还原的备份。MemoryDB 将使用快照中的数据和 Valkey 或 Redis OSS 元数据创建一个新集群。有关将数据从 ElastiCache 迁移到 MemoryDB 的更多信息,请参阅 MemoryDB 文档

指标

是的,MemoryDB 会为您的集群提供运行和性能指标。MemoryDB 有 30 多个 CloudWatch 指标,您可以在 MemoryDB 控制台中查看这些指标。有关 CloudWatch 指标和 MemoryDB 的更多信息,请参阅 MemoryDB 文档

安全性与合规性

是的,MemoryDB 支持对静态和传输中的数据加密。要进行静态加密,您可以使用 AWS Key Management Service 客户自主管理型密钥(CMK)或 MemoryDB 提供的密钥。使用适用于 MemoryDB 集群的 Graviton2 实例时,将使用始终开启的 256 位 DRAM 加密在内存中加密您的数据。

MemoryDB 利用访问控制列表(ACL)来控制集群的身份验证和授权。通过 ACL,您可以为同一集群中的不同用户定义不同的权限。ACL 是一个或多个用户的集合。每个用户都有一个密码和访问字符串,用于授予对命令和数据的访问权限。要了解有关 MemoryDB 中 ACL 的更多信息,请参阅 MemoryDB 文档

能,所有 MemoryDB 集群都必须在 VPC 中启动。

我们将继续支持更多的合规认证。有关合规认证情况的最新信息,请参阅此处

符合。要获取所有通过您的账户发起的 Amazon MemoryDB API 调用的历史记录,只需在 AWS 管理控制台中打开 CloudTrail 即可。有关更多信息,请访问 CloudTrail 主页。

成本优化

Amazon MemoryDB 的数据分层功能是 MemoryDB 的一个具有性价比的新选项,该功能会自动将不常访问的数据从内存移动到高性能、本地连接的固态硬盘(SSD)。数据分层有助于增加容量,简化集群管理,并提高 MemoryDB 的总拥有成本(TCO)。

当您需要一种更简单、更具成本效益的方法扩展 MemoryDB 集群的数据容量,而不影响应用程序的可用性时,则应使用数据分层。数据分层非常适合定期访问多达 20% 数据的工作负载,以及在初次需要访问频率较低的项目时能够容忍额外延迟的应用程序。与 R6g 节点(仅内存)相比,使用 R6gd 节点进行数据分层,总容量(内存+SSD)增加了近 5 倍,可以帮助您在最大利用率下实现 60% 以上的存储成本节省。假设有 500 字节的字符串值,与对内存中数据的读取请求相比,对存储在 SSD 上的数据的读取请求通常会增加 450µs 的延迟。

当可用内存容量耗尽时,数据分层通过在集群节点中使用 SSD 存储来发挥作用。使用具有 SSD 存储的集群节点时,会自动启用数据分层,并且 MemoryDB 管理数据放置,使用最近最少使用 (LRU) 策略在内存和磁盘之间以透明方式移动项目。当内存被完全消耗时,MemoryDB 会自动检测哪些项目最近使用得最少,并将其值移动到磁盘,从而优化成本。当应用程序需要从磁盘检索项目时,MemoryDB 会在处理请求之前以透明方式将其值移动至内存,对性能的影响最小。

首先,使用内存优化实例、基于 ARM 的 AWS Graviton2 处理器和 NVMe SSD (R6gd) 创建新的 MemoryDB 集群。然后,您可以通过导入快照从现有集群迁移数据。

具有数据分层的 R6gd 节点基于消耗的实例小时数计算费用。与其他 MemoryDB 节点类型类似,您还需要为使用 R6gd 时写入的数据付费。有关更多详细信息,请参阅 MemoryDB 定价页面

首先,使用内存优化实例、基于 ARM 的 AWS Graviton2 处理器和 NVMe SSD (R6gd) 创建新的 MemoryDB 集群。然后,您可以通过导入快照从现有集群迁移数据。

MemoryDB 预留节点在节点系列和 AWS 区域内提供大小灵活性。这意味着折扣后的预留节点费率将自动应用于同一节点系列中的各种大小的使用量。例如,如果您购买了 r6g.xlarge 预留节点并需要扩展到更大的节点 r6g.2xlarge,则您的预留节点折扣费率将自动应用于同一 AWS 区域中 r6g.2xlarge 节点的 50% 使用量。大小灵活性功能将减少您花在管理预留节点上的时间,而且由于不再受特定数据库节点大小的限制,因此即使您需要更改容量,也可以从折扣中获得最大收益。

MemoryDB 预留节点定价依据节点类型、付款期限(一年或三年)、付款选项(不预付、部分预付、全额预付)和 AWS 区域确定。请注意,预留节点的价格不包括数据写入或快照存储成本。有关更多详细信息,请参阅 MemoryDB 定价页面

MemoryDB 为经过内存优化的 R6g、R7g 和 R6gd(带数据分层)节点提供预留节点。