dot Redis 8 已发布——且是开源版本

了解更多

什么是数据持久化?

当某个事物持久存在时,它会持续。在数据库的语境下,这意味着您希望将一条信息以某种方式(在内存中或磁盘上)保存一段时间,以便即使计算机进程被终止也能恢复。通过数据持久化,应用程序中的现有数据在会话之间保持完整,在后续应用程序会话中使用时不会遭受数据丢失。数据持久化在服务器重启时尤为重要,因为仅存储在内存中的数据在断电时就会丢失。

数据持久化选项

Redis Enterprise 是一个完全持久化的数据库,它使用 RAM 或 Redis on Flash 直接从内存中提供所有数据。关于持久化数据,Redis 仅在同一高可用性数据库中的主分片和从分片都丢失时才读取此数据。

Redis 支持仅追加文件数据持久化 (AOF) 和快照。也可以同时使用 RDB 和 AOF,这被称为“混合持久化”,以利用这两种方法的优点。下面我们将深入探讨每种 Redis 数据持久化选项,并提供更详细的解释以及它们各自优缺点的信息。

仅追加文件数据持久化,用于数据耐久性

仅追加文件 (AOF) 是一种日志记录机制,它将对 Redis 数据库执行的每次写操作写入磁盘上的日志文件。该日志文件用于在发生崩溃或故障时重建数据库。 

AOF 的工作原理是将每个数据库写操作追加到日志文件的末尾,因此得名仅追加文件。当 Redis 重启时,它读取日志文件并重新执行文件中保留的写操作,以将数据库恢复到之前的状态。 

AOF 比快照持久化选项提供了更好的数据耐久性,快照持久化仅创建时间点数据快照。 

Redis 使用多部分 AOF 机制,其中原始 AOF 分割成基础文件和增量文件。基础文件代表 AOF 写入时存在的数据的初始快照。增量文件包含自上次基础 AOF 创建以来的更改。

您可以使用称为 AOF fsync 的过程配置 AOF 在过大时在后台进行重写。fsync 配置指令控制 AOF 日志文件同步到磁盘的频率。  

最新的 AOF 机制实现减少了在 AOF 重写期间执行的内存消耗和 I/O 操作量。

快照

快照是存储在内存中的 Redis 数据的时间点副本。  快照是使用 Redis DataBase (RDB) 持久化选项创建的,该选项允许以指定的间隔将 Redis 数据库的状态保存到磁盘。拍摄 RDB 快照时,Redis 会创建一个子进程来执行快照操作,从而允许主进程继续处理请求。

快照对于创建 Redis 数据库的备份以及在 Redis 实例之间迁移数据非常有用。  它们可以使用“SAVE”或“BGSAVE”命令手动创建,或使用 Redis 配置文件中的“save”配置指令自动创建。  

重要的是要注意,虽然快照允许 Redis 中的数据持久化到磁盘,但它们不像 AOF 持久化选项那样提供相同级别的数据耐久性。  AOF 将对 Redis 数据库执行的每个写操作写入磁盘上的日志文件,该文件可用于在发生崩溃或故障时重建数据库。  

快照 vs 备份

快照和备份是为两种不同的目的而设计的。虽然快照支持数据耐久性(即当内存中没有数据集副本时自动恢复数据),但备份支持灾难恢复(即当整个集群需要从头开始重建时)。

数据可用性 vs 耐久性

数据耐久性是指数据即使在面对各种类型的故障或灾难时也能在一段时间内保持存储和可访问的能力。  另一方面,数据可用性是指用户在需要时访问和使用数据的能力。  

数据可用性涉及设计允许用户在需要时访问和使用数据的系统和流程。  这可能包括设计具有高正常运行时间和快速响应时间的系统,以及实施故障转移和负载均衡机制,以确保数据始终对用户可用,即使某些系统发生故障。

对于数据中心而言,可用性与耐久性一样重要。数据中心将通过使用冗余存储系统来支持持久化,例如存储区域网络 (SAN) 或网络附加存储 (NAS) 系统。  这些系统提供数据的多个副本,因此如果一个副本不可用,则可以访问其他副本。

有关此主题的更多信息,请参阅我们的博客 数据耐久性和可用性

临时存储 vs 持久存储

在云原生部署中,例如公共云、私有云或虚拟私有云,临时(实例)存储不能用于数据耐久性目的。 

什么是临时存储? 

临时存储,或称为易失性临时存储,一旦其对应的容器达到其生命周期结束,就会处理掉数据。 

相反,需要网络附加存储 (NAS),例如Amazon Elastic Block Store (EBS)、Microsoft Azure Disk StorageGoogle Cloud Platform Persistent Disk。这是因为,顾名思义,临时存储是短暂的!当云实例发生故障(这相对常见)时,其本地磁盘的内容也会丢失。

什么是持久存储?

持久存储,也称为非易失性存储,指任何能够在断电后仍保持数据完整和可用的存储设备。 

持久存储对于维护关键数据并使其可供以后使用非常有用。硬盘驱动器是持久存储设备的常见示例。

Redis Enterprise 集群设计用于与网络附加存储配合处理持久数据。默认情况下,集群中的每个节点都连接到网络附加存储资源,这使得集群能够抵御数据丢失事件,例如多个节点故障且 DRAM 中没有数据集副本的情况。此处展示了这种经过数据耐久性验证的架构

