Paxos

2017/07/13

Paxos

一致性协议

2PC

二阶段提交

3PC

三阶段提交

Paxos

基于消息传递的一致性算法。

Paxos算法工程应用

Chubby

一致性算法

  • Paxos: Chubby
  • Raft: RDS, etcd, TiDBB
  • Zab: Zookeeper

分布式事务

CAP 分布式一致性理论

  • C 一致性
  • A 可用性
  • P 分区容错性

案例:

  1. Zookeeper CP强一致性
  2. 数据库主从复制、Kafka主从复制 AP高可用

BASE 分布式弱一致性理论

  • 基本可用
  • 柔性状态
  • 最终一致性

分布式ID

  1. UUID
  2. 单机数据库自增ID和号段模式(简单,新建一张自增ID表,每次获取ID就往这张表插入一条记录,获取返回的最新ID。然后用这个ID插入业务表)
  3. Redis incr命令(Redis需要持久化)
  4. Snowflake
      1. uid-generator 百度
      1. leaf(同时支持号段模式和snowflake算法模式,美团)

分布式锁

  1. 基于Redis实现 set
  2. 基于数据库实现 唯一索引
    • 新建一张锁表存储方法名,方法名字段唯一性约束
    • 执行方法前先让该表插入方法名记录,如果插入成功,则可以继续执行方法;插入失败,则说明其他线程获取了锁,则执行失败。
  3. 基于Zookeeper实现 临时节点

Zookeeper实现分布式锁

实现原理:利用Zookeeper的“瞬时节点”的特性。

实现步骤:

  1. 创建mylock目录
  2. 线程A获取锁就在mylock目录下创建临时顺序节点
  3. 判断该目录下是否有比自己小的节点,如果没有,则获取锁;如果有,则设置监听小的节点。
  4. 线程A删除自己的节点,释放锁。线程B监听到变更事件,重新判断是否是最小的,是,获取锁。

实现注意点:

  • 如何加锁、释放锁
  • 控制加锁的时间
  • 原理就是通过一个状态值来标识锁。

Post Directory