Aurora 论文阅读

本文最后更新于:3 年前

相关背景

Amazon Aurora 是一种与 MySQL 和 PostgreSQL 兼容的关系数据库,专为云而打造,既具有传统企业数据库的性能和可用性,又具有开源数据库的简单性和成本效益。

Amazon Aurora 的速度最高可以达到标准 MySQL 数据库的五倍、标准 PostgreSQL 数据库的三倍。它可以实现商用数据库的安全性、可用性和可靠性,而成本只有商用数据库的 1/10。

关于 Amazon Aurora 的进一步细节,可以参考 AWS 官网

2017 年,Amazon 在 SIGMOD 上发表了 Aurora 的论文,详细介绍了 Aurora 的设计思路和架构细节,以下顺着 6.824 课程的思路对 Amazon Aurora 进行简单的介绍。

EC2(Elastic Compute Cloud)

EC2 是 Amazon 最成功的云计算产品之一,用户可以租用 EC2 实例来部署网页或数据库服务等等,EC2 可以服务支持在线扩容,实时备份等功能。

最开始每个 EC2 实例往往以虚拟机的形式运行在物理节点上,其所有的磁盘 IO 都会通过虚拟机转化到对应的物理节点本地挂载的物理磁盘上。

对于无状态的网页服务,EC2 使用起来十分方便,因为其不需要关注容错,且很容易通过横向扩展 + 负载均衡的方式来提升性能。

对于有状态的数据库服务,比如 MYSQL,EC2 使用起来有一些缺点:

  • 受限的扩展:类似于 MYSQL 读写分离,单机 MYSQL 在 EC2 上可以做到读扩展,但不能做到写扩展。
  • 受限的容错:由于没有做冗余备份,物理节点一旦挂了,其磁盘上的数据暂时不可用。

EBS(Elastic Block Store)

基于以上 EC2 支持 MYSQL 服务的缺点,Amazon 设计了 EBS 来进一步提升容错能力。

EBS 是一组具有容错能力的存储服务器,对外的抽象类似于 EC2 实例的磁盘,其利用默认副本数为 2 的 Chain Replication 和基于 Paxos 的配置管理器实现了容错。

这样其实是将 EC2 从有状态变成了无状态,一旦某个 EC2 宕机,另外启动一个 EC2 实例挂载相同的 EBS 即可恢复之前的状态。

然而,这样的设计依然具有一些缺点:

  • 巨大的数据流量:由于 EBS 对外的抽象类似于磁盘,所以对于 MYSQL 来说,其脏页和 redo 日志都会被同步到 EBS 中去,尤其对于前者,即使只改动了一个 page 中的一个字节也需要传输整个 page。
  • 依然受限的容错:EC2-on-EBS 虽然比 EC2-on-Local-Disk 的容错性高,但处于 Chain Replication 的性能考虑,一组 EBS 服务器一定会在一个 AZ(Amazon 对机房或数据中心的抽象)中。因此,其对于某个 AZ 的断电,洪水等灾害依然无法能够做到容错。

RDS(Relational Database Service)

基于 EBS 的缺点,Amazon 又提供了 DBaaS(database-as-a-service) 的云服务 RDS,该服务的目标是提供跨 AZ 的容错,其架构图如下所示:

与 EBS 相比,RDS 的容错性更强,但由于同步时需要跨 AZ,这导致数据写性能进一步下降,而且在没有减少数据流量的同时还增加了巨大的跨 AZ 流量。

Aurora

基于以上服务的缺点,Amazon 明确了其理想的容错和性能需求:

  • 即使一个 AZ 断电,写服务依然正常。
  • 即使一个 AZ 断电 + 另一个副本不可用,读服务依然正常,该需求被称作 AZ + 1。
  • 容忍个别慢副本对性能造成的影响。
  • 能够快速修复宕机的副本。

基于以上需求,Amazon 设计出了兼容 Mysql 协议的云数据库 Aurora,其架构图如下所示:

Aurora 主要有两个创新点,他们共同使得 Aurora 相比 RDS 版的 MYSQL 有了 35 倍的性能提升:

  • quorum 写:采用了 2+2+2 的三中心六副本部署方案。写只需要四个副本返回 ack 即可,这样即可满足上述对容错能力和性能的需求。
  • 减少数据同步流量:使存储服务器具备将日志应用到 page 的能力,这样即可只同步物理日志而不同步脏页,从而减少大量的数据同步流量。

对于 Aurora 的读写流程和一致模型,可以参考此 博客 和此 博客

值得一提的是:为了存储层可扩展,Aurora 会将数据库文件切分成 10GB 大小的 segment,每个 segment 可以保存在不同的 6 个副本上,这保证了存储层的可扩展。然而由于只会有一个可写实例,所以其计算层并无法扩展,因此对于高并发大数据量的场景,还是需要分库分表。

总结一下:Aurora 通过对 IO 链路的优化和 quorum 写相比 RDS 版的 MYSQL 性能提升了 35 倍,但其本质上仍然是一个单机数据库。Aurora 可以被定性为一款云上的高性能单机关系数据库。

总结

本博客沿着 6.824 课程的思路,对 Aurora 的由来,设计思路,具体架构进行了简单的介绍。

相关资料


Aurora 论文阅读
https://tanxinyu.work/aurora-thesis/
作者
谭新宇
发布于
2021年4月20日
许可协议