在Google Cloud上选择PostgreSQL数据库,企业经常会遇到一个看似简单、实际非常容易选错的问题:究竟应该使用Cloud SQL for PostgreSQL,还是进一步采用AlloyDB for PostgreSQL?两者都以PostgreSQL生态为基础,也都属于Google Cloud托管数据库,但产品定位和底层架构并不相同。真正的区别并不是“一个快、一个慢”,而是企业到底需要传统托管PostgreSQL的便利性,还是需要面向高性能事务负载设计的数据库平台。
Cloud SQL for PostgreSQL更接近大家熟悉的托管PostgreSQL。Google负责底层基础设施、数据库安装、备份、补丁、可用性等大量运维工作,企业仍然以一个PostgreSQL实例为主要数据库运行环境。Cloud SQL支持多种机器系列和规格,目前Enterprise Plus版本最高可以配置128 vCPU和864GB内存,Enterprise版本也可以达到96 vCPU和624GB内存,因此过去常见的“Cloud SQL最多16核64GB”已经属于明显过时的信息。
AlloyDB则从一开始就不是简单地把一台PostgreSQL服务器搬到云端。Google为它设计了独立的计算和存储架构,集群由cluster、instance和node组成,数据存储采用云原生分布式存储,并跨多个可用区保持持久化。计算资源与存储体系的设计,使AlloyDB能够针对高吞吐量事务负载以及混合事务分析处理场景进行进一步优化。
因此,把AlloyDB描述成“自动分片的PostgreSQL”并不准确。它确实采用分布式存储和多节点架构,但企业通常并不是通过把一个普通PostgreSQL数据库自动切成数百个分片来获得性能。AlloyDB当前更重要的扩展方式之一,是通过read pool增加读取能力。Google目前支持在autoscaling read pool中部署最多20个read replicas,并由系统进行负载均衡。
AlloyDB还有一个Cloud SQL没有完全对应物的特点,就是针对分析型查询优化的Columnar Engine。它可以将选定的表和物化视图数据以列式方式组织,并使用columnar query planner和execution engine加速扫描、连接和聚合。对于同时存在OLTP和分析查询的业务,这种能力尤其值得测试,因为它解决的并不是简单的“CPU不够快”,而是数据访问方式本身的问题。
这也意味着,企业不能看到“Columnar Engine”几个字就认为所有SQL查询都会突然变快。官方文档明确指出,只有符合相应访问模式的数据和查询才能从列式引擎中获得明显收益。最终性能仍然取决于表结构、索引、查询计划、数据分布、工作集大小以及具体SQL。数据库选型最可靠的办法仍然是使用真实业务SQL进行负载测试,而不是比较产品宣传页上的理论指标。
兼容性方面,两者都属于PostgreSQL生态,但企业仍然应该进行实际迁移测试。AlloyDB官方强调其PostgreSQL兼容性,并持续跟进新的PostgreSQL主要版本;不过AlloyDB同时拥有自己的扩展和数据库特性,例如google_columnar_engine、alloydb_scann和google_db_advisor等。Cloud SQL也不是允许用户随意安装所有社区扩展,而是只能使用Google支持的扩展。
对于已经运行多年的PostgreSQL系统,这一点非常重要。企业真正需要检查的并不是“我的应用使用的是PostgreSQL,所以肯定兼容”,而是具体检查extension、PostgreSQL major version、database flags、存储过程、驱动程序、连接池、备份方式以及监控工具。如果业务依赖某个特殊扩展,应该先做兼容性验证,再决定迁移。
高可用方面,两种产品也都不是简单的“一个有HA,一个没有HA”。Cloud SQL PostgreSQL可以配置regional HA,在同一区域的不同可用区之间提供主实例和备用实例,并使用同步复制保证提交数据同时写入相应的持久化存储。Google文档指出,发生故障切换时通常会有大约60秒的不可用时间,具体时间取决于环境。
Cloud SQL同样支持cross-region read replica。它可以把副本放到另外一个Google Cloud区域,并在区域故障时提升副本成为新的独立实例,用于灾难恢复。需要注意的是,跨区域复制采用异步机制,因此主区域发生严重故障时,副本可能存在复制延迟,也就是说RPO并不一定为零。
AlloyDB在区域级灾难恢复方面提供了另一套架构。它可以在不同区域建立secondary cluster,持续从primary region进行复制,并支持自动故障转移。Google目前还宣称其区域副本针对高吞吐事务工作负载可以提供明显低于传统PostgreSQL的复制延迟。
但这里不能简单得出“AlloyDB适合金融级数据同步”的结论。金融系统真正关心的是RPO、RTO、事务语义、故障模式、审计、备份恢复验证以及应用层幂等设计。数据库具备跨区域复制,只说明它提供了实现这些目标的基础能力,并不意味着部署完成后就自动达到某种所谓的“金融级”。
Cloud SQL目前还分为Enterprise和Enterprise Plus两个版本,两者的性能、可用性和高级功能存在明显区别。例如Enterprise Plus目前提供99.99%的可用性SLA,而Enterprise为99.95%;Enterprise Plus还提供read pools、advanced disaster recovery、managed connection pooling以及更长的PITR日志保留等功能。
因此,过去把Cloud SQL简单理解为“小型数据库”,把AlloyDB理解为“大型数据库”,已经不够准确。一个配置合理的Cloud SQL Enterprise Plus实例同样可以拥有128 vCPU和864GB内存,并支持高可用、读副本和跨区域灾难恢复。对于很多企业应用来说,单实例纵向扩展加read replica已经足够,根本没有必要因为“数据库规模很大”几个字就直接跳到AlloyDB。
AlloyDB真正有吸引力的地方,是当数据库本身已经成为系统性能瓶颈,而且瓶颈不仅仅来自CPU数量。例如一个高并发OLTP系统同时存在大量复杂查询、分析查询或者向量检索需求时,AlloyDB提供的分布式存储、read pool、Columnar Engine以及相关数据库优化能力,就可能产生明显价值。Google还提供alloydb_scann以及针对向量检索优化的能力,使它能够覆盖一部分现代AI应用数据库场景。
Cloud SQL则更适合那些希望继续按照传统PostgreSQL思路建设系统的企业。企业可以使用熟悉的SQL、驱动程序、监控工具和数据库管理方式,同时把服务器、备份、高可用基础设施等工作交给Google Cloud。对于ERP、SaaS后台、网站数据库、企业管理系统以及大量中等规模OLTP应用,这种模式往往已经能够满足需求。
数据库选型时,最容易犯的错误就是先决定产品,再寻找理由。更合理的方式是先记录真实业务负载,包括峰值QPS、读写比例、最大连接数、单表规模、数据库增长速度、最复杂SQL、P95和P99延迟、批处理时间以及灾难恢复目标,然后分别在Cloud SQL和AlloyDB上建立PoC。特别是需要分析型查询的系统,应该把真实SQL放进去测试,而不是只跑简单的TPC类查询。
还需要把迁移成本计算进去。一个企业如果已经有成熟的Cloud SQL PostgreSQL环境,数据库本身运行稳定,那么仅仅为了追求理论上的更高性能而迁移到AlloyDB,并不一定划算。迁移还涉及连接池、监控、备份恢复、扩展、参数、部署自动化和故障演练。反过来,如果Cloud SQL已经长期处于CPU、I/O、连接数或复杂查询瓶颈,而且经过SQL优化、索引调整和实例升级仍然无法满足SLO,那么继续堆硬件也可能只是把问题推迟,而不是解决问题。
最终,AlloyDB和Cloud SQL PostgreSQL并不存在适用于所有企业的固定答案。Cloud SQL的价值在于成熟的托管PostgreSQL体验、较广泛的配置选择和清晰的运维模型;AlloyDB的价值则在于针对高性能事务和混合事务分析工作负载提供更加专门化的架构与数据库能力。企业真正应该比较的不是“谁的宣传性能数字更高”,而是自己的业务SQL、数据增长速度、可用性目标、扩展方式、扩展依赖以及长期运维成本。对于数据库这种一旦上线就很难轻易搬家的基础设施,先做真实负载PoC,再决定产品,通常比单纯根据产品规格表做选择更加可靠。
AlloyDB 和 Cloud SQL PostgreSQL 有什么区别,企业数据库应该如何选择
图片说明:示意图 图片来源:Public Domain(公有领域)
喜欢这篇报道?
使用下面的功能,方便以后继续阅读和分享 MNewsTV
关于文章收藏
收藏不需要注册帐号,收藏信息仅保存在当前浏览器中。
删除收藏请进入「我的收藏」进行管理。
捐助(Paypal): https://www.paypal.me/observeccp 订阅中国观察电报 Telegram : https://t.me/s/ObserveCCP