如上图所示,在 DRAM 中没有数据集副本的情况下,Redis Enterprise 将在连接到故障节点的网络附加设备中找到数据集的最新副本,并用它来在新云实例上填充 Redis 分片。  

数据持久化在主分片级别还是副本分片级别?

默认情况下,启用数据持久化后,Redis Enterprise 会在数据库每个分片的副本上设置数据持久化。在这种配置下,性能没有影响,因为主分片不受磁盘慢速的影响;另一方面,复制增加了可能破坏数据持久化 SLA 的延迟。因此,Redis Enterprise 允许您在主分片和副本分片上都启用数据持久化。这是一种更可靠的配置,不会违反您的数据持久化 SLA,但如果磁盘速度无法应对“写入”吞吐量,它将影响您的数据库延迟,因为 Redis 在无法提交到磁盘时会延迟其处理。如果您使用 Redis Enterprise DBaaS 部署(Cloud 或 VPC),您将自动配置为使用存储引擎和正确的分片配置来支持您的持久存储负载;在本地部署中,我们建议您咨询 Redis 解决方案架构师关于您的规模规划。此处显示了数据持久化选项

增强的存储引擎

Redis Enterprise 增强了 Redis 存储引擎,以在启用数据持久化的情况下提高 Redis 核心的吞吐量,并通过允许多个 Redis 实例在同一集群节点上运行而不影响性能,从而更好地利用集群资源

  1. 当使用 AOF 作为数据持久化机制时,仅追加文件的大小会随着每次“写入”操作而增长。然后会触发 AOF 重写过程来控制文件大小并减少从磁盘恢复的时间。默认情况下(并且可配置),开源 Redis 在 AOF 大小自上次重写操作以来翻倍时触发重写操作。在“写入”密集型场景中,重写操作会阻塞 Redis 主循环(以及在同一集群节点上运行的其他 Redis 实例)执行正在进行的磁盘请求。Redis Enterprise 使用一种贪婪的 AOF 重写算法,该算法旨在尽可能延迟 AOF 重写操作,同时不违反恢复时间的 SLA(一个可配置参数),并防止重写达到磁盘空间限制。通过对重写过程的优化使用,持久化 Redis 实例的总体吞吐量远高于非优化情况。
  2. Redis Enterprise 存储层允许多个 Redis 实例以非阻塞方式写入同一持久存储,即一个不断写入磁盘(在 AOF 重写期间)的繁忙分片不会阻止其他分片执行耐久操作。

Dell-EMC 和 Redis 进行的存储引擎基准测试表明,当使用 Redis Enterprise 增强的存储引擎和 Dell-EMC VMAX 时,Redis 性能几乎不受 AOF 每次写入操作的影响,此处显示了结果

有关此基准测试的更多信息可以在此处找到


常见问题解答

什么是持久存储? plus-white minus-white

持久存储也称为非易失性存储,是指即使在断电时也能保持数据完整和可访问的设备。

什么是临时存储? plus-white minus-white

临时存储与实例或容器直接相关联。它被称为临时存储,因为它具有短暂性,使得存储在容器中的数据在容器达到其最大生命周期时变得短暂。在重启时写入磁盘的任何数据都会丢失。

什么是非易失性存储? plus-white minus-white

它与持久存储是同义词。非易失性存储是指即使断电数据也不会丢失的存储设备。

什么是数据持久化层? plus-white minus-white

这一层包含在应用程序堆栈中,以便于检索持久存储中的数据。持久化层策略取决于所选应用程序的数据结构。例如,NoSQL 数据库需要与关系数据库不同类型的数据层实现。

为什么你应该关注数据持久化? plus-white minus-white

它使得关键数据在需要时可以随时访问,因为它的持久性与容器的生命周期或存储设备的电力供应无关。

持久数据和非持久数据有什么区别? plus-white minus-white

如果应用程序关闭,持久数据使得该数据在应用程序的后续会话中完全可用,而如果在终止过程中执行任何写入操作,非持久数据将无法检索。

数据持久化的一个例子是什么? plus-white minus-white

数据持久化极大地改变了现代数字体验。以流媒体为例。假设一位客户在密歇根州观看一个系列节目,但中途暂停去赶国际航班。预期是,即使在地球的另一端,后续会话也应该允许客户在请求时立即访问数据。可用数据即使跨越地理区域和多个会话也能实现无缝连续,这就是数据持久化的一个例子。

什么是云存储? plus-white minus-white

云存储是一种服务,它允许您将数据存储在通过互联网访问的远程服务器上,而不是存储在您的本地计算机或本地数据存储系统上。使用云存储,您可以从任何具有互联网连接的设备存储和访问您的数据。云存储服务的一些示例包括 Google Drive、Microsoft OneDrive 和 Dropbox。

想了解更多吗?

观看我们最近关于“购买 vs 构建:Redis 开源版本与 Redis Enterprise 中的灾难恢复”的技术讲座

Build vs. Buy: Disaster Recovery in Redis Open Source vs. Redis Enterprise - Tech Talk

下一节  ►  备份、恢复和集群恢复