在 2023 年 Gartner 最新的魔力象限评估中,AWS 再次被评为云数据库管理系统的顶级厂商之一。AWS 在在线事务处理(OLTP)的关系型数据库领域提供了两个主要产品:
- Amazon RDS(关系型数据库服务),这是 AWS 于 2009 年 10 月 22 日推出的产品,可能是全球规模最大的数据库服务之一。
- Amazon Aurora,于 2014 年 11 月 12 日推出,作为 RDS 的高定版,它以无与伦比的高性能和全球范围内的高可用性著称,兼容 MySQL 和 PostgreSQL 协议。
当工程团队开始使用 AWS 时,他们首要的任务之一就是选择 Aurora 还是 RDS 作为他们的主要数据库系统(如果他们选择使用 NoSQL 数据库,那么他们则需要在 MongoDB 和 DynamoDB 之间做选择)。接下来,我们将以工程师的视角来对比以下几个方面:
- 支持的数据库类型
- 系统架构
- 兼容性
- 性能表现
- 系统弹性
- 高可用性
- 定价策略
- 推荐配置方式
支持的数据库类型
RDS 支持包括 MySQL、PostgreSQL、MariaDB、SQL Server、Oracle 和 Db2 在内的所有主流关系型数据库。
而 Aurora 则支持 MySQL 和 PostgreSQL 这两种数据库。
在选择数据库版本方面,使用 RDS 时,您可以自由选择各种上游的数据库版本。但如果使用 Aurora,您只能选择一些特定的版本,这些版本是基于 Aurora 特定版本的,对应的也是某几个上游版本。
系统架构
RDS 就是把主流的数据库搬到云平台上。相对而言,Aurora 则是一种「云原生」数据库服务。之所以说它是「云原生」的,是因为 Aurora 充分利用了云环境的特性,例如通过将计算和存储分离,以及利用 Amazon S3 进行数据的持久化保存。这种创新的设计极大地提升了数据库的性能、高可用性和扩展能力。
兼容性
Aurora 和 RDS 作为云数据库,都存在一些共同的限制:
- 您只能使用半超级用户。
- 您无法访问数据库服务器的文件系统。对于 MySQL 来说,这意味着您只能使用 LOAD DATA LOCAL 从本地文件系统导入数据,而不能使用 LOAD DATA 从服务器文件系统导入数据。
虽然 Aurora 是一项专有技术,但它与普通 MySQL / PostgreSQL 的主要区别在于存储引擎层。另一方面,决定大多数面向用户行为的服务器层几乎完全相同。例如,MySQL 的 Aurora 仅支持 InnoDB,而 RDS 支持 MyISAM 等旧引擎(不过,如果您启动一个新项目,无论如何都不会使用 MyISAM 引擎)。
话虽如此,Aurora 的代码库与标准 MySQL / Postgres 相比,与 RDS 的差异更大,因此您应该预期 AWS 团队在引入最新的上游更新方面会有更多的延迟。例如,Aurora PostgreSQL 比 RDS 晚了两个月才添加了当红的 pgvector 扩展。
性能表现
根据官方网站,Aurora 的吞吐量是 MySQL 的 5 倍,是 PostgreSQL 的 3 倍。
这个测试甚至表明,Aurora 的性能是 RDS 的 60 倍。
Aurora 在写入性能上表现更佳,主要原因是它在处理数据时只发送重做日志到远端存储服务,避免了其他在事务提交过程中可能发生的写入操作,例如广为人知的 doule-write buffer 问题。
得益于其基于日志的架构,Aurora 在读取操作的可扩展性方面也更出色,能够支持多达 15 个读副本。相比之下,RDS 最多只能支持 5 个读副本,因为传统的流式复制技术会对主数据库造成较大的性能影响。此外,在写入密集的负载条件下,Aurora 的复制延迟也大大降低了。
RDS 使用的是 EBS 存储,其磁盘性能会根据不同的存储类型 而有所差异。
总体来说,Aurora 在性能上显著优于 RDS。但是,您仍然需要针对自己的实际工作负载进行具体的性能测试。
系统弹性
RDS 的弹性相对有限,如果您选择了 gp2 SSD 存储,它能提供一定的性能突增,但基本上就这些了。
标准 Aurora 可以快速提供读副本,但除此之外,它不提供开箱即用的弹性。
Aurora Serverless 版本,特别是 Serverless v2,则在弹性伸缩方面做得非常出色,能够根据需要灵活调整计算资源,这对于电商等需要应对不同时间段不同负载的场景非常适用。
高可用性
RDS 提供多可用区(multi-AZ)高可用(HA)设置,SLA 高达 99.95%,而 Aurora 则提供高达 99.99% 的 SLA。由于其基于日志的架构,Aurora 可以更快地 failover。特别是在写入操作较多的情况下,由于复制延迟的问题,RDS 在故障切换上可能会遇到更多的困难。
Aurora 还拥有全球数据库功能 Aurora Global Database,可以实现低延迟的全球读取和跨 AWS 区域的灾难恢复。
定价策略
如果您按照 AWS 向导选择生产模板(8c64g r6g.2xlarge + multi-AZ HA),您会发现 Aurora 的价格比 RDS 便宜得多。好得令人难以置信。
然而,需要注意的是 Aurora 还会对数据的 I/O 操作收费,而这通常不包含在初步的价格预估中。这一点在很多客户收到高额 AWS 账单时令他们感到意外。这种不确定的成本曾是团队最初采用 Aurora 时的一大顾虑。到了 2023 年,Aurora 通过推出 I/O-优化版来将 I/O 成本纳入存储费用,解决了这一问题。
除此之外,只有 RDS 提供免费使用计划和较低配置的数据库实例,起步配置为 2c1g t3.micro。而标准的 Aurora 最低配置是 2c16g r5.large,能够支持 burst 的类别则从 2c4g t3.medium 开始。Aurora Serverless 允许设置最低 0.5 ACU(应用计算单元),其中 1 ACU 提供 2 GiB 内存及相应的计算和网络资源。
总之,您应该使用 AWS 定价计算器 进行成本估算,使用如 Vantage 这样的专业工具来监控数据库成本也是一个不错的选择。
推荐配置方式
在能力方面,AWS Aurora 几乎在每个方面都胜过 RDS。由于 Aurora 是 AWS 与其他云服务商区别开来的关键因素,AWS 也在 Aurora 上投入了更多资源。尽管 Aurora 大多数情况下与 MySQL / PostgreSQL 兼容,但它通过提供无与伦比的性价比,创造了另一种 evndor -lock-in。
对于初创企业或小型企业,Aurora 的价格仍然较高,而 RDS 是一个更经济的解决方案:
对于处于成长阶段的企业来说,Aurora 更适合,Aurora Serverless 为成本优化提供了额外的灵活性:
通常情况下,您应该从 RDS 开始,随着业务的增长再考虑迁移到 Aurora。AWS 为从 RDS 到 Aurora 的迁移提供了详尽的指南,可以实现几乎零停机时间的迁移。
最后
确定数据库产品后,剩下的任务就是制定数据库开发工作流程:
- 开发人员如何将变更从开发阶段传播到生产阶段?
- 如何让数据库人员高效地对 SQL 变更进行同行评审?或者使用自动 SQL 检查更好?
- 如何执行数据访问策略以符合 PII 合规性?
如果您正在考虑这些问题,请查看 Bytebase。它是一款多合一工具,可集中异构数据库的所有人工到数据库操作。
💡 更多资讯,请关注 Bytebase 公号:Bytebase