《Amazon Aurora: Design Considerations for HighThroughput Cloud-Native Relational Databases》SIGMOD 2017 读后感

Amazon Aurora: Design Considerations for HighThroughput Cloud-Native Relational Databases,来自Sigmod 2017,可以在Werner Vogels Blog上下载到 (SIGMOD 官网还没更新)。

读下来感受:

  1. Aurora 是一个OLTP数据库,最大存储为64TB/SSD,不是为OLAP设计
  2. 通过将计算逻辑下推到Storage Node(非传统意义上存储节点),从而解决了写与修改过程中一份数据被放大的问题
  3. 本身不解决分库分表等机制,既数仓与需要过PB级数据场景并不适合Aruora
  4. Aurora 巧妙的地方在于,他使用了MySQL计算引擎,100%兼容了MySQL以及PG两种数据库100%语法,因此应用迁移成本为0,按照存储节点适配的思路,任何开源的数据库理论上都较快适配上来,但对于块存储等设备对于所有数据库适配性而言稍差
  5. 在解决放大问题后,可以达到很高的写IOPS,并且随着SSD或其他硬件性能提升,呈线性结构
  6. 一份数据默认会存3个AZ,每个AZ中存储2份,通过局部与全局Failover概率的权衡,达到尽可能少事物提交延迟与失败概率
  7. Aurora完全构建在EC2(Local Storage)、LBS、VPC、S3(备份)等这些产品基础上,并没有单独从物理机上研发,也印证了AWS云产品有两类:基础性云产品、以及应用层云产品的构建思路。好处是可以将规模、多租户隔离等问题屏蔽掉,专心研发最重要的Storage Node即可

数据库上分布式方案

AWS传统RDS设计

下图是AWS RDS方案,数据库的计算和事务使用EC2,存储则在分布式系统中:

在云计算场景下,一般使用块存储来Host数据库服务器,既数据库的读写会在多个存储节点上进行强一致性的同步处理,带来的好处是存储持久性(Durbility)高。并且分布式存储本身可以无限扩张,因此数据量不是大的问题。除此之外,一些新存储技术的诞生,例如NVMe SSD单机提供较高IOPS设备使得分布式存储也能在较高读写情况下有很强Throughput。

AURORA中存储设计

多副本读与写

分布式存储并不是万能的,面临的最大挑战则是Transaction 等 2 Phase Commit(2PC)协议对于可靠性以及延时的TradeOff。
磁盘、网络、机柜、机房等都有一定的ATF(年故障率),并且日常维护重启、升级等操作会增加这类临时不可用时间。一般采用多副本选举来解决该问题:例如3个副本的情况下,写必须要有2个以上(Majority)副本写成功才可以,在读的情况下也必须保证有2个:
V-Read + V-Write> V-Copy
Aruora设计中使用了3 AZ,每个AZ 下2 Copy的设置,共计6个副本。AWS 传统的服务,例如S3、Kinesis等都是3副本设计。这样的设置主要从实际观察情况出发:

  1. 在同一个AZ下下硬盘、节点损坏、维修等是常态。在同一个AZ下设置2 Copy可以尽可能减少这类操作对用可用性影响
  2. 机房级AZ问题不常发生,例如水灾、火灾以及天花板损坏等故障(roof failure?)

在写入场景下6 Copy需要保证4个副本完成,在读场景下只要7-4=3 个副本一致就可以了

存储块与日常运维

  • Aurora下存储最小单位叫Segment,每个Segment大小为10GB
  • Protection Group(PG)是一个逻辑单位,代表的是6个Segment
  • Segment是维护与调度的最小单元,一个Segment故障时,同AZ的万兆网络可以在10秒内就行修复

存储节点Segement这种设计对于日常运维比较重要,例如在热点问题上(Heat Management),两个实例都非常大需要进行调度,或存储节点OS需要Patch,存储节点的代码需要更新,这种类似Ping-Pang升级的方式可以使得AZ级存储节点能够灵活配置。

存储节点设计核心思想(只处理LOG,部分计算下推)

AWS传统RDS问题在于对于写放大,用如下这张图就能发现,在一个Master-Slave(主从热备)RDS场景下,主节点和存储层的交互会被放大多次:

  • Replication Log
  • Redo Log (临时存储最后N个)
  • Data(最新数据库结构数据,内存中定时Dump)
  • FRM Files(这个数据量一般比较小)

假设EBS有2-Copy,则一份数据写入/更改被放大了222 = 6 倍,如果EBS为3-Copy,这个数据约为12倍。如果有备节点也算上的话,这个数字既为24倍。直接使用分布式存储放大非常严重。

