AlloyDB for PostgreSQL 是一项与 PostgreSQL 兼容的全托管式数据库服务,专为要求最苛刻的工作负载(包括混合事务处理和分析处理)而设计。AlloyDB 将 Google 打造的数据库引擎与基于云的多节点架构相结合,以提供企业级性能、可靠性和可用性。
AlloyDB 的工作原理
应用使用标准 PostgreSQL 协议和技术连接到 AlloyDB 实例。然后,应用使用 PostgreSQL 查询语法来处理数据库。
在底层,AlloyDB 利用基于云的组件和功能层次结构,旨在最大限度地提高数据的可用性并优化查询性能和吞吐量。借助 Google Cloud管理工具,您可以监控 AlloyDB 部署的健康状况,调整其规模和大小,以便最符合不断变化的工作负载需求。
集群
给定 Google Cloud区域内的单个 AlloyDB 部署会将其所有资源整理到一个集群中。这包括您的所有数据库、日志以及其他元数据。AlloyDB 会在单个 Virtual Private Cloud (VPC) 内部署一个集群的所有资源,利用 Google 设计并针对 AlloyDB 进行了优化的云端文件系统。
节点和实例
一个集群包含多个节点,这些节点是专门用于运行与 PostgreSQL 兼容的数据库引擎的虚拟机实例,应用会使用这些实例来查询集群的数据。AlloyDB 会将节点整理为实例,每个实例在 VPC 中都有一个专用的静态 IP 地址。在实践中,您的应用会使用 PostgreSQL 协议连接到这些 IP 地址的实例。然后,实例会将 SQL 查询传递给其节点。
AlloyDB 有两种实例:
主实例:每个集群都有一个主实例,可提供对数据的读取或写入访问点。主实例可以是高可用性 (HA) 实例或基本实例。
高可用性主实例:高可用性主实例有两个节点:一个活跃节点和一个备用节点。AlloyDB 会监控活跃节点的可用性,并在必要时自动将备用节点提升为活跃节点。
基本实例:不需要高可用性的非生产环境可以选择使用基本实例。基本实例只有一个节点,没有备用节点。如需了解详情,请参阅使用基本实例降低费用。
读取池实例:集群可以视需要包含一个或多个读取池实例,每个读取池实例包含一个或多个只读节点,整个集群范围最多不超过 20 个。AlloyDB 会自动对发送到读取池实例的所有请求进行负载均衡,并将其路由到实例的节点。
对于更简单的应用场景,集群只能有主实例,而没有读取池实例,并且应用使用主实例来执行所有查询。对于要求更高的工作,您可以向集群添加读取池实例。然后,您可以将报告或分析应用配置为向它们发送读取请求。此方法可将负载分散到多个节点,从而减少主实例的负载并提高可伸缩性。
随着应用需求的变化,您可以随时添加、移除或调整读取池实例的节点数。您还可以根据需要调整实例组成节点的内存量和 vCPU 数量,并且停机时间最短。扩缩实例不会造成数据丢失的风险,因为 AlloyDB 会将您的数据存储在集群的灵活存储层中,而不是存储在实例中。
下图展示了一个示例集群,该集群已扩容以处理要求苛刻的工作负载,其中包含多个负载均衡只读实例:
主要特性
除了前面所述的多节点架构固有的纵向和横向扩缩优势之外,AlloyDB 还在许多方面与原生 PostgreSQL 安装有所不同。以下部分将深入探讨 AlloyDB 的主要功能。
自动和自适应数据库功能
为每个 AlloyDB 节点提供支持的完全与 PostgreSQL 兼容的数据库引擎具有多项功能,可持续分析实例处理的查询的结构和频率,并使用这些信息提出架构改进建议或自动应用优化:
索引顾问可帮助您根据使用模式,发现使用新索引来优化数据库架构的机会。
列式引擎可以使用列式格式将数据存储在内存中,从而提升分析查询的速度。这样,AlloyDB 便可在需要时使用高级处理技术高效扫描大量表数据。
PostgreSQL 过时数据自动完全清理 (autovacuum) 功能的自适应变体会自动调整与完全清理 (vacuum) 相关的参数,以便最符合您的工作负载状况。
自动内存和存储空间管理系统利用 AlloyDB 运行的 Google 构建的云端环境,根据需要持续分配和释放内存和存储空间,从而使集群以最佳性能和资源效率运行。
高可用性
默认情况下,AlloyDB 集群通过其位于两个不同可用区的主实例冗余节点提供高可用性 (HA),并提供自动故障切换。
在不需要高可用性且在非生产环境中运行的集群可以视需要改为使用基本单可用区主实例。
添加包含至少两个节点的读取池实例,可进一步创建经过负载均衡的多可用区级高可用性数据访问点。 所有读取池实例都独立于主实例运行。
如需详细了解特定于区域的注意事项,请参阅地理位置和区域。
数据备份和灾难恢复
AlloyDB 具有持续备份和恢复系统,可让您根据可调整的保留期限内的任意时间点创建新集群。这使您可以在发生数据丢失事故时快速恢复。
此外,AlloyDB 还可以按需或定期创建和存储集群数据的完整备份。您可以随时从备份恢复到新的 AlloyDB 集群,该集群包含创建备份时原始集群中的所有数据。
如需了解详情,请参阅备份简介。
作为灾难恢复的进一步方法,您可以在不同的 Google Cloud区域中创建次要集群,以实现跨区域复制。AlloyDB 会将指定主集群中的数据异步流式传输到每个次要集群。在需要时,您可以将次要集群提升为包含主实例和读取池实例的功能齐全的 AlloyDB 集群。
如需了解详情,请参阅跨区域复制简介。
安全性和访问权限控制
您可以将集群配置为需要与安全的 AlloyDB Auth Proxy 建立连接,后者使用 Google Cloud Identity Access and Management (IAM) 进行访问权限控制。如需了解详情,请参阅授权。
AlloyDB 使用标准 PostgreSQL 用户角色系统进行身份验证,并引入了一些 AlloyDB 特有的额外角色。如需了解详情,请参阅管理 AlloyDB 用户角色。
加密
默认情况下,AlloyDB 会使用 Google 的加密方法来保护所有静态数据。如果您改为需要使用您提供的密钥对数据进行加密,则可以在创建集群时指定客户管理的加密密钥 (CMEK)。然后,AlloyDB 会使用 CMEK 密钥对写入该集群的所有数据进行加密。
CMEK 也适用于备份。您可以在创建按需备份、配置备份时间表或从备份恢复时指定 CMEK 密钥。
如需了解详情,请参阅 CMEK 简介。
非中断性维护
AlloyDB 维护操作旨在最大限度地减少对数据库造成的中断。主实例和辅助实例的停机时间不到一秒,而读取池保持持续可用且不会造成停机。为此,需要准备替换服务器,并在准备就绪后快速将其与活跃服务器交换。在此过程中,系统会暂时断开与数据库的所有活跃连接。在此过程中,您可以继续正常使用数据库。
虽然此替换过程可确保最短停机时间,但整个操作可能需要几分钟时间,如 Google Cloud 控制台和 Google Cloud CLI 中所示。
这些维护操作包括 Google 运行的定期维护任务,以及您手动执行的任务,例如标志配置和实例调整大小。如果您想立即应用任何更新(即使这意味着停机时间更长),请使用 FORCE_APPLY
数据库标志。
扩展程序支持
AlloyDB 支持许多常用的 PostgreSQL 扩展程序。如需查看完整列表,请参阅支持的数据库扩展程序。
自托管替代方案:AlloyDB Omni
除了在 Google Cloud中运行 AlloyDB 之外,Google 还提供了 AlloyDB Omni。借助这种可下载的简化版本的 AlloyDB,您可以在自己的基于 Linux 的计算环境(无论位于何处)中运行其强大的数据库引擎。
如需了解详情,请参阅 AlloyDB Omni 简介。