本文共 896 字,大约阅读时间需要 2 分钟。
(1)数据库的唯一索引
获得锁时向表中插入一条记录,释放锁时删除这条记录。
(2)Redis的SETNX指令
与数据库唯一索引类似,但是redis可以设置过期时间,用于超时释放。
缺点如果redis发生单点故障,则分布式锁无法使用。
(3)Redis的RedLock算法
使用多个Redis实例来实现分布式锁
(4)Zookeeper的有序节点
1)获取锁时,在/lock锁目录下创建临时且有序的子节点;
2)客户端判断创建的子节点为当前子节点列表中序号最小的子节点,则获得锁,否则监听前一个子节点,获得子节点的变更通知后重复此步骤直至获得锁。
3)执行业务代码,完成后,删除对应的子节点。
4)会话超时自动释放临时节点
(1)本地消息表
本地消息表与业务数据表在同一个数据库,利用本地事务对这两个表操作满足事务特性,使用消息队列保证最终一致性。
本地事务保证消息一定会写入本地消息表,之后消息转发到kafka等消息队列,成功则删除本地消息表。
分布式事务的另一方从消息队列中读取一个消息,并执行消息中的操作。
(2)2PC
1)准备阶段
协调者询问参与者事务是否执行成功,参与者返回事务执行结果。准备阶段,参与者执行了事务,但还未提交。
2)提交阶段
如果事务都执行成功,则协调者会让参与者提交事务,否则参与者回滚事务。
存在的问题:参与者等待其他参与者响应时同步阻塞,协调者单点问题、第二部中途出错导致数据不一致、一个失败整体失败没有容错机制
(3)CAP
一致性,可用性,分区容错性只能满足两个
(4)BASE
基本可用、软状态、最终一致性
对CAP理论中一致性和可用性权衡的结果,核心思想是每个应用应该采用适当的方式使系统达到最终一致性
(5)Paxos
三类节点:
提议者、提议一个值
接受者、对每个提议进行投票
告知者:被告知投票过程,不参与投票
执行过程:
1)Prepare阶段
2)Accept阶段
(6)Raft
分布式一致性协议,主要用来竞选主节点
三种节点:Follower、Candidate和Leader
转载地址:http://slbii.baihongyu.com/