dot Redis 8 已发布——并且是开源的

了解更多

深入了解:Redis Enterprise Flash 数据库架构

对于许多交互式应用程序来说,响应能力是吸引用户和获得流畅体验的关键。然而,RAM 很昂贵。在 Redis 中保存大量数据可能成本高昂。考虑到基础设施成本,您最终需要在以下两个选项之间做出选择;

#1: 为使用 Redis 在 RAM 中存储大量数据集支付高额费用 OR
#2: 将 Redis 数据库的使用限制在最有价值的数据上,并使用基于磁盘的关系或 NoSQL 数据库来增强 Redis。

Redis Enterprise Flash 提供了一个更好的选择 #3: Redis Enterprise Flash 技术结合了 RAM 和闪存,以更低的每 GB 成本在 Redis 中存储大型数据集。借助 Redis Enterprise Flash,您可以将 RAM 扩展到基于 NVMe 和 SATA 的 SSD 驱动器等闪存设备上,并在 Redis 中保存更大的数据集,而不会失去 Redis 的性能优势。

让我们深入研究 Redis Enterprise 架构,看看将基于闪存的 SSD 驱动器混合使用在实践中是如何工作的。

Redis Enterprise 架构概述

让我们从 Redis Enterprise 的概述开始,然后再深入研究 Flash 架构。

Redis Enterprise 集群由部署在数据中心内或跨本地可用性区域的相同节点组成。Redis 的架构由管理路径(在下图 1 中的蓝色层中描述)和数据访问路径(在下图 1 中的红色层中描述)组成。

管理路径由代理组成,该代理有助于扩展连接和集群管理器,该集群管理器负责协调集群和数据库分片的放置,以及检测和减轻故障。
数据访问路径由主和从 Redis 分片组成。客户端对主分片执行数据操作。主分片使用内存复制来维护从分片。

图 1
Redis Enterprise 节点,蓝色图块表示管理路径,红色图块表示数据访问路径,其中 Redis 作为分片。

使用复制实现高可用性: Redis Enterprise 使用内存复制来维护跨节点、机架和区域的主从副本。Redis Enterprise 配备了各种监视程序,用于检测和防止多种类型的故障。在节点、网络和进程故障导致无法访问主副本时,Redis Enterprise 会自动将从副本提升为主副本,并将客户端连接透明地重定向到新的主副本。

除了集群内复制之外,Redis Enterprise 还具有内置的基于 WAN 的复制功能,用于跨多个数据中心进行 Redis 部署。您可以在参考部分找到更多详细信息。

使用分片实现扩展和性能: 每个 Redis Enterprise 集群可以包含多个数据库。在 Redis 中,数据库表示属于单个应用程序、租户或微服务的数据。Redis Enterprise 构建为每个集群扩展到数百个数据库,以提供灵活高效的多租户模型。

每个数据库可以包含少量或多个 Redis 分片。分片对 Redis 应用程序是透明的。数据库中的主分片处理给定键子集的数据操作。每个数据库的分片数量是可配置的,并且取决于应用程序的吞吐量需求。Redis Enterprise 中的数据库可以被重新分片为更多的 Redis 分片,以扩展吞吐量,同时保持亚毫秒级的延迟。重新分片是在不停机的情况下执行的。

图 2
Redis Enterprise 将主 (M) 和从 (S) 副本放置在单独的节点、机架和区域中,并使用内存复制来保护数据免受故障影响。

在 Redis Enterprise 中,每个数据库都有一个 RAM 配额。配额不能超过节点上可用 RAM 的限制。但是,借助 Redis Enterprise Flash,RAM 可以扩展到本地闪存驱动器(SATA、NVMe SSD 等)。数据库的总配额可以利用 RAM 和闪存驱动器。管理员可以使用图 3 中看到的滑动条来选择 RAM 与 Flash 的比例。此比例可以在数据库生命周期的任何时刻更新,而不会停机。

图 3
Redis Enterprise Pack 中的“创建数据库”对话框,显示了 RAM 和 Flash 配置的视图。

Redis Enterprise Flash 架构

借助 Redis Enterprise Flash,您可以获得增强版的 Redis 作为分片。除了其他修改之外,使用此分片,不将所有键和数据存储在 RAM 中,而是将不太频繁访问的值推送到闪存。在图 4 中,您可以看到 RAM 和 Flash 组合在一起用于存储数据,显示为两种不同的灰色阴影。


图 4
Redis Enterprise Flash 分片具有进程、内存和磁盘存储组件。Redis Enterprise Flash 同时使用 RAM 和 Flash 来保存数据。RAM 存储所有键和一些值。随着 RAM 填满,不太频繁使用的值会被移动到闪存(基于 NVMe 或 SATA 的 SSD)。

如果应用程序需要访问闪存中的值,Redis Enterprise 会自动将该值提取到 RAM 中。根据所使用的闪存硬件,应用程序在将值从闪存取回 RAM 时会遇到稍高的延迟。但是,一旦该值进入 RAM,后续对同一值的访问速度会很快。

