View a markdown version of this page

集群缓存管理 - AWS 规范性指导

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

集群缓存管理

缓存是所有数据库 (DB) 最重要的功能之一,因为它有助于减少磁盘容量 I/O。最常访问的数据存储在称为缓冲区缓存的内存区域中。当查询频繁运行时,它会直接从缓存而不是磁盘检索数据。这样速度更快,可扩展性和应用程序性能也更好。您可以使用 shared_buffers 参数配置 PostgreSQL 缓存大小。有关更多信息,请参阅 Memory(PostgreSQL 文档)。

故障转移后,Amazon Aurora PostgreSQL-Compatible 版中的集群缓存管理 (CCM) 旨在提高应用程序和数据库的恢复性能。在没有 CCM 的典型失效转移情况下,您可能会看到暂时但很明显的性能下降。出现这种情况的原因是,当失效转移数据库实例启动时,缓冲区缓存是空的。空缓存也称为冷缓存。数据库实例必须从磁盘读取,这比从缓存读取要慢。

实施 CCM 时,您可以选择一个首选读取器数据库实例,CCM 会不断将其缓存内存与主(或写入器)数据库实例的缓存内存同步。如果发生失效转移,首选读取器数据库实例将提升为新的写入数据库实例。因为它已经有了一个缓存内存(称为热缓存),这就最大限度地减少了失效转移对应用程序性能的影响。

集群缓存管理的工作原理为何?

失效转移数据库实例与主写入器数据库实例位于不同的可用区。首选读取器数据库实例是优先失效转移目标,可通过为其分配 0 层优先级来指定。

注意

提升层优先级是一个值,用来指定在发生故障后将 Aurora 读取器提升为写入器数据库实例的顺序。有效值为 0-15,0 是第一优先级,15 是最后一个。有关提升层的更多信息,请参阅 Fault tolerance for an Aurora DB cluster。修改提升层不会导致中断。

CCM 会将缓存从写入器数据库实例同步到首选的读取器数据库实例。读取器数据库实例会将当前缓存的缓冲区地址集作为 bloom 筛选条件发送给写入器数据库实例。bloom 筛选条件是一种概率性、内存高效的数据结构,用于测试元素是否为集合的成员。使用 bloom 筛选条件可以防止读取器数据库实例向写入器数据库实例重复发送相同的缓冲区地址。写入器数据库实例收到 bloom 筛选条件后,会比较缓冲区缓存中的数据块,并将常用缓冲区发送给读取器数据库实例。默认情况下,如果缓冲区的使用次数大于 3,则该缓冲区被视为常用缓冲区。

下图显示了 CCM 如何将写入器数据库实例的缓冲区缓存与首选读取器数据库实例同步。

在不同可用区的 Aurora 数据库实例之间配置集群缓存管理。

有关 CCM 的更多信息,请参阅 Aurora PostgreSQL 的集群缓存管理实现故障转移后快速恢复(Aurora 文档)和 Aurora PostgreSQL 集群缓存管理简介(博客文章)。AWS 有关如何配置 CCM 的说明,请参阅 Configuring cluster cache management(Aurora 文档)。

限制

CCM 功能有以下限制:

  • 读取器数据库实例必须与写入器数据库实例具有相同的数据库实例类类型和大小,如 r5.2xlargedb.r5.xlarge

  • 作为 Aurora 全局数据库一部分的 Aurora PostgreSQL 数据库集群不支持 CCM。

集群缓存管理用例

对于某些行业来说,比如零售、银行和金融,仅几毫秒的延迟就可能导致应用程序性能问题,造成重大业务损失。因为 CCM 可将主数据库实例的缓冲区缓存与首选备份实例持续同步,来帮助恢复应用程序和数据库性能,所以它有助于防止失效转移带来的业务损失。