He3DB论文解读:Amazon Aurora_ Design Considerations for High Throughput Cloud-Native Relational Database

He3DB 是由移动云数据库团队研发的一款计算/存储分离的云原生数据库,He3DB通过计算/存储分离、数据冷热分层和压缩、智能中间件等技术,来保证高性能和低成本完美兼得,在获得高性能的同时,最大化的帮助客户节省数据库使用成本。
Amazon Aurora是由亚马逊网络服务(AWS)提供的一种关系型数据库管理系统(RDBMS)。通过优化的存储和复制体系结构提供高性能、高可用性和可扩展性。它是一个云原生数据库,专为云环境而设计,并在可用性、性能和容量方面比传统数据库更具弹性。毫不夸张的说,当前云原生数据库圈的繁荣离不开Amazon在2017届SIGMOD 会议上发表的Amazon Aurora系统解密论文《Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Database》,下面我们一起来揭开云原生数据库的神秘面纱!

架构概览

图片: https://uploader.shimo.im/f/OyK1fcqQDERxFMaN.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2OTM1MzI1NjUsImZpbGVHVUlEIjoiUktBV016WG5YWFRFT1JxOCIsImlhdCI6MTY5MzUzMjI2NSwiaXNzIjoidXBsb2FkZXJfYWNjZXNzX3Jlc291cmNlIiwidXNlcklkIjo4MzE1NTgwOX0.9yCflcSW0hM6feRO65zpkDMKdgW8LHf9yezdPSR_CH0

Amazon Aurora对传统关系数据库架构进行了重塑与解耦,以一次IO为例,Amazon Aurora将传统的IO同步路径,分解成8个异步路径,并且只有step1和step2在前端的响应延迟路径上,这种架构极大提升了性能,Amazon Aurora(MySQL版本)相较于MySQL有5倍的性能提升,Amazon Aurora(PostgreSQL版本)相较于PostgreSQL有3倍的性能提升。
IO流解读

  1. 主实例提交日志到存储节点的内存队列
  2. 进行日志持久化,并且进行客户端确认操作(至此对客户端而言写入结束)
  3. 对日志进行排序,并标记出日志中的空洞
  4. 存储节点间进行Gossip协议通信,将日志中的空洞数据进行补充
  5. 对日志进行回返,合并到新的数据块版本中
  6. 周期性的将日志和新版本数据块同步到S3
  7. 周期性的对旧版本数据页进行垃圾回收
  8. 周期性的进行数据页CRC校验

下面我们来深入解析一下Aurora核心组件和技术设计

the log is the database

“the log is the database” 是 Aurora的一种独特的数据库设计理念,它强调了事务日志(redo log)在数据库系统中的关键作用。在传统数据库系统中,事务日志主要用于记录对数据库的写操作,以便在发生崩溃或故障时进行数据恢复。然而,在Aurora中,这一理念被进一步扩展和优化,将事务日志的作用提升到了更高的层次。
图片: https://uploader.shimo.im/f/4r6zJdQU5b9csf9Y.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2OTM1MzI1NjUsImZpbGVHVUlEIjoiUktBV016WG5YWFRFT1JxOCIsImlhdCI6MTY5MzUzMjI2NSwiaXNzIjoidXBsb2FkZXJfYWNjZXNzX3Jlc291cmNlIiwidXNlcklkIjo4MzE1NTgwOX0.9yCflcSW0hM6feRO65zpkDMKdgW8LHf9yezdPSR_CH0

在Aurora中只有主节点可以接收写请求,执行数据写入动作,并同步日志到备节点。相较于传统数据库,Aurora主节点只会向存储层写入redo日志数据,不会向存储层写入数据块,主备之间的日志同步不再是完整的redo日志数据,只是redo日志元数据,能够满足备节点根据这些元数据构建出完整的数据块-redo日志间的链表关系即可,由于存储引擎是共享的,所以备节点在需要的时候可以根据数据块-redo日志间的链表关系从存储引擎中读取对应的完整日志数据。
通过以上两点的改变,计算引擎的写入性能得到了极大的提升,主备之间的延迟得到了极大的降低。

多副本