使用智能放置技术,Redis Enterprise Flash 会随着时间的推移适应工作负载的变化。Redis Enterprise Flash 具有一个后台任务,该任务会将不太频繁使用的值弹出到闪存,以便适应并为新的传入操作维护足够的可用空间。

重要的是要注意,即使值被弹出到闪存,所有键和元数据都保留在 RAM 中。键的大小通常小于值。许多 Redis 命令需要访问键,而不需要访问值。将完整的键列表保存在 RAM 中可确保可以执行许多操作,而不会因从闪存中检索值而受到任何惩罚。管理过期的后台服务,确保数据库中键的唯一性是数据库中的常见操作。由于所有键都存储在 RAM 中,因此可以轻松地检查键是否已存在,然后再插入新键或运行过期检查。

持久性: Redis Enterprise Flash 使用闪存驱动器作为 RAM 扩展。在数据库启动时,Redis Enterprise Flash 期望并确保 RAM 和闪存驱动器都完全为空。引擎启动后,RAM+闪存会从数据的持久副本(磁盘或另一个副本)中填充。使用 Redis Enterprise Flash 时,您可以使用 Redis Enterprise 的两种持久性选项中的任何一种

基于磁盘的持久性: Redis Enterprise 仍然在磁盘上维护持久副本。就像基于磁盘的系统一样,此 IO 路径放置在速度较慢且更持久的网络连接存储设备上。Redis 数据库提供了可调选项来维护此持久副本。您可以在此处阅读有关持久性选项的更多信息。
基于复制的持久性: Redis Enterprise 还维护一个副本(一个从分片)以实现持久性。基于复制的持久性可防止节点、机架或区域发生故障,并提供比网络连接存储写入更好的写入性能。这意味着,在发生计划外中断的情况下,您的副本可能比磁盘上的持久副本更新。为了充分利用复制的持久性,Redis 提供了 WAIT 命令。WAIT 确保写入可以等待确认,直到多个副本确认写入为止。这确保了在副本上使用 WAIT 确认的写入即使节点着火并且永远不会返回到集群,也将是持久的。

“缓冲区缓存”与“RAM 扩展”方法

Redis Enterprise Flash 中的智能数据放置,基于工作集将闪存中的值带入 RAM,类似于基于磁盘的数据库系统以及数据库缓冲缓存上的“缓存未命中”。但是,基于磁盘的数据库与 Redis Enterprise Flash 中使用的 RAM 扩展方法之间的相似之处到此为止。Redis Enterprise Flash 中使用的 IO 模式比基于磁盘的系统效率高得多。以下是两者之间的一些区别

热值处理: 许多应用程序工作负载在短时间内对一组“热”键执行重复写入,例如当这些键属于活跃数据时。 例如,想象一下应用程序对其数据库的重复更新,跟踪购物者在网站上查看各种产品时的当前状态。 基于磁盘的数据库在 RAM 和磁盘中执行这些写入,以每次持久化更改。 但是,在 Redis Enterprise Flash 中,对 RAM 中数据的更新不会发送到闪存。 Redis Enterprise Flash 使用的 RAM 扩展方法不需要对“热”键进行重复写入时向闪存写入任何内容,除非该值被驱逐到闪存。 请记住,活动值不会被驱逐到闪存,并且主要保留在 RAM 中,因此对活动购物者密钥的重复更新仅在 RAM 中发生,而不需要闪存写入。 这确保了闪存驱动器的 IO 带宽仅用于驱逐到闪存。
利用临时存储: 公有云或私有云中的云架构通常带有两种类型的存储,更快的临时存储和更慢的持久性网络附加存储。 基于磁盘的数据库要求每次写入都将写入持久化到磁盘。 因此,您需要使用持久性的网络附加存储。 但是,Redis Enterprise Flash 将闪存存储器视为 RAM 扩展,因此它可以充分利用本地的快速临时存储。
写放大: 基于磁盘的数据库依赖于磁盘写入来实现持久性。 在基于磁盘的数据库中,每次写入磁盘通常都是通过 redo-log (RL) 或 write-ahead-log (WAL) 完成的,然后才在存储上更新实际值。 Redis Enterprise Flash 使用 RocksDB 来管理闪存驱动器访问。 使用 Redis Enterprise Flash 调用 RocksDB 不需要维护这些额外的 WAL。 写放大测量任何单个读/写操作导致的 IO 操作次数。 由于记录的写入,基于磁盘的数据库最终会产生更高的写放大。 您可以在此处阅读有关 RocksDB 和各种 IO 放大效应的更多信息。
持久内存的硬件进展: 用于创建 Redis Enterprise Flash 的技术基于内存技术的新方向。 随着持久内存被引入到计算架构中,例如 英特尔的 3DXPoint,这些技术背后的想法是允许应用程序决定将数据的哪个部分保留在 RAM 中,以及哪个部分将使用 Flash/Nand,以便以最佳成本最大限度地提高性能。 Redis Enterprise Flash 的设计旨在利用这些优势。

开始并尝试 Redis Enterprise Flash!

在 Windows、Linux 或 Mac 机器上使用 Docker 启动 Redis Enterprise Flash 非常容易。 您可以在此处找到步骤:Redis Enterprise Flash 快速入门。

参考