`
synchronized_lala
  • 浏览: 40585 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

A brief introduction to chain replication and CRAQ

阅读更多

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

   a. 更新:只能发生在数据头节点,然后更新逐步后移,直到更新到达尾节点,尾节点逐步向前确认已经完成更新,并由尾节点向客户确认更新成功。写操作的向后传播是顺序的,即:每个节点上已完成的更新操作是其predecessor节点的子集。
   b. 查询:为保证强一致性,客户查询只能在尾节点进行

2. Master主要功能

   a. 检测数据节点失败;
   b. 在新增或删除节点时,通知数据节点其新的predecessor及successor;
   c. 告知client 链表的头节点和尾节点。

在作者的原型系统中,采用paxos协调master及其replicas,避免单点故障。

3. 故障

  master节点通过paxos算法保证服务一致性,只讨论数据节点故障。
  在出现故障时,优先考虑一致性,而不是可用行,原文如下:
   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.基本操作流程

     CRAQ流行于读为主的分布式存储架构中,它通过允许向任意的数据节点发送读请求来增强读的读取速率,同时它依旧提供强一致性的保证。
     相对于Chain Replication的扩展主要有如下:
  1. 每个数据节点会存储多版本的object,此版本号为递增且有clean或dirty的状态信息。初始化版本号的状态为clean。
  2. 当某个节点接收到一个object的修改操作,即此object带新的版本号。节点append这个最新的版本到它的object list。1)如果这个节点不是Tail节点,将此版本状态标记为dirty,并将请求发送给successor;2)如果是Tail节点,将此版本号提交,向其他节点发送可以提交此版本的ack。
  3. 当此ack发送到其他节点的时候,此节点将ack中的提到的版本号状态置为clean,并可以删除之前版本的object。
  4. 当某个节点收到read请求的时候:1)此版本是clean状态,则将value返回给client;2)否则,此节点将请求Tail获知最近提交的版本号,然后回复给client。

2.流程图如下:


 本文有3幅图来自Object Storage on CRAQ High-throughput chain replication for read-mostly workloads

 

 

分享到:
评论

相关推荐

    神经网络简介A Brief Introduction to Neural Networks

    神经网络作为一种重要的机器学习模型,在计算机科学领域内占据了举足轻重的地位。本文将基于给定文件中的信息,深入探讨神经网络的基本概念、发展历程、主要类型及其应用领域,旨在为读者提供一个全面而深入的理解。...

    A Brief Introduction to PySpark

    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

    文章提到的标题“A brief Introduction to Neural Networks”(神经网络简介),内容提到了神经网络的原理、结构、学习过程等基础知识,以及以Java语言编写的神经网络框架。文中强调了神经网络的学习目的在于为读者...

    a brief introduction to opennp

    OpenMP是一个支持多平台共享内存并行编程的API,它能够在C/C++和Fortran语言中使用。它提供了一组编译制导(编译指导语句)、库函数和环境变量,用以简化多线程的开发。OpenMP以简洁的方式实现了线程的创建、分配...

    A Brief Introduction to Boosting

    ### 提升算法(Boosting)简介 #### 一、引言 提升算法(Boosting)是一种通用的方法,用于提高任何给定学习算法的准确性。它最初源于理论框架下的研究,即所谓的“PAC”(Probably Approximately Correct)学习模型...

    a brief introduction to index theorems

    指标定理的介绍,来自知乎蓝青的论文,图片归集成pdf,便于阅读

    A Brief Introduction to Machine Learning for Engineers

    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: A Brief Introduction to Operating Systems

    《Think OS:操作系统简明入门》是Allen B. Downey所著的一本入门级操作系统教材,主要面向那些对操作系统设计和实现感兴趣的读者。该书不仅涵盖了操作系统的基础知识,还通过实际案例和示例程序,帮助学生和自学者...

    Think OS:操作系统简介Think OS: A Brief Introduction to Operating Systems

    Think OS是面向程序员的操作系统介绍。 计算机架构知识不是先决条件。

    An Introduction to Project Management With a Brief Guide to Microsoft epub

    An Introduction to Project Management With a Brief Guide to Microsoft Project 2013(5th) 英文epub 第5版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或...

    A Brief Introduction to Machine Learning

    在给定的文件中,作者Osvaldo Simeone在其著作《A Brief Introduction to Machine Learning for Engineers》(工程师的机器学习简明入门)中,为我们提供了一个系统性的机器学习概念介绍,其中包括了监督学习、非...

    A Brief Introduction to Scala

    ### Scala简介:结合函数式与面向对象编程的强大语言 #### Scala概述 Scala是一种相对新兴的编程语言,旨在为Java虚拟机(JVM)以及后来的通用语言运行时(CLR)提供支持。它融合了函数式编程(Functional Programming,...

    A BRIEF INTRODUCTION TO HILBERT SPACE FRAME THEORY AND ITS APPLICATIONS.pdf

    其中\(0 < A \leq B ),并且\(A, B\)被称为框架的下界和上界。 如果等式两侧相等,即\(A = B\)时,这样的框架称为\(A\)-紧框架;特别地,当\(A = B = 1\)时,称其为帕塞瓦尔框架。如果所有框架向量的范数都相同,则...

    A brief introduction to MetaPost

    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

    标题与描述:“A Brief Introduction to Sigma Delta Conversion”的深入解析 标题和描述中提及的“Sigma Delta Conversion”(ΣΔ转换)是一种在模拟信号与数字信号之间进行转换的技术,尤其是在低带宽信号转换中...

    人工智能的教育意义简介Brief Introduction to Educational Implications of Artificial Intelligence

    这本简短的书介绍了人类如何利用人工智能来解决问题和完成任务。

    A Brief Introduction to SystemVerilog Instructor.pdf

    《A Brief Introduction to SystemVerilog Instructor.pdf》是一份针对计算机体系结构课程(CSE 502)的教学材料,由Nima Honarmand教授撰写,并在Spring 2015学期使用。该文档主要介绍了SystemVerilog的基础概念、...

    A Brief Introduction to Boosting.pdf

    本文档《A Brief Introduction to Boosting.pdf》主要介绍了提升算法的基本概念、理论基础以及一个具体的提升算法——AdaBoost。 #### 二、提升算法的背景与理论框架 提升算法的起源可以追溯到上世纪80年代末期。...

Global site tag (gtag.js) - Google Analytics