baiwfg2 / awesome-readings

记录看各种文章、论文的心得
2 stars 0 forks source link

paper about depcouling of storage and compute #13

Open baiwfg2 opened 3 years ago

baiwfg2 commented 3 years ago

目前行业产品有以下几种,都有论文,我来一一抛出一些问题。

  1. Auroar
  2. Polardb
  3. Snowflake
  4. Tidb
  5. Spanner
baiwfg2 commented 3 years ago

Aurora

18年第二篇主要探讨的是Aurora 利用节点本地状态避免了分布式共识算法,简化了实现代价,也提高了性能。其中LSN 扮演重要角色

materialization

redo log 被下推到存储节点,如果不做某种形式的Checkpoint,那log chain 将会越来越长,按需读的性能也会变差。所以Aurora 存储节点有 materialization 过程,不过是否做materialization 与正确性无关; 而且,它只是对有大量修改的页做materialization,不像CP 对整个log chain 做。

但,materialize 出的page 是在存储节点的cache中吧,如果挂了,启动后又重新做materialization吗?那如果一个页的修改非常多,其log 很长,materialization 时间长呢?

在Fig3 ,主写redo log 到存储层同时,也将log & metadata 传给副本节点 (如果从主收到的log 在cache中没有对应的page,则丢弃此log,否则用log applicator 去apply。为什么计算层也有log applicator ?); 但没有谈:副本如何协同处理来自主的log 和来自存储层的Log ?

crash recovery

传统的db,启动时,从最新的CP出发,replay 那个点之后的log,可能需要很久。但是Aurora 的replay是放在存储层持续性地、异步地做,因为启动恢复不需要做太多 (那启动时做到什么程度为止?)

LSN

每个log record 存储上一个record 的LSN,前一个segment LSN,和被修改的block (这里的block 指的是volume的block还是指数据库的page ?)的前一个LSN。

PGMRPL

这是PG 的最小读LSN,在这个点之后的log 是没有读请求访问的,因此可以被GC 计算节点来计算它,会告知存储节点,因此存储节点会推进 materialized pages on disk ,方式就是将older log 合并到pages中,此后log 可以被GC

也就意味着:存储节点不仅存 log,还存 materialized pages

一致性

使用 read view 来实现SI,它代表一个点,在这点之前所有change都能看到,在这点之后的改变看不到。 在3.1 节说Aurora 不做quorum reads,这我奇怪了,不是说读要读3份吗?怎么就不quorum 了

说Aurora db 节点知道哪个segment 有数据块的最新持久版本,直接给那个存储节点发读请求就行了,顺便记下延时便于动态调整(尽可能向延时最低的节点发)

副本上的结构一致性

所谓structural consistency,貌似是指b-tree splits & merges. 3.3 节讲得不太清楚,没看懂。。目标就是保持副本节点的读是全局一致的

membership change

4 小节讲得还是不清楚,大概意思就是当存储节点挂掉时,如何保证read quorum, write quorum 是correct, safe, and reversible

baiwfg2 commented 3 years ago

tidb , vldb 2020

一个核心创新点是将raft 协议同时作用在TP, AP系统上。

通过增加learner 角色来实现数据从row-store 到column-store 的转换。learner 不参与选举,不是quorum 的一部分

PD (竟然)没有持久化的状态,一启动就是从其它 成员拿到信息

TIDB 实现了2PC 协议,基于Percolator

多个region 数据可以合并成一个partition ,这有利于TiFlash 做全表扫

4

region 默认大小是 96M

下图是典型的raft 读写过程: image

优化是:leader 不用等follower 返回,就可假设成功。如果发生错误,可以resend

没说resend 的次数 ??

4.1.2 linearizable read 的做法与raft 上的描述很像。 它们也有follower read

4.1.4 PD 动态地发split & merge 命令给tikv. 被分裂之后,新分裂出的region 可能被PD 根据负载情况 moved

4.2 TiFlash

由learner nodes 组成,只接收logs,不参与raft 协议和选举

同步若涉及大量数据,leader 发snapshot

5 tx

同时支持悲观和乐观上锁,来源于percolator models

实现分布式事务没有用中心式的锁manager

5.3 隔离与协调

分析型的请求进tiflash,事务型的进tikv

7 related work

cockroach DB 不支持SI,但支持 seria ??