搞过Hbase人应该知道,对于LSM这样的场景,一般10MB/S原始数据写入,后台网络流量会达到80-100MB/S,原因也是类似,一份数据写入后放大如下
3-Redo + 3 Mem File + 3 Times Merge = 9 Origin Input
但这种模式也带来来了好处,就是CPU会浪费得比较少,因为3-Copy只占据IO和网络,CPU本质上只有一份。
Aurora提出的思路是,计算节点直接将RedoLog下推到存储节点,每个存储节点根据RedoLog 来构成本地(Local Segment)存储状态,多个存储可靠性通过副本数来保障。每个存储节点也可以将Segment 定时同步到S3上增加可靠性。

每个存储节点在处理时,在处理请求,写入本地RedoLog后既返回,以保证低延时:

存储节点共有5个数据链路上的步骤:

  1. 接收到请求,加入内存中的队列(主要是为了做batch commit)
  2. 将批量Redolog存储到本地磁盘
  3. 内存中对于批量redolog进行整理,确定还有哪些没有catchup
  4. 与其他副本存储节点进行gossip,进行对齐
  5. (可选)将本地redolog和 snapshot data dump到S3进行备份

后台工作(2个):

  1. 根据redo log进行gc,删除无用的data 和 redo log
  2. 本地盘做CRC进行数据检查,以及恢复

PAPER其他部分

明白了主要差别后,其他的读、写、事物提交等也没有什么新的东西。性能测试等可以参见Paper。
最后来一张基于ELB、EC2、VPC等部署大图:

LESSION LEARNED

  1. 多租户下的数据库诉求:大部分AWS用户都基于AWS开发SaaS化的软件给用户提供服务,在Aroura上市后发现大部分用户对多租户下的诉求是希望能够提供弹性扩展的数据库(数据库Schema一般会不变),而不是像之前认为的,在datamodel这个层面来进行多用户层的统一(例如salesforce)。非常多的用户在一个小的数据库层李拥有十几万的表(看起来SQL这种编程模式已经根深蒂固),他们的诉求主要在于:
  • 数据库能够提供足够多的并发
  • 数据库的模型能够保留一致,但对于数据库的请求和访问能够按量进行付费(原因是上线前并不能预估具体容量,这点也是例如弹性扩展dynamoDB在AWS如此受到欢迎的原因)
  • 能够在一个数据库下,不因为某些表的访问脉冲,引起其他表
  1.  对于高并发提供弹性的扩容能力:这个搞互联网的都应该知道
  2.  Schema转换能力,因业务需求经常需要做数据表DDL变更
  3. 高可用性,以及升级能力:6 副本,单AZ内数据节点轮转升级,这点毫不费力

产品与售卖形态分析

最后我们来看看Aurora定价形态

数据库的计算实例

和AWS RDS的方式类似,本质上是直接购买EC2的节点。在创建计算实例节点后,可以将资源扩展到 32 vCPU 和 244 GiB 内存更大的实例。也可以选择按量付费模式。

存储进行计费

最低存储为 10GB(一个最小Segment),最大为64TB(应该是处于SSD最大本地盘的考虑)。因为存储层是以Segment进行管理的,所以可以弹性地从 10GB 自动增长到 64 TB,而不会影响数据库的性能。

每GB存储为0.1$ /Month,这对于单SSD存储而言是一个比较Fair价格,如果是默认6-Copy,则乘以6。

根据IO进行计费

价格为 $0.200 每 100 万个请求,这个费用属于毛利率比较高的。

IO 是由 Aurora 数据库引擎依靠基于 SSD 的虚拟化存储层执行的输入/输出操作。每一个数据库页面读取操作为一个 IO。Aurora 数据库引擎依靠存储层发出读取,以获取不在缓冲缓存中的数据库页面。每个数据库页面为 16KB。

Aurora 目的是消除不必要的 IO 操作,以降低成本,并确保资源可服务于读/写流量。只有将事务日志记录推送到存储层,完成耐久型写入时,才消耗写入 IO。写入 IO 以 4KB 单位计算。例如,1024 字节的事务日志记录计为一个 IO 操作。然而,当事务日志小于 4KB 时,同时写入操作可通过 Aurora 数据库引擎批量进行,以便优化 I/O 消耗。

时间: 2024-09-19 10:14:24

《Amazon Aurora: Design Considerations for HighThroughput Cloud-Native Relational Databases》SIGMOD 2017 读后感的相关文章

Amazon Aurora 读后感

        几个月前,AWS在SIGMOD 17上发表了<Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases>,详细解读了Aurora的背景.设计思想以及效果.即使本人不搞关系数据库,也没有读过MySQL内核源码,读完后也觉得可以从中学习到很多东西,记录于此.一些理解不正确的地方,也欢迎讨论.         传统关系数据库三宗罪,扩展性.可用性和schema

Amazon Aurora 升级, 兼容 PostgreSQL

