dot 快速的未来即将在您所在的城市举办的活动中到来。

加入我们参加 Redis 发布会

深入解析:Redis 企业版闪存数据库架构

对于许多交互式应用程序而言,响应能力是实现引人入胜和流畅体验的关键。但是,RAM 非常昂贵。在 Redis 中保存大量数据可能成本高昂。考虑到基础设施成本,您最终需要在以下两种选择之间进行选择:

#1:为使用 Redis 在 RAM 中存储相当大的数据集支付溢价,或者
#2:将 Redis 数据库的使用限制在最有价值的数据上,并使用基于磁盘的关系型数据库或 NoSQL 数据库来扩展 Redis。

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

让我们深入了解 Redis 企业版架构,以了解在实践中如何将基于闪存的 SSD 驱动器组合到其中。

Redis 企业版架构概述

在深入研究闪存架构之前,让我们先概述一下 Redis 企业版。

Redis 企业版集群由部署在数据中心内或跨本地可用区扩展的相同节点组成。Redise 架构由管理路径(在下图中以蓝色层表示)和数据访问路径(在下图中以红色层表示)组成。

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

图 1
Redis 企业版节点,蓝色瓷砖代表管理路径,红色瓷砖代表数据访问路径,其中 Redis 作为分片。

高可用性与复制:Redis 企业版使用内存中复制来维护跨节点、机架和区域扩展的主从副本。Redis 企业版附带各种监控程序,用于检测和防范许多故障类型。在节点、网络和进程故障使主副本不可访问的情况下,Redis 企业版会自动将从副本提升为主副本,并将客户端连接透明地重定向到新的主副本。

除了集群内部复制之外,Redis 企业版还为跨多个数据中心的 Redis 部署内置了基于 WAN 的复制。您可以在 参考资料 部分找到更多详细信息。

扩展和性能与分片:每个 Redis 企业版集群都可以包含多个数据库。在 Redis 中,数据库代表属于单个应用程序、租户或微服务的 data。Redis 企业版旨在扩展到每个集群数百个数据库,以提供灵活高效的多租户模型。

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

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

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

图 3
Redis 企业版包中创建数据库对话框,显示 RAM 和闪存配置视图。

Redis 企业版闪存架构

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


图 4
Redis 企业版闪存分片,具有进程、内存和磁盘存储组件。Redis 企业版闪存同时使用 RAM 和闪存来保存数据。RAM 存储所有密钥和一些值。随着 RAM 填满,使用频率较低的值将被移至闪存(NVMe 或基于 SATA 的 SSD)。

如果应用程序需要访问闪存中的值,Redis 企业版会自动将该值调入 RAM。根据使用的闪存硬件,应用程序在将值从闪存调回 RAM 时会遇到稍微更高的延迟。但是,一旦值位于 RAM 中,随后对相同值的访问速度很快。

Redis 企业版闪存使用智能放置技术来适应工作负载随时间的变化。Redis 企业版闪存有一个后台任务,该任务会将使用频率较低的值弹出到闪存中,以适应并保持适当的可用空间以用于新的传入操作。

值得注意的是,即使值被弹出到闪存,所有密钥和元数据都保留在 RAM 中。密钥通常比值小。许多 Redis 命令需要访问密钥,而不需要访问值。将完整密钥列表保留在 RAM 中可以确保许多操作可以在没有从闪存检索值的任何开销的情况下执行。管理到期的后台服务、确保数据库中密钥的唯一性是数据库中的频繁操作。由于所有密钥都存储在 RAM 中,因此在插入新密钥之前很容易检查密钥是否已存在,或者运行过期检查。

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

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

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

Redis 企业版闪存中的智能数据放置,根据工作集将值从闪存调入 RAM,类似于基于磁盘的数据库系统和数据库的“缓冲区缓存”上的“缓存未命中”。但是,基于磁盘的数据库与 Redis 企业版闪存中使用的 RAM 扩展方法之间的相似之处仅此而已。Redis 企业版闪存中使用的 IO 模式比基于磁盘的系统的 IO 模式效率高得多。以下是两者之间的一些区别

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

立即开始使用 Redis Enterprise Flash!

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

参考资料