云数据库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
相关推荐
Java探秘者2 分钟前
Maven下载、安装与环境配置详解:从零开始搭建高效Java开发环境
java·开发语言·数据库·spring boot·spring cloud·maven·idea
2301_786964368 分钟前
3、练习常用的HBase Shell命令+HBase 常用的Java API 及应用实例
java·大数据·数据库·分布式·hbase
阿维的博客日记1 小时前
图文并茂解释水平分表,垂直分表,水平分库,垂直分库
数据库·分库分表
wrx繁星点点2 小时前
事务的四大特性(ACID)
java·开发语言·数据库
小小娥子3 小时前
Redis的基础认识与在ubuntu上的安装教程
java·数据库·redis·缓存
DieSnowK3 小时前
[Redis][集群][下]详细讲解
数据库·redis·分布式·缓存·集群·高可用·新手向
-XWB-3 小时前
【MySQL】数据目录迁移
数据库·mysql
老华带你飞3 小时前
公寓管理系统|SprinBoot+vue夕阳红公寓管理系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·spring boot·课程设计
我明天再来学Web渗透3 小时前
【hot100-java】【二叉树的层序遍历】
java·开发语言·数据库·sql·算法·排序算法
Data 3174 小时前
Hive数仓操作(十一)
大数据·数据库·数据仓库·hive·hadoop