空心|Aurora,万字详文:腾讯数据库专家深度探索Amazon

作者简介:李海翔 , 腾讯金融云数据库技术专家 。 网名那海蓝蓝 , 熟悉PostgreSQL、MySQL、Informix等 。 数据库内核技术 。 腾讯金融云数据库技术专家 。 著有《数据库查询优化器的艺术》 , 即将出版新书《数据库事务处理的艺术》 。
导语:Amazon的Aurora自从问世 , 就备受关注 , 其性能和实现架构是被关注的热点 。 2017年 , Amazon发表了一篇论文 , 披露其实现的一些技术细节 。 本文在此背景下 , 对Aurora系统的实现从整体架构、存储、事务处理三个方面进行深入探讨 , 基于其论文和相关资料讨论具体实现细节 , 又跳出其外、从数据库内核技术实现的角度对Aurora做了一定的推测 。 接着对Aurora用技术构建起的强大云数据库服务能力进行探索 。 最后总结了一些问题 , 以期有更多的讨论和思考 , 一起来探索云数据库的技术未来 。
目录
AmazonAurora深度探索
1Aurora的整体架构
1.1物理设施与架构
1.2核心技术与架构
1.3其他组件
2Aurora的存储架构
2.1存储层的工作
2.2储存层的设计讨论
2.3Aurora设计的优点
3Aurora的事务处理
3.1持久性
3.2事务与数据分布
3.3事务处理
3.4锁管理
4云服务能力
4.1强化的云服务能力
4.2万能数据库
5小结
附录
AmazonAurora深度探索
2017年 , Amazon在SIGMOD上发表了论文《AmazonAurora:DesignConsiderationsforHighThroughputCloudNativeRelationalDatabases》 。
这篇论文 , 描述了Amazon的云数据库Aurora的架构 。 基于MySQL的Aurora对于单点写多点读的主从架构做了进一步的发展 , 使得事务和存储引擎分离 , 为数据库架构的发展提供了具有实战意义的已实践用例 。 其主要特点如下:
实践了“日志即数据库”[①]的理念 。 事务引擎和存储引擎分离 。 数据缓冲区提前预热 。 REDO日志从事务引擎中剥离 , 归并到存储引擎中 。 储存层可以有6个副本 , 多个副本之间通过Gossip协议可以保障数据的“自愈”能力 。 主备服务的备机可达15份 , 提供强大的读服务能力 。 持续可靠的云数据库的服务能力 。 数据存储跨多个区:提供了多级别容灾能力 。 数据容灾能力:数据冗余、备份、实时恢复等多种能力集成到云服务 , 提高的数据的保障能力 。万能数据库的概念呼之欲出 。 之所以有这样的设计 , 是因为Amazon认为:网络IO已经成为数据库最大的瓶颈[②] 。
1.Aurora的整体架构
认识Aurora的整体架构 , 需要先理解AWS的物理设施 , 而论文中对Aurora基于的物理设施着墨不多 , 所以我们先来掌握物理设施与整体架构的关系 。
1.1物理设施与架构
Aurora的计算节点和存储节点分离 , 分别位于不同的VPC(VirtualPrivateCloud)中 。 这是Aurora架构最亮眼之处 。
如图1-1 , 用户的应用 , 通过CustomerVPC接入 , 然后可以读写位于不同AZ(AvailabilityZone)的数据库 。 而不同的AZ分布于全球的不同的Region中(如图1-2[③] , 截止到2017年初 , AWS全球有16个区域即Region , 有42个可用区即AZ , 每个Region至少有2个AZ 。 而每个AZ由两到多个数据中心组成 , 数据中心不跨AZ , 每个AZ内部的数据延迟低于0.25ms[④] 。 AWS文档称 , AZ之间的延迟低于2ms通常小于1ms) 。
数据库的部署 , 是一主多从的集群架构 , 图1-1的PrimaryRWDB是写数据的节点 , 只能有一个(这点说明Aurora还是传统的数据库架构 , 不是真正的对等分布式架构 , 这点也是一些批评者认为Aurora缺乏真正创新之处) 。 而SecondaryRODB是只读的从节点 , 由零到多个备节点组成 , 最多可以有15个 。 主从节点可以位于不同的AZ(最多位于3个VPC , 需要3个AZ)但需要位于同一个Region内 , 节点通过RDS(RelationalDatabaseService)来交互 。