据亚马逊 AWS 博客发文称,他们在昨天发布了兼容 PostgreSQL 的 Amazon Aurora 预览版. 这里有一些您会喜欢的东西: 性能 - Aurora 提供的性能是传统环境中运行的 PostgreSQL 的 2 倍 兼容性 - Aurora 完全兼容 PostgreSQL 的开源版本(版本 9.6.1).在存储过程方面,计划支持 Perl,pgSQL,Tcl 和 JavaScript(通过 V8 JavaScript 引擎),还计划支持 Amazon RDS for Postgr

当红架构Cloud Native,怎么搭建才能成为上云助攻手?

作者:陈谔,网易云基础服务总经理,现负责网易云计算平台产品线建设,对分布式系统设计开发.云计算平台系统架构有一定的经验和理解.近年来致力于带领团队推进公司开发技术栈的标准化.工具化.   网易云基础服务团队:网易云基础服务拥有优质的硬件资源,经验丰富的研发运维团队,为各类客户提供IaaS.PaaS服务.同时深度整合Docker与Kubernetes技术,打造专业的容器服务.   如何让云成为业务成功的基石而不是障碍,是技术团队需要不断思考的问题,Cloud-Native正是一种让业务技术架构向云

移动云Apsara Mobile震撼发布!推出Cloud Native App全新研发范式

近日,阿里巴巴在2017杭州·云栖大会上重磅发布了阿里云移动云Apsara Mobile.阿里云移动云是一套帮助开发者构建工程化.系统化.智能化的移动研发体系能力的云计算服务,功能覆盖移动研发的全生命周期.同时,大会首次向业界提出Cloud Native App的移动研发新范式,旨在帮助开发者最大程度地利用云计算服务模型的优势,低成本.快速地构建移动应用. Apsara Mobile着眼移动研发的整个生命周期:将研发阶段的效能提升2倍,100%覆盖主流机型从而获得更全面化的测试,将构建的版本发布

云原生(Cloud Native)- 移动App研发新范式

什么是云原生(Cloud Native)App 云原生的话题近期异常火热,对于它的概念,大家也有不同的解读.从我个人的视角而言,云原生代表了一种应用构建的方法论:如何最大程度地利用云计算服务模型的优势低成本.快速地构建一款弹性的应用.本质上而言,云原生的研发模型旨在降低业务的技术风险,让开发者的形态更单纯.专注: 所有的运行环境透明化,按需扩展: 所有的研发流程流水化,高效交付: 所有的基础设施服务化,按量付费: 云原生应用 我们通常意义下的云原生应用意指传统的后端应用,Container.Mi

解读 | 你真正理解什么是Cloud Native吗?

本文讲的是解读 | 你真正理解什么是Cloud Native吗,[编者的话]什么是cloud-native?cloud-native框架.cloud-native运行时和cloud-native基础设施的自动化又有哪些内容?读完这篇文章,就能有一个大概的了解. 你能做到每周.每天甚至每个钟头向客户发布新特性吗?新加入的开发者能够在他们工作的第一天甚至面试阶段就能部署代码吗?部署新员工的代码后,你能因为确信应用程序运行正常而安然入睡吗?建立快速发布机制,包括支持cloud-native应用的安全与

The Twelve-Factor在Cloud Native时代是否依然适用?

按语 Heroku是云应用平台的先驱,从对外提供服务以来,他们已经有上百万应用的托管和运营经验.其创始人Adam Wiggins根据这些经验,提出了十二要素应用宣言 .The Twelve-Factor App定义了一个优雅的互联网应用在设计过程中,需要遵循的一些基本原则. 不过, The Twelve-Factor是在特定的时期,针对特定的平台实践所总结出来的.12元素依然璀璨,很多原则依然具有普适性:但是在应用全面迁移到云端的今天,Cloud Native时代的应用开发,需要有更多与时俱进的

阿里云移动云Apsara Mobile重磅发布 推出Cloud Native App全新研发范式

10月13日,阿里巴巴在2017杭州·云栖大会上重磅发布了阿里云移动云Apsara Mobile.阿里云移动云是一套帮助开发者构建工程化.系统化.智能化的移动研发体系能力的云计算服务,功能覆盖移动研发的全生命周期.同时,大会首次向业界提出Cloud Native App的移动研发新范式,旨在帮助开发者最大程度地利用云计算服务模型的优势,低成本.快速地构建移动应用. Apsara Mobile着眼移动研发的整个生命周期:将研发阶段的效能提升2倍,100%覆盖主流机型从而获得更全面化的测试,将构建的

什么是Cloud Native?

本文讲的是什么是Cloud Native?[编者的话]本文通过一些例子和场景很好的诠释了Cloud Native概念和用途.特别是在工作原理方面,不是关注于技术细节,而是着眼于理论层面,给企业的管理者一个对Cloud Native的足够高度的概括.作为一个PaaS平台的爱好者,我能够感受到原文作者的Cloud知识储备和深厚的运维管理经验. [深圳站|3天烧脑式Kubernetes训练营]培训内容包括:Kubernetes概述.架构.日志和监控,部署.自动驾驶.服务发现.网络方案等核心机制分析,进