作用:可靠性、高性能、容错性
问题:如何保持一致、如何更新
问题:存在读写/写写冲突
一个简单的方法就是每个操作都保持顺序,但是因为网络延迟会导致问题
Data-centric models:
consistency model??
???
读取时,客户希望得到最后一次写操作后的结果,但是全局时钟不存在==》矢量时钟
对于每个进程来说,只能操作本地副本,副本之间进行同步
strict consistency 严格一致性 —>理想模型
定义:所有读到的结果都是最后一次写操作的结果;A,B,C中其中1个副本改变,其他2个进程能够立即读取到这个改变(不可能,存在网络延迟)
条件:1.全局瞬时改变 2.存在全局时钟 3. 写操作瞬时对所有进程可见
sequential consistency 顺序一致性
定义:无论操作顺序,其他进程得到结果一致;来自不同进程的操作式可以交换的(interleaved),但是结果一致;单独进程内的操作以顺序区分(specified)
线性一致性
??????
因果一致性(causal consistency)
具备因果关系的3种情况:
1、
P
1
P_1
P1写,
P
2
P_2
P2读,
R
2
(
X
)
R_2(X)
R2(X),
W
1
(
X
)
W_1(X)
W1(X)
2、
P
1
P_1
P1读,
P
2
P_2
P2写,
W
2
(
X
)
W_2(X)
W2(X),
R
1
(
X
)
R_1(X)
R1(X)
3、
P
1
P_1
P1写,
P
2
P_2
P2读后再写,
W
2
(
X
)
W_2(X)
W2(X),
W
1
(
X
)
W_1(X)
W1(X)
不在这3条内的,则位concurrent
因果关系
≠
\neq
= 因果一致性
a:存在因果关系操作。P_1写a操作,P_2先读a在写a操作,因此存在因果关系操作。P_3、P_4作为监控进程,在a中两个监控进程的结果不同,所以无因果一致性
b:没有因果操作,所以是concurrent;但是存在因果一致性??
=》不断跟踪不同进程做了什么操作
First-in-First-out FIFo—》队列
????????????????????????????????????????????????????????????????????????????????????????????????????
对于三个操作、三个副本、三个进程
对于一个操作来说,操作本地副本(master副本),写操作集中,其他进程只读
写完后数据同步:返回ACK确定给客户
怎么同步:一段时间的log日志,其他进程读取log文件进行redo操作进行同步 ----》最终一致性eventual consistency
redo,undo恢复机制
Client Centric Consistency
Monotonic Read单调读
只要读,接下来读到的只是相同的或更加新的数据
???
Monotonic Write单调写
上个写完了,下个写
Read-Your-Write
Write-Follow-Reads
Replica Placement 副本存放
permenant replica
server-initiated replica
client-initiated replica