这一点看的2020的课程
我会两年交叉着看
linearzable(线性一致性)
即对一个一致性系统进行一些读写操作的时候,所有的操作保证一个顺序执行,且不会读取到改操作时间范围外的数据。
这不是一个系统设计的定义,而是通过观察日志得到的一个结果。
一些词的理解
total order(理解为整个集群保证的一个全局的顺序)
real-time(全局统一的逻辑时间,一般类似的raft中term之类的东西)
在一个线性系统中我们不应该看到任何过时的数据,如果看到了是因为多副本的情况下有些副本得到了最新的数据,但是有些没有,所以在raft中一定是所有的follow都获得日志条目,leader才算一次commit从而防止这种现象。
为啥高效?
1.异步
2.非强一致性(暂时不确定)
状态复制
和raft有些差别。当node/2的follow日志复制成功,leader就算一次commit并响应client。
任何节点都可处理读请求,不一定非得是leader(允许follower读所以这里的问题是可能会读取旧数据)
zk中的日志index被称为zx id。
这里的理解就是请求需不需要带上zx id,如果带上的话,follower就不会立即返回,因为此时follower可能还没有这个版本的数据需要等leader同步完之后才能给client返回。如果不带zx id那就立即返回当前拥有的最新的数据。(整体来说是对读的一个优化,是对线性一致性的要求的放宽)。
网友评论