1. 线性一致性 vs 顺序一致性中 Raft/多主复制各自保证哪种一致性,客户端如何观测?
线性一致性(linearizability)与顺序一致性(sequential consistency)有什么区别?Raft 与多主复制各自保证哪种?客户端如何观测?
- 线性一致性:操作有全局实时顺序,与真实时间一致
- 顺序一致性:只要求存在一个合法顺序,可重排
- Raft 单主多数派实现线性一致;多主复制通常只保证最终一致
线性一致性要求每个操作在"调用与返回之间"的某个时刻生效,所有操作存在一个与真实时间一致的全局顺序,任何客户端在任意时刻看到的都是该顺序的某个前缀——它是"最强"的一致性,等价于"单一系统 + 实时时钟"。顺序一致性只要求存在一个与程序顺序兼容的全局顺序(每个进程内操作保持程序顺序),允许该顺序与真实时间错位(如先返回后生效的窗口),客户端观测时只要最终能串出一个合法历史即可。Raft 通过"单领导者 + 多数派复制 + 日志顺序"实现线性一致性(配合 ReadIndex/Lease Read 可避免领导者读的线性化破坏),因为所有写操作经过同一领导者以同一顺序提交,读操作从领导者读到已提交日志。多主复制(multi-leader)中不同主节点接受写入、异步传播冲突,通常只保证最终一致性(即使配合冲突解决,也存在"两个客户端在不同时刻看到不同顺序"的窗口),要获得线性一致需额外协议(如严格串行化、全局时钟协调)。
本题考察一致性模型的"实时性"维度:线性一致性强在"与真实时间对齐",顺序一致性弱在"允许时间错位"。回答时先给出两者的形式化定义与差异例子,再分别说明 Raft 单主与多主复制的保证,最后讲客户端观测方法(线性一致可用"响应顺序 + 时钟"验证,顺序一致用"串行化历史"验证)。