云数据库AWS Aurora(一)

背景

Amazon Aurora 是Amazon Web Services (AWS) 提供的一种关系数据库服务,它兼容并提供与MySQL和PostgreSQL相同的API。Aurora设计为云环境中的商业数据库,具备高性能、高可用性、低成本等特性。

AWS一些组件定义

首先介绍下AWS一些组件。

EC2(Elastic Compute Cloud)

  • EC2(Elastic Compute Cloud):AWS的一种云计算服务,EC2允许用户在云中虚拟化地运行应用程序,提供了可扩展的计算能力。特性:虚拟化计算资源(不同的实例包含不同CPU、内存、存储、网络)、随时启动或停止(灵活)并资源付费等。在一个服务器上,有一个VMM,还有一些EC2实例,其中每一个实例都出租给不同的云客户。每个EC2实例可以运行不同的操作系统,运行的不同的应用程序,比如Web服务、数据库。EC2使用的是本地盘,所以当数据库服务部署在EC2,假设EC2宕机了,本地盘无法访问

S3

  • S3: 快存储,即对象存储

EBS (Elastic Block Store)

  • EBS (Elastic Block Store): 从EC2实例来看,EBS就是一个硬盘,实现中,EBS底层是一对互为副本的存储服务器。当EC2挂在一个EBS volume后,可以像操作普通磁盘一样操作,但是其实是网络请求到EBS服务器。其中EBS底层副本可以采用链式复制-Chain Replication的方式来复制:即写请求首先会写到第一个EBS服务器,之后写到第二个EBS服务器,然后从第二个EBS服务器,EC2实例可以得到回复。
  • 基于EBS,EC2上的数据库有了可用性,当数据库所在的服务器挂了,可以启动另一个EC2实例,并为其挂载同一个EBS volume,再启动数据库。
  • 基于EBS的数据库缺点:
    (1)大量数据需要网络请求
    (2)EBS的容错性, 两个副本往往部署同一个数据中心,如果整个数据中心(地震、火灾等)挂了,就没有可用能力了。

Amazon RDS

  • Amazon RDS(Relational Database Service),是基于MySQL结合AWS的基础设施,构建云上MySQL数据库服务。
  • 对于RDS,有且仅有一个EC2实例作为数据库;且将data page和WAL Log存储在EBS
  • 每一次数据库软件执行一个写操作,Amazon会自动的,将写操作拷贝发送到另一个数据中心的AZ中,形成镜像,且保证强同步
  • RDS架构提供了更好容错性,单个数据中心(AZ)全部故障,还存在一个AZ可用,不丢失数据。但是网络传输过多,log、page等等

Aurora核心设计

架构

  1. Aurora采用了6副本架构,共三个AZ(数据中心),每个AZ有两个副本。
  2. 区别于镜像MySQL(Amazon RDS), Aurora只在网络上传输日志,其他都不传输,因此网络开销很小。日志只是增量,所以内容相比Page较少(当一个数据库要写本地磁盘时,它更新的是整个data page)
  3. 数据分片(Protection Group):10GB一个副本,默认6副本,即存储在6台服务器上。Aurora需要发送一个Log条目时,它会查看Log所修改的数据,并找到存储了这个数据的Protection Group,并把Log条目只发送给这个Protection Group对应的6个存储服务器。存储服务器挂了后,需要尽快恢复副本,采用的策略是并行的 & 快速的在数百台服务器上恢复(假设有足够的带宽,存储服务器有100个分片(每个分片10G),可以以100的并发,并行的拷贝1TB的数据,这只需要10秒左右。如果只在两个服务器之间拷贝,正常拷贝1TB数据需要1000秒左右)
  4. 单写:写请求,只发送给一个数据库。(当然很多类似Aurora数据库后续也支持了多写架构)
  5. 多读:Aurora可以有多个只读数据库,读请求可以分担到这些只读数据库上

写流程

6副本只需要任意4个副本写成功即可(满足Quorum),可容忍两个服务器宕机。或者说单个AZ彻底异常,不影响写操作

读流程

  1. 读流程:当一个AZ和一个其他AZ的服务器挂了之后,读操作不受影响。
  2. 当客户端向只读数据库发送读请求,只读数据库需要知道哪些data page来处理这个读请求,之后直接从存储服务器读取这些data page,并不需要主数据库的介入。只读数据库向存储服务器直接发送读取page的请求,之后它会缓存读取到的page,这样对于将来的一些读请求,可以直接根据缓存中的数据返回。
  3. 只读数据库需要保证只应用commit的事务到自身缓存中,保证数据一致性

Aurora和传统的Quorum区别

  1. Quorum系统通常读写的数据都是相同的
  2. 数据库服务器写入的是Log条目,但是读取的是page(即数据,RO节点通过Log回放到Page)
  3. 数据库服务器可以避免触发Quorum Read(读多个存储服务器),因为日志可以有编号,可以知道哪个存储服务器有最新的日志,因此会挑选拥有最新Log的存储服务器,然后只向那个服务器发送读取page的请求;因此数据库服务器执行了Quorum Write,但是却没有执行Quorum Read,只读了一个副本,而不用读取Quorum数量的副本,效率更高
  4. Aurora也有场景进行Quorum Read,比如当EC2中故障了,导致对应服务器挂掉了,在新启动一个EC2实例后,在进行故障恢复时。原因如下:
  • a) 数据库服务器故障,可能某些事务在执行过程中,并且已经写了日志,在恢复时候,需要通过Quorum Read的方式找到第一个缺失的Log序号,比如第一个副本有第101个Log条目,第二个副本有第102个Log条目,第三个副本有第104个Log条目,但是没有一个副本持有第103个Log条目,因此数据库服务器会给所有的存储服务器发送消息:丢弃103及之后的所有Log条目
  • b) 102及之前的Log会保留。但是这些会保留的Log中,可能也包含了未commit事务的Log,需要进行UNDO操作来撤回未commit事务的变更

参考

  1. MIT 6.824: Cloud Replicated DB Aurora
  2. Aurora论文 https://pdos.csail.mit.edu/6.824/papers/aurora.pdf
相关推荐
茉莉玫瑰花茶29 分钟前
SQL 调优 [ 1 ]
数据库·sql
Databend29 分钟前
从传统分区到微分区,Snowflake 与 Databend 如何减少数据扫描
大数据·数据库·sql
ruleslol39 分钟前
Redis 雪崩与服务降级
数据库·redis
易番番ERP1 小时前
品牌代理商SKU繁多,ERP如何高效处理新旧规格替换?
数据库·微服务·云原生·sku·易番番erp
leo_yu_yty2 小时前
Mysql 面试准备
数据库·mysql·面试
SelectDB2 小时前
拉卡拉统一金融 OLAP:基于 Apache Doris / SelectDB 实现查询提速 15 倍、资源直降 52%
数据库
jikemaoshiyanshi2 小时前
企业搭建大模型网关与智能路由体系,如何实现精细化推理分发?——AWS 双层网关架构适配规模化业务落地
架构·云计算·aws
SelectDB2 小时前
四川航空湖仓一体:基于 SelectDB / Apache Doris 的多源数据联邦分析实践
数据库
SelectDB2 小时前
网易云音乐日志平台:基于 Apache Doris / SelectDB 替换 ClickHouse 承载日增万亿日志
数据库
径硕科技JINGdigital2 小时前
AI 训练时 GPU 利用率低,哪些云上高性能存储方案更适合优化训练成本?AWS 按 I/O 瓶颈分层选型
人工智能·云计算·aws