# 简介

说白了就是 CR 的加强版,将读请求分摊到链上的每个 replicas,搭配 zookeeper 实现了分布式容错机制。

# 基本模型

image-20220306192043325

CRAQ (Chain Replication with Apportioned Queries), 只会提供两个原语,读和写。

两种一致性:

强一致性:所有读操作都能读到最新的数据。

最终一致性:所有节点 apply write order 相同,但是读操作可能读到 stale data。

CRAQ 能够保证强一致性。

# Chain Replication

这张图足够解释 Chain Replication:

image-20220307111243918

所有的 write request 都必须通过 head 来处理,head 处理 write,也就是修改对应的 object。注意每个 object 都有一个 version 。修改 object 后 version 也会随之改变。当 head 收到了 write 请求之后就会将这个 write operation 通过 chain 传递下去。在 tail 处才会 commit 这个 write,并且把 reply 返回给 client。

# Chain Replication with Apportioned Queries

Object 在 replicas 上有不同的 version,每个 version 有两种状态: cleandirty

clean :当 object 被创建时,它的对应 version 是 clean。只有 clean 状态 version 才能被读取。

dirty :当 object 被修改后 version 后增加。如果节点不是 tail,那么它需要将这个 version 的 object append。并将这个 version 标为 dirty

只有 tail 的 committed 才能将 version 从 dirty 转换为 clean

image-20220307113000838

Figure 3 很好地解释了 Query 方式,对于一个 Query 来说:

  1. 如果查询的这个 object 的最新的 version 是 clean,那么就将这个 object 返回。
  2. 如果对应的 version 是 dirty,那么 replicas 向 Tail 询问哪个 version 是 clean 的。tail 返回 clean 的 version 号。
  3. replicas 将对应 clean version 的 object 返回给 client。

注意:如果一个 version 被确认为 clean,它会删除之前所有 dirty version。但 clean version 之后的却不会被删除!

将像图 3 所示,V1 被确认为 clean version,它会删除 V0(如果有 V0 的话),而不会删除 V2。

通过这样的机制就可以让每一个 replicas 承担 read,并且还保证了强一致性

# Scaling CRAQ

这一块有点模糊,大致是看懂了。。。

一个 object 的 identifier 有两个组成

chain identifier :决定有哪些节点会构成这条链

key identifier :决定这个 object 在这条链中的唯一标识

# 链放置策略

image-20220307122506089

第一种:指定确定数量的 num_datacenters 将会构成链,总共有 chain_size 的链,使用一致性 hash 来决定 datacenter identifier。

image-20220307122714827

第二种:链的头部是 dc1,链的尾部是 dcN。严格按照这个顺序定义链。

image-20220307122908296

第二种:虽然链的顺序定义了,但是每个 datacenter 能放置的链数量也是限定的。

# CRAQ within a Datacenter

一个 datacenter 中如何选择或者说处理多个链通过该 datacenter。这里有两种方法:

  • 一致性 hash。
  • 类似于 GFS 的 membership management。

# CRAQ Across Multiple Datacenters

CRAQ’s ability to read from any node improves its latency when chains stretch across the wide-area.

CRAQ 能够显著降低延迟,当 CRAO across wide area。

# 后面部分待续

# 听课