一致性与共识
2021-06-30 21:00:26 0 举报
AI智能生成
Go 标准库
作者其他创作
大纲/内容
共识问题
共识问题
核心场景
主节点选举
原子事务提交
不可能性
主要议题
可线性化的「比较设置」寄存器
原子事务提交
全序广播
锁与租约
成员协调服务
唯一性约束
原子提交与两阶段提交:停止服务/人工介入
事务原子提交
单节点
多节点
失败原因
两阶段提交(2PC)
基本流程
申请全局事务 id
单点执行事务
准备提交事务
执行提交事务
协调者故障
准备阶段故障
提交阶段故障
三阶段提交(3PC)
分布式事务实践
Exactly-Once 消息处理
XA 交易
停顿时仍持有锁
从协调者故障中恢复
局限性
单点故障
有状态
高复杂度
低容错
支持容错的共识:自动切换
共识算法与全序广播
主从复制与共识
Epoch 和 Quorum
局限性
同步复制
故障误判
多数节点
静态成员组成
网络问题敏感
成员与协调服务
节点任务分配
服务发现
成员服务
顺序保证
顺序与因果关系
因果顺序并非全序
可线性化强于因果一致性
捕获因果依赖关系
序列号排序
非因果序列发生器
Lamport 时间戳
局限性
全序关系广播
使用全序关系广播
全序关系广播 -> 线性化存储
原子比较设置
追加日志
线性化读取
线性化存储 -> 全序关系广播
一致性保证
数据一致性
最终一致性
线性一致性
因果一致性
顺序一致性
其他
事务一致性
事务 ACID
隔离性
ANSI SQL-92
未提交读(RU)
已提交读(RC)
可重复读(RR)
可串行化(Serializable)
Critique
访问异常
幻读
写倾斜
隔离级别
快照隔离(SI)
技术实现
多版本并发控制(MVCC)
产品实现
可串行化
两阶段封锁(2PL)
单进程
可串行化快照隔离(SSI)
可线性化
达成条件
可线性化与可串行化
依赖条件
加锁与主节点选举
约束与唯一性保证
跨通道的时间依赖
实现方式
主从复制(部分支持可线性化)
共识算法(可线性化)
多主复制(不可线性化)
无主复制(可能不可线性化)
线性化代价
CAP 理论
非线性系统
网络延迟
分布式协议
强一致性
Basic Paxos
分布式共识的复杂性
通信不可靠
并发访问
节点角色
提案节点(Proposer)
决策节点(Acceptor)
记录节点(Learner)
执行流程
操作步骤
准备阶段(Prepare)
两个承诺
一个应答
批准阶段(Accept)
提案节点:广播 Accept 请求
决策节点:响应 Accepted 应答
达成共识:记录节点学习达成协议
工作实例
存在问题
活锁
Multi Paxos
在 Basic Paxos 上改进
加入选主流程
选主提案节点
主节点形成提案、决议
主节点任期
主从节点
Raft
共识的核心问题
如何选主(Leader Election)
如何复制数据(Entity Replication)
正常情况
异常情况
网络分区
双主形成
客户端操作
故障恢复
如何保证安全(Safety)
协定性(Safety):所有的坏事都不会发生
终止性(Liveness):所有的好事都终将发生,但不知道什么时候
最终一致性
Gossip
基本特点
无连通性稳定性要求
可容忍节点增减
所有节点平等
不一致且状态不可预测
消息冗余、带宽压力大
执行过程
随机传播
消息扩散
传播模式
反熵(Anti-Entropy)模式
传谣(Rumor-Mongering)模式
0 条评论
下一页