Paxos
一致性协议
2PC
二阶段提交
3PC
三阶段提交
Paxos
基于消息传递的一致性算法。
Paxos算法工程应用
Chubby
一致性算法
- Paxos: Chubby
- Raft: RDS, etcd, TiDBB
- Zab: Zookeeper
分布式事务
CAP 分布式一致性理论
- C 一致性
- A 可用性
- P 分区容错性
案例:
- Zookeeper CP强一致性
- 数据库主从复制、Kafka主从复制 AP高可用
BASE 分布式弱一致性理论
- 基本可用
- 柔性状态
- 最终一致性
分布式ID
- UUID
- 单机数据库自增ID和号段模式(简单,新建一张自增ID表,每次获取ID就往这张表插入一条记录,获取返回的最新ID。然后用这个ID插入业务表)
- Redis incr命令(Redis需要持久化)
- Snowflake
-
- uid-generator 百度
-
- leaf(同时支持号段模式和snowflake算法模式,美团)
-
分布式锁
- 基于Redis实现 set
- 基于数据库实现 唯一索引
- 新建一张锁表存储方法名,方法名字段唯一性约束
- 执行方法前先让该表插入方法名记录,如果插入成功,则可以继续执行方法;插入失败,则说明其他线程获取了锁,则执行失败。
- 基于Zookeeper实现 临时节点
Zookeeper实现分布式锁
实现原理:利用Zookeeper的“瞬时节点”的特性。
实现步骤:
- 创建mylock目录
- 线程A获取锁就在mylock目录下创建临时顺序节点
- 判断该目录下是否有比自己小的节点,如果没有,则获取锁;如果有,则设置监听小的节点。
- 线程A删除自己的节点,释放锁。线程B监听到变更事件,重新判断是否是最小的,是,获取锁。
实现注意点:
- 如何加锁、释放锁
- 控制加锁的时间
- 原理就是通过一个状态值来标识锁。