apple developer account:《Object Storage on CRAQ: High-throughput chain replication for read-mostly workloads》论文总结

admin 3个月前 (07-10) 科技 44 0

CRAQ 论文总结

说明:本文为论文 《Object Storage on CRAQ: High-throughput chain replication for read-mostly workloads》 的小我私家明白,难免有明白不到位之处,迎接交流与指正 。

论文地址:CRAQ Paper

0. 简介

Chain Replication with Apportioned Queries (CRAQ) 是一种对链式复制的改善,它通过在所有工具副本上分配负载,在保持强一致性的同时极大地提高了读吞吐量。

本文主要对链式复制、CRAQ 原理以及 CRAQ 的一致性模子做出总结。

1. 工具存储

基于工具 的存储中,数据作为整个单元出现给应用程序。

工具存储支持两种基本原语:

  • readquery 操作返回存储在工具名称下的数据块
  • writeupdate 操作更改单个工具的状态

工具存储更适合于平面名称空间,例如键值数据库,而不是条理目录结构。工具存储简化了支持整个工具修改的历程,通常,它们只需要思量对特定工具的修改顺序,而不是整个存储系统。为每个工具提供一致性保证成本要低得多。

2. 一致性模子

本文涉及到的两种一致性模子为:

  • 强一致性:系统保证对一个工具的读写操作都以顺序执行,而且对于一个工具的读操作总是会观察到最新被写入的值。
  • 最终一致性:在系统中,对一个工具的写入仍是按顺序在所有节点上应用的,但对差别节点的最终一致性读取可能会在一段时间内(即,在写操作应用于所有节点之前)返回过时的数据。然则,一旦所有副本都接收到写入操作,则读操作将不会返回比最新提交的写操作更早的版本。事实上,若是一个 client 维护与特定节点的会话,那么它也会看到单调的读一致性。

3. 链式复制

链式复制 (Chain Replication、CR) 是一种跨多个节点复制数据的方式:

  • 节点形成一个长度为 C 的链
  • 链的头部节点处置来自客户端的所有写操作
  • 当一个节点接收到写操作时,它将流传到链中的每一个节点
  • 一旦写入到达尾部节点,它就被应用于链中的所有副本,而且被认为是提交的
  • 当尾节点提交写操作时,会向客户端发送一个回复
  • 尾部节点处置所有读操作,因此只有提交的值才气由读操作返回

链式复制实现了 强一致性:由于所有的读操作都是在尾部举行的,而所有写操作都在尾部提交,以是链尾可以简朴地对所有操作应用一个总的顺序。

链式复制的简朴拓扑使得写操作比提供强一致性的其他协议消耗更小。如在 Raft 中,leader 需要将每次写操作都发送给所有的 follower ,然则 CRAQ 中,head 只需要将每一次写操作发送一次;而且 Raftleader 需要处置读写操作,而 CRAQ 中的 head 只需要处置写操作。

链式复制的 故障恢复

  • 当头节点出故障时:后续节点取代它成为头节点,没有丢失的已提交写操作
  • 当尾节点出故障时:前一个节点取代它成为尾节点,没有丢失的写操作
  • 当中心节点故障时:从链中去掉,前一个节点需要重新发送最近的写操作

局限性:对一个工具的所有读取必须都要转到同一个节点,尾节点的负载很大。

4. CRAQ

4.1 CRAQ原理

CRAQ 是链式复制的一种改善,它允许链中的任何节点执行读操作:

  • CRAQ 每个节点可以存储一个工具的多个版本,每个版本都包罗一个单调递增的版本号和一个附加属性( 标识 clean 照样 dirty

  • 当节点接收到工具的新版本时(通过沿向下流传的写操作),该节点将此最新版本附加到该工具的列表中

    • 若是节点不是尾节点,则将版本标记为 dirty ,并向后续节点通报写操作
    • 若是节点是尾节点,则将版本标记为 clean ,此时写操作是 已提交 的。然后,尾节点在链中往回发送 ACK 来通知其他节点提交
  • 当工具版本的 ACK 到达节点时,该节点会将工具版本标记为 clean 。然后,该节点可以删除该工具的所有先前版本

  • 当节点收到工具的读请求时:

    • 若是请求的工具的最新已知版本是清洁的,则节点将返回此值
    • 否则,节点将与尾节点联系,询问尾节点上该工具的最后提交版本号,然后,节点返回该工具的此版本

4.2 CRAQ性能提升

CRAQ 相对于 CR 的吞吐量改善发生在两种差别情形下:

  • 读密集型事情负载:读操作可以在所有节点上执行,因此吞吐量与链长度呈线性比例关系
  • 写密集型事情负载:大量写操作的事情负载中,更容易读取到 dirty 数据,因此对尾节点的查询请求比较多。然则对尾节点查询的事情负载远低于所有读请求都由尾节点来执行的事情负载,因此 CRAQ 吞吐量高于 CR

4.3 CRAQ的一致性模子

对于读操作, CRAQ 支持三种一致性模子:

  • 强一致性4.1 中形貌的读操作可以使每次读取都读到最新写入的数据,因此提供了强一致性
  • 最终一致性:允许节点返回未提交的新数据,即允许 client 可从差别的节点读到不一致的工具版本。然则对于一个 client 来说,由于它与节点确立会话,以是它的读操作是保证单调一致性的。
  • 带有最大不一致界限的最终一致性:允许节点返回未提交的新数据,然则有不一致性的限制,这个限制可以基于版本,也可以基于时间。如允许返回一段时间内新写入但未提交的数据。

4.4 split-brain 问题

若两个相邻节点之间的网络连接断开,后面的节点会想去成为头节点,这样就会发生两个头节点。

CRAQ 自己并不会解决这样的问题,以是需要外部的分布式协调服务来解决这一问题,如使用 Zookeeper 。由 Zookeeper 来决议链的组成,决议哪个节点是头、尾,并监控哪个节点出了故障。当发生网络故障时,由 Zookeeper 来决议链的新组成,而不是基于各节点对于网络情形的自身感知。

,

欧博开户网址

欢迎进入欧博开户网址(Allbet Gaming):www.aLLbetgame.us,欧博网址开放会员注册、代理开户、电脑客户端下载、苹果安卓下载等业务。

文章归档

站点信息

  • 文章总数:348
  • 页面总数:0
  • 分类总数:8
  • 标签总数:711
  • 评论总数:20
  • 浏览总数:3418