计算存储解耦之后,存储节点和磁盘也可能会发生故障。因此,必须通过某种方式将其进行复制以提供故障恢复能力。Aurora使用基于 Quorum 的投票协议是复制系统中应对故障的一种方法。如果V个数据副本中每个副本一票,那么一次读操作或是一次写操作必须分别获得Vr​票(读 Quorum)或Vw​票(写 Quorum )。为了满足一致性,Quorum 必须遵守两个规则:
1)每次读操作必须感知到最近的写入,公式表示为Vr​+Vw​>V。这个规则确保用于读取的节点集合和用于写入的节点集合相交,并且Vr​中至少存在一个具有最新版本的节点。
2)每次写操作必须感知到最近的写入,以避免写冲突,公式表示为Vw > V/2。
图片: https://uploader.shimo.im/f/UMydQz7CdUZCbzgg.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2OTM1MzI1NjUsImZpbGVHVUlEIjoiUktBV016WG5YWFRFT1JxOCIsImlhdCI6MTY5MzUzMjI2NSwiaXNzIjoidXBsb2FkZXJfYWNjZXNzX3Jlc291cmNlIiwidXNlcklkIjo4MzE1NTgwOX0.9yCflcSW0hM6feRO65zpkDMKdgW8LHf9yezdPSR_CH0

在 Aurora 中,考虑了多AZ的需求对存储引擎进行了如下设计:
(a) 允许整个 AZ 和一个附加节点(AZ+1)发生故障而不丢失数据
(b) 允许整个 AZ 故障不影响写数据。
通过将每份数据拷贝 6 份,放在 3 个可用区中,每个可用区保存 2 份拷贝,从而实现了上述目标。使用的 Quorum 模型为V=6,Vw​=4(写 Quorum), Vr​=3(读 Quorum)。
通过该模型,可以实现在损失一个 AZ 和一个附加节点(总计 3 个故障节点)而不失去读可用性,并且在失去任意两个节点或者一整个 AZ 还能保持写可用性。

日志处理服务

在Aurora中数据块版本推进是由日志处理服务负责完成的,主实例只需要将WAL数据流写入存储引擎就可以了,数据文件的变更是完全依靠日志文件回放来实现。这个过程是独立且异步的。除了通过回放日志来推进数据块版本之外,日志处理服务还会周期性的将日志和新版本数据块同步到S3、对旧版本数据页进行垃圾回收、进行数据页CRC校验工作。

读一致性

在Aurora中会全局维护一个致性位点read-point,代表着redo日志的最新落盘位置。数据库实例向存储节点传递redo日志,达成多数派后将事务标记为提交状态,然后推进read-point。由于备机只能保证做到构建数据块-redo日志间的链表关系的实时性,难以保证回放数据页的实时性。并且日志处理服务推进数据页版本也会有一定的延迟,所以如果想要读到read-point版本的数据页就需要使用session日志延迟回放技术。session日志延迟回放技术是指在seesion中根据数据块-redo日志间的链表关系向存储引擎读取对呀的老版本数据块和对应的增量redo日志,然后在seesion中进行回放操作,并将回放结果进行客户端返回或者进行进一步处理。

以上就是Amazon Aurora的主要技术特征,相较于传统数据库架构,Aurora的架构创新性非常强,"the log is the database"的理念非常新颖,并且也给出了详细的技术实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 这是一个URL中的参数串,其中sr_channel=1是指在访问该URL时使用的渠道编号为1,spreader_id=b5g_g3oy_e3d47_e4d是指该URL的传播者ID为b5g_g3oy_e3d47_e4d。一般来说,sr_channel用于统计和区分访问来源,而spreader_id用于追踪该URL的传播者,以方便分析传播效果和进行奖励。例如,在一次营销推广活动中,为了增加参与度,可以让传播者分享该URL,并设置一个spreader_id作为识别码,当其他用户通过该传播者分享的URL进行注册或消费时,可以根据该spreader_id追踪和统计该传播者的贡献,并根据结果给予相应的奖励或回报。所以,在URL中使用sr_channel和spreader_id参数可以方便地实现用户来源和传播者跟踪,为网站运营和营销带来诸多便利。 ### 回答2: 这串代码是一个参数串,其中sr_channel=1表示该链接是从搜索引擎的自然搜索结果中进入的;spreader_id=b5g_g3oy_e3d47_e4d是一个推广者ID,可能是为了追踪和统计某个推广者的推广效果。这种参数串多用于营销等领域,在网站访问统计和分析中也有应用。通过加入参数串,可以方便追踪和分析用户来源和用户行为,为企业的推广和营销带来效益。 ### 回答3: 这个字符串是一个URL中的参数,其中分隔符%3D表示等号,%26表示&符号的编码。sr_channel=1表示搜索通道为1,即使用了特定的搜索渠道进行搜索。spreader_id=b5g_g3oy_e3d47_e4d表示这个搜索是通过某个推广渠道传播的,并且通过这个参数可以追踪传播效果。这种推广方式常见于网页或APP的营销推广,通过不同的推广渠道来吸引更多的流量和用户,并进行推广效果的跟踪分析,以便对推广方式进行优化和改进。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值