A brief introduction to chain replication and CRAQ
本文介绍的是在保证高可用和高吞吐的情况下,不以牺牲强一致性为代价提供分布式存储服务。
一、关于Chain Replication
CAP:对于分布式存储服务,不可能同时满足可用性、一致性和分区容错性(数据分布性的大小对系统的正确性、性能的影响)。由于分区容错性是分布式系统的基本需求,所以,分布式系统一般在可用性和一致性中做权衡。
链式复制期望从Replication的角度,保证系统的高可用和强一致性,其设计思路如下:
前提:
1. query、update是按某种顺序执行的
2. 更新操作生效后,会被后续的查询感知到
3. 查询操作幂等,更新操作不保证幂等。客户端的更新操作没有收到落地反馈需要重发,客户端不区分发起失败与服务处理失败。由于更新不幂等,客户端需要等待发起的更新操作的反馈,需要控制请求流量。
4.一些名词的简介例如:
Pedding:待处理的请求序列;
Sent:收到请求本地完成但TAIL还没回复完成的请求序列;
Hist:收到请求并TAIL也完成的请求序列
1.数据relication采用Chain Replication
b. 查询:为保证强一致性,客户查询只能在尾节点进行
2. Master主要功能
a. 检测数据节点失败;b. 在新增或删除节点时,通知数据节点其新的predecessor及successor;
c. 告知client 链表的头节点和尾节点。
在作者的原型系统中,采用paxos协调master及其replicas,避免单点故障。
3. 故障
在出现故障时,优先考虑一致性,而不是可用行,原文如下:
Servers are assumed to be fail-stop:
• each server halts in response to a failure rather than making erroneous state transitions, and
• a server’s halted state can be detected by the environment
我们看下不同节点故障,如何保证服务的强一致性
a. Head节点故障:successor节点成为新的Head节点,Head节点中已传播的更新继续传播,未传播的更新可以反馈给用户更新失败,不影响整体服务的强一致性。
b. 中间节点故障:master故障节点的successor(S+)更新其predecessor,S+ 应答并告诉master S最近发送的update请求的sequence(存放TAIL可能还未处理的update请求,升序的),及通知故障节点的predecessor节点更新successor并知道从哪个sequence开始往S+发送数据,并不影响一致性。流程如下图,S发生故障。
c. Tail节点故障:Tail节点的predecessor节点成为新的TAIL节点,由于这个predecessor节点已有更新是TAIL节点的超集,从用户的角度看,数据变多了,个人理解在此故障处理完后这个新的Tail可以将原先的Tail没有处理完但是自己已经处理完的请求直接发给client,并不影响用户读一致性。
Extending a Chain:故障节点被master从chain中摘除后,为了可靠性,需要扩展chain的节点。选择一个节点T+加入chain的尾部,将Hist_T(已处理完update请求的序列)的数据存储到T+。在此操作的同时,T可以继续处理client端的query请求,以及它的perdecessor的update请求并将之放到sent_T(存放TAIL可能还未处理的update请求)。当Hist_T=Hist_T+ 及sent_T的并集时,通知T不再是Tail节点且不再为client提供query处理(更好的方式是将此请求发送给T+),将sent_T的请求都发到T+,master通知新的Tail是T+。通知clients之后的query请求直接发送到T+。
Tail落地后将ack反向返回到head,各层节点更新Hist和Pending 集合
以上内容有借鉴:链式复制
二、关于CRAQ(Chain Replication with Apportioned Queries )
1.基本操作流程
- 每个数据节点会存储多版本的object,此版本号为递增且有clean或dirty的状态信息。初始化版本号的状态为clean。
- 当某个节点接收到一个object的修改操作,即此object带新的版本号。节点append这个最新的版本到它的object list。1)如果这个节点不是Tail节点,将此版本状态标记为dirty,并将请求发送给successor;2)如果是Tail节点,将此版本号提交,向其他节点发送可以提交此版本的ack。
- 当此ack发送到其他节点的时候,此节点将ack中的提到的版本号状态置为clean,并可以删除之前版本的object。
- 当某个节点收到read请求的时候:1)此版本是clean状态,则将value返回给client;2)否则,此节点将请求Tail获知最近提交的版本号,然后回复给client。
2.流程图如下:
本文有3幅图来自Object Storage on CRAQ High-throughput chain replication for read-mostly workloads
相关推荐
神经网络作为一种重要的机器学习模型,在计算机科学领域内占据了举足轻重的地位。本文将基于给定文件中的信息,深入探讨神经网络的基本概念、发展历程、主要类型及其应用领域,旨在为读者提供一个全面而深入的理解。...
If you’re already familiar with Python and libraries such as Pandas, then PySpark is a great language to learn in order to create more scalable analyses and pipelines. The goal of this post is to ...
文章提到的标题“A brief Introduction to Neural Networks”(神经网络简介),内容提到了神经网络的原理、结构、学习过程等基础知识,以及以Java语言编写的神经网络框架。文中强调了神经网络的学习目的在于为读者...
OpenMP是一个支持多平台共享内存并行编程的API,它能够在C/C++和Fortran语言中使用。它提供了一组编译制导(编译指导语句)、库函数和环境变量,用以简化多线程的开发。OpenMP以简洁的方式实现了线程的创建、分配...
### 提升算法(Boosting)简介 #### 一、引言 提升算法(Boosting)是一种通用的方法,用于提高任何给定学习算法的准确性。它最初源于理论框架下的研究,即所谓的“PAC”(Probably Approximately Correct)学习模型...
指标定理的介绍,来自知乎蓝青的论文,图片归集成pdf,便于阅读
A Brief Introduction to Machine Learning for Engineers (Foundations and Trends(r) in Signal Processing) By 作者: Osvaldo Simeone ISBN-10 书号: 168083472X ISBN-13 书号: 9781680834727 出版日期: 2018-08-...
《Think OS:操作系统简明入门》是Allen B. Downey所著的一本入门级操作系统教材,主要面向那些对操作系统设计和实现感兴趣的读者。该书不仅涵盖了操作系统的基础知识,还通过实际案例和示例程序,帮助学生和自学者...
Think OS是面向程序员的操作系统介绍。 计算机架构知识不是先决条件。
An Introduction to Project Management With a Brief Guide to Microsoft Project 2013(5th) 英文epub 第5版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或...
在给定的文件中,作者Osvaldo Simeone在其著作《A Brief Introduction to Machine Learning for Engineers》(工程师的机器学习简明入门)中,为我们提供了一个系统性的机器学习概念介绍,其中包括了监督学习、非...
### Scala简介:结合函数式与面向对象编程的强大语言 #### Scala概述 Scala是一种相对新兴的编程语言,旨在为Java虚拟机(JVM)以及后来的通用语言运行时(CLR)提供支持。它融合了函数式编程(Functional Programming,...
其中\(0 < A \leq B ),并且\(A, B\)被称为框架的下界和上界。 如果等式两侧相等,即\(A = B\)时,这样的框架称为\(A\)-紧框架;特别地,当\(A = B = 1\)时,称其为帕塞瓦尔框架。如果所有框架向量的范数都相同,则...
vardef spiral(expr n, a, b) = if n > 0: a for i = 1 upto n: -- b rotatedaround((0, 0), 90 * i) .. fi enddef; ``` #### 25. 递归路径 递归路径是 MetaPost 中的一种特殊类型的路径,它可以用来构建复杂的...
标题与描述:“A Brief Introduction to Sigma Delta Conversion”的深入解析 标题和描述中提及的“Sigma Delta Conversion”(ΣΔ转换)是一种在模拟信号与数字信号之间进行转换的技术,尤其是在低带宽信号转换中...
这本简短的书介绍了人类如何利用人工智能来解决问题和完成任务。
《A Brief Introduction to SystemVerilog Instructor.pdf》是一份针对计算机体系结构课程(CSE 502)的教学材料,由Nima Honarmand教授撰写,并在Spring 2015学期使用。该文档主要介绍了SystemVerilog的基础概念、...
本文档《A Brief Introduction to Boosting.pdf》主要介绍了提升算法的基本概念、理论基础以及一个具体的提升算法——AdaBoost。 #### 二、提升算法的背景与理论框架 提升算法的起源可以追溯到上世纪80年代末期。...