MIT 6.824 Lec10 Aurora

Aurora是亚马逊推出的一种高可用云数据库服务,针对传统云服务的网络传输效率低和容错性不足的问题进行了优化。其核心设计包括Quorum机制,实现更快的故障恢复和更高的写入容错性。Aurora通过只发送日志记录而不是脏数据页来减少网络负担,并通过Quorum读写策略确保服务稳定性。在故障发生时,Aurora能快速修复失效副本,并利用分段机制加速大文件恢复。此外,Aurora还允许通过调整读写Quorum来适应不同场景需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景介绍

Aurora的提出意义

  • successful recent cloud service, solves serious problems for customers
  • big payoff for good design
  • shows limits of general-purpose storage abstraction
  • many tidbits about what’s important in real-world cloud infrastructure

现有的云服务缺陷

  • lots of data sent over network – both log and dirty data pages,the data pages are big even if only a few bytes are changed
  • not fault-tolerant enough

传统数据库提交事务流程

假设有一笔银行交易事务如下:

begin
    x = x + 10
    y = y - 10
end

为了保证事务的ACID特性,传统数据库MySQL的处理机制如下:

  1. 为账户x和账户y加锁,
  2. 数据以b-tree的形式存储在磁盘中,MySQL会将某些data page进行缓存。
  3. MySQL Server更改缓存中x和y的数据。
  4. MySQL Server将更新日志append到WAL文件。
  5. WAL文件写入成功后,可以提交事务,释放x和y的锁,回复client。
  6. 定期将数据从data page cache刷回到disk上。
  7. 当进行crash recovery时,如果该事务已经提交,则将new value进行replay替换(redo),如果该事务还未提交,则将old value进行replay替换(undo)。

Aurora

设计核心

Aurora的设计核心主要有两点:

  • Quorum writes for better fault-tolerance without too much waiting
  • Storage servers understand how to apply DB’s log to data pages,so only need to send (small) log entries, not (big) dirty pages

容错需求

Aurora的容错需求如下:

  • be able to write even if one AZ entirely dead
  • be able to read even if one dead AZ and one more storage server dead
  • tolerate temporarily slow replicas smoothly
  • repair dead replica very quickly

Quorum机制

Aurora采用了Quorum读写机制,假设总共有N个replicate server,其中write需要写入W个server,read需要读取R个server,并满足R + W = N + 1

  • 可以巧妙地解决slow storage server,dead storage server或者network partition的问题。
    – 不需要等待,不需要检测出异常storage server。
    – 不会出现brain split现象
  • 可以通过调整read或write需要的投票数目来应对不同的场景

Quorum机制保证了即使在部分storage server出现问题的情况下,Aurora也能正常进行write/read operation。在实际部署中,Aurora采用了N=6, W=4, R=3的Quorum规则。

写操作

Aurora的写操作只会向所有的6个storage server发送new log record,写操作并不会直接的改变data page。只有当4个storage server成功写入了log record之后,db server才会将该事务进行提交。storage server会在后台自动的将new log record更改的内容更新到data page中。

读操作

一般情况下,Aurora的读操作并没有遵循Quorum机制,db server在执行读操作时会缓存storage server中所需要的data page。db server追踪记录了每个storage server的SCL信息,当进行读操作时,db server会选择highest committed LSN >= SCL的storage server进行数据读取。

当db server宕机,需要在新的EC2 instance上进行crash recovery的时候,Aurora才会采用Quorum read。 具体过程如下:

  1. db server需要访问所有storage server以确定VCL值。
  2. db server会告诉storage server删除所有大于VCL的log records。
  3. 对于在VCL之前但还没有提交的transaction,storage server需要执行undo操作撤销更改。

在实际的使用中,为了提高Aurora的读操作处理性能,一般会添加很多read replicas,client可以直接向read replicas发送read request,read replicas不一定能够返回最新的提交结果! read replicas从storage中缓存需要读取的data page,为了保证cache数据的有效性,db server在向stroage server发送log records时,也会向read replicas发送log record,read replicas根据log record来更新cache中的data page。

分段机制

对于超大文件的存储,Aurora将其划分为10GB的segments,6个storage servers上的segments总共构成一个PG。对于不同的PG,其中的segments可能存储在不同的storage servers上。因此当进行故障恢复时,一个storage server中存储的所有segments可以由不同的source storage server并行发送,从而加快恢复速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值