PacificA 论文笔记(一)

PacificA 论文笔记(一)

1. 背景介绍

对于分布式数据存储系统,数据复制对于系统的可靠性和可用性是一个关键。数据复制协议如Paxos是被熟知的一种数据复制协议。然而实现一个实际项目中的分布式存储系统不仅仅是应用一个已知的复制协议。理论上的复制协议和实际应用的复制机制还是有很大的不同的。理论上复制协议的设计通常都过度简化了一些性能参数,而实际上的数据复制需要优化端到端的性能,如系统吞吐量、请求处理时延和系统修复时间。

这篇论文主要针对基于日志的分布式存储系统,设计和实现了一个简单的、实用的、通用的数据复制框架。

该框架的设计原则主要有:(i)数据复制和配置管理 configuration management. 配置管理应用Paxos协议,数据复制使用主从方式primary/backup.(ii)非集中式的错误检测和触发重新配置。(iii)一个抽象模型和一个通用模型来说明框架正确性,允许不同的实现方式。

2. PacificA数据复制框架

Replica-group(副本组),数据副本复制在不同的一组服务器上。

Replica 副本组中的每一个副本/服务器。

一个服务器中的副本可以属于不同的副本组。

数据复制协议采用主从复制,一个副本组中有一个主副本primary,其余的为从副本secondaries。

配置信息是指一个副本组的构成信息,谁是主谁是从。

配置信息版本用来记录配置信息的改动,副本的失败或者新增。

侧重于强一致性。

2.1 主从数据(primary/backup)复制

读操作和写操作都被发送到主副本。对于写操作,主副本会分配一个连续递增的序列号给每一个写操作,并发送给所有的从副本,从副本必须按照相同的顺序执行写操作来保证强一致性。

每一个副本会维护一个请求的准备列表prepared list和请求列表的提交点commited point. 请求列表是按照序列号排好序的。

主副本的应用状态就是按照顺序执行提交列表的一个结果。

读(查询)请求:查询请求发送到主副本,在应用状态上执行查询操作然后立即返回查询结果。

写请求:主副本给这个写请求分配一个可用的序列号。主副本把这个请求携带着配置版本和序列号发送给所有的副本,告诉其他副本这是一个写请求的准备消息。当从副本r收到这个准备消息,会把请求添加到准备列表,然后发送一个确认已经准备的消息给主副本。当主副本收到所有从副本的已准备的消息。主副本会将该消息设置为已提交,并发送成功消息给客户端。主副本通知所有从副本请求已提交,从副本然后进行相应的提交点的设置。

Commit Invariant(提交不变式):

p - primary, q - replica

2.2 配置信息管理

如果一个服务器检测到一个副本出错了,或者提议添加新的副本,它可以向配置管理服务器发起一个重新配置的请求。重新配置的请求中包含提议的新配置和它当前配置版本。如果该配置版本跟配置管理服务器的版本匹配,该提议会被接受,配置版本号升级一个版本,否则被拒绝。

当网络分区发生的时候,重新配置冲突可以会发生。第一个被配置管理服务器接受的请求会获胜,其他的冲突的请求被拒绝。

Primary Invariant(主副本不变式):

任何时间,一个服务器p认为自己是主副本,只有当配置管理服务器维护的当前配置中,p是主副本。因此,在任何时间,最多只有一个主副本。

2.3 租约和错误检测

使用租约机制来解决双主问题。

主副本周期性的发送心跳(beacon)给每一个从副本并等待从副本的响应来获取租约。当一个从副本所有的租约都过期了,主副本不再认为自己是主,会停止处理查询和更新请求,而是联系配置管理服务器去将这个从副本从当前配置中删除。

一个从副本会发送心跳确认消息给主副本。如果超过宽限期(grace period),从副本会认为租约过期,会联系配置管理服务器将主副本删除,自己成为主副本。

只有宽限期大于等于租约时间,租约机制就能够保证主副本先到期,然后是从副本。因此,能够保证新的主副本在老的主副本卸任之后当选。

2.4 重新配置Reconfiguration, Reconciliation, 恢复Recovery

一种复制协议的复杂之处在于它怎么处理重新配置。这里将重新配置分为三种类型:从副本的删除,主副本的删除,从副本的新增。

从副本的删除:

当主副本怀疑一个或者多个从副本失败时,会联系配置管理提议删掉这些从副本,当配置管理接受了这个提议之后,主副本会继续执行工作。

主副本的更改:

基于租约机制当从副本怀疑主副本失败,会提议删除主副本自己当主,当配置管理服务器批准后,该从副本当选主副本。开启recociliation,完成之后才开始处理新请求。

Reconciliation: 简单说就是新的primary需要把尚未提交的日志项提交了。并让其他从副本跟主副本进行同步。


从副本的新增:

一个新的副本加入replica-group,一开始作为一个candidate secondary. 主副本会继续处理请求发送准备消息prepare messages给candidate secondary. 一个candidate secondary会一边记录新的prepare message,一边去获取之前没有的请求列表来追赶进度。当它最终赶上后,它会成为从副本。

你可能感兴趣的:(PacificA 论文笔记(一))