跳至主要内容

Amazon MemoryDB

Amazon MemoryDB 常见问题

一般性问题

全部打开

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

    首先,您可以使用 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 集群是为单个数据集提供服务的一个或多个节点的集合。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 多区域

全部打开

    Amazon MemoryDB 多区域是一种完全托管式主动-主动多区域数据库,让您可以构建可用性高达 99.999%、微秒级读取延迟和个位数毫秒级写入延迟的应用程序。它提供跨多个 AWS 区域的数据冗余,让您的多区域应用程序具有更高的可用性和弹性,即使一个区域的应用程序处理中断、无法连接到其 MemoryDB 端点,也不会产生影响。MemoryDB 多区域支持主动-主动复制,您可以从离客户最近的区域在本地处理读取和写入操作,读取延迟为微秒级,写入延迟为个位数毫秒级。它会在区域之间异步复制数据,数据传播过程通常不到一秒种。MemoryDB 多区域会自动解决更新冲突并纠正数据差异问题,让您可以专注于自己的应用程序。

    如果您希望构建可用性、弹性和业务连续性都更高的应用程序,则应该使用 MemoryDB 多区域。如果您希望构建和运行在世界任何地方都能快速响应的多区域应用程序,也可以使用 MemoryDB 多区域。

    当您使用 MemoryDB 多区域时,MemoryDB 会在一种被称为多区域集群的配置中跨区域集群复制数据。当数据写入多区域集群内的任何区域集群时,MemoryDB 会自动将该数据异步复制到所有其他区域集群,而不会影响应用程序的性能,这一过程通常不到一秒种。MemoryDB 多区域会自动解决更新冲突并纠正数据差异问题。冲突解决是完全托管的,并且在后台进行,不会影响应用程序的可用性。

    要开始使用 MemoryDB 多区域,您需要先使用 AWS 管理控制台、AWS SDK 或 CLI 在目标 AWS 区域之一中创建新的多区域集群或区域集群。创建第一个区域集群后,您最多可以向多区域集群额外添加四个区域。当数据写入任何区域集群时,MemoryDB 多区域将自动复制该数据到多区域集群内的所有其他区域集群,这一过程通常不到一秒种。如果您现在正在使用 MemoryDB,您可以获取集群的快照,将它用作新建多区域集群和区域集群的种子集群。  

    您可以通过在各自的 AWS 区域中创建区域集群,向 MemoryDB 多区域集群添加新的区域集群。但是,您不能将已经存在的 MemoryDB 集群添加到现有 MemoryDB 多区域集群中。您只能创建新的区域集群或从 MemoryDB 多区域集群中移除现有的区域集群。当您删除区域集群时,MemoryDB 多区域将删除该特定区域中的集群,同时保留 MemoryDB 多区域集群。之后客户可以选择在同一 MemoryDB 多区域集群中添加更多区域集群。

    MemoryDB 多区域提供最终一致性,因为它会执行异步复制,从而保持内存中的速度。对 MemoryDB 多区域的其中一个区域集群中的键所做的任何更新都会异步传播到 MemoryDB 多区域集群内的其他区域集群,这一过程通常不到一秒钟。

    MemoryDB 多区域使用无冲突复制数据类型(CRDT)来调和并发写入冲突。CRDT 是一种无需协调即可独立、并发更新的数据结构。写入-写入冲突在每个副本上独立合并,最终保持一致。

    如果某个区域遭到隔离或性能下降,MemoryDB 多区域会跟踪它已执行但尚未传播到所有区域集群的任何写入操作。当该区域恢复上线时,MemoryDB 多区域会继续将该区域的任何挂起写入操作传播到其他区域的区域集群。与此同时,它也会恢复从其他区域集群向当前恢复上线的区域的写入操作传播。无论区域被隔离多长时间,MemoryDB 多区域最终都会传播之前所有成功的写入操作。如果您的应用程序几乎同时在不同区域中更新相同的键,则可能会引起冲突。MemoryDB 多区域使用无冲突复制数据类型(CRDT)来调和并发更新。冲突解决是完全托管的,并且在后台进行,不会影响应用程序的可用性。

性能和持久性

全部打开

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

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

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

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

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

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

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

    MemoryDB 的一致性模型与 Valkey 和 Redis OSS 类似。但是,在 MemoryDB 中,数据不会在失效转移期间丢失,因此无论节点是否发生故障,客户端都可以从主节点读取写入数据。只有成功保存在多可用区事务日志中的数据才可见。副本节点最终仍保持一致,延迟指标已发布到亚马逊 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 引擎,从而利用引擎的高效批量处理命令的能力。

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

数据摄取和查询

全部打开

硬件、扩展和维护

全部打开

    您可以创建一个最多包含 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 文件。

指标

全部打开

安全性与合规性

全部打开

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

    能,所有 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 时写入的数据付费。有关更多详细信息,请参阅 M emoryDB 定价页面

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

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

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

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

向量搜索

全部打开

    在使用 MemoryDB API 构建高速人工智能和机器学习(AI/ML)应用程序时,应该使用适用于 MemoryDB 的向量搜索功能。适用于 MemoryDB 的向量搜索功能适用于峰值性能是最重要选择标准的应用场景。截至 2024 年 6 月 26 日,MemoryDB 在 AWS 上的常用向量数据库中提供极快的向量搜索性能和极高的召回率。您可以使用适用于 MemoryDB 的向量搜索功能来支持机器学习和生成式人工智能使用案例,例如检索增强生成(RAG)、异常(欺诈)检测、实时推荐引擎和文档检索。

    在配置由人工智能/机器学习驱动的应用程序以提高速度时,通过召回率来衡量结果可能会导致响应质量降低。适用于 MemoryDB 的向量搜索功能将向量存储在内存中,可提供极高的吞吐量,查询和更新响应时间仅为几毫秒,且不会影响召回率。

    通过向量搜索功能,您可以将 MemoryDB 中的向量嵌入与数据一起存储、索引、检索和搜索。首先,您可以直接通过嵌入模型(例如 Amazon Titan 嵌入)或通过 Amazon Bedrock 等托管式服务生成向量嵌入。然后,在使用 MemoryDB 数据面板 API 初始化向量索引后,将嵌入内容加载到 MemoryDB 中。MemoryDB 将向量嵌入存储为 JSON 或哈希数据类型。 

    加载后,MemoryDB 会使用您的向量嵌入生成索引。加载新数据、更新现有数据或删除数据时,MemoryDB 会在个位数毫秒内将更新流式传输到向量索引。MemoryDB 支持高效的搜索查询、预筛选和多种距离指标(余弦、点积和欧几里得)。有关如何对 MemoryDB 使用矢量搜索的更多信息,请参阅文档。

    使用适用于 MemoryDB 的向量搜索功能无需支付额外费用。访问 MemoryDB 定价页面以了解更多信息。