一、分布式互斥
多个请求只有第一个可以取得资源,其他请求需要等待资源释放,这种资源称为临界资源。
1、霸道总裁式:引入一个协调者,先来先得。简单高效,但可用性低。适用于协调者可靠性和性能有一定保障的前提下的广泛场景。
2、民主协商式:征得其他请求同意后使用临界资源。可用性高,但复杂度高、通信成本高。适用于系统规模小且资源使用频率低。
3、轮值CEO(令牌环):所有参与者为一个环,轮流使用。单个参与者通信效率高可用性高,但当参与者使用频率低时有较多的无用通信。适用于系统规模小且每个程序使用资源频率高时间短。

二、分布式选举
分布式系统中多节点选举出有一个主,负责数据同步,保持各节点的一致性。本质上选举问题就是传统的分布式共识方法,主要是基于多数投票策略实现的。
1、Bully:节点ID最大的的为leader。易于实现复杂度低,但信息存储量大且频繁易主。适用小规模场景如MongoDB集群。
2、Raft:少数服从多数。速度快复杂度低,但系统需要全链且通信量大。适用于中小规模场景如k8s集群三节点选举。
3、ZAB:倾向于数组最新或节点ID最大的作为主。性能高无环境特殊需求,但选举时间长复杂度高。适用于大规模分布式场景如Zookeeper

三、分布式共识 - 求同存异
基于多数投票策略的分布式选举方法,用于分布式在线记账一致性问题中,那么记账权通常会完全掌握到主节点的手里,这使得主节点容易造假且存在性能瓶颈。分布式在线记账,是指没有集中的发行方(银行),任意一台电脑都能参与买卖,所有看到该交易的服务器都可以记录这笔交易,并且记录信息最终都是一致的,以保证交易的准确性。如区块链技术。
共识描述的是达成一致的过程,一致性强调的是结果。
1、PoW:按劳分配,每节点靠算力竞争记账权。相对公平、有容错、去中心,但不适合私有链、共识效率低、交易服务费高。如比特币。
2、PoS:由系统权益代替算力决定区块记账权的共识机制,权益越大越容易。资源消耗低、服务费低、达成共识周期短,但交易量较低、容易垄断、无法处理分叉连。如以太坊、点点币。
3、DPoS:解决PoS垄断问题,由持币人进行投票选出一个节点作为代表来参与竞争。能耗低、交易量高、无垄断、服务费低,但持币人投票积极性不高、故障解决效率低。如太股、EOS等。

四、分布式事务
ACID:原子性、一致性、隔离性、持久性。强调的是强一致性。即刚性事务。
BASE:基本可用(Basically Available)、柔性状态、最终一致性。弱化后ACID,强调的是最终一致性。即柔性事务。
1、基于XA的二阶段提交协议:一个中央协调者,先把请求发给各节点,节点处理完毕后返回YES/NO;各节点都返回YES时,协调者发送提交请求。强一致性、同步执行、简单,但同步阻塞、单点故障、性能低、数据不一致问题。
2、三阶段提交协议:引入了超时机制,二阶段中间增加了准备机制,解决了同步阻塞和单点故障问题。强一致性、同步执行、无同步阻塞、无单点故障,但性能低、数据不一致。
3、基于分布式消息的最终一致性:事务通过消息或日志来异步执行,通过业务规则进行业务重试,增加多种中间状态,如已下单未付款、已付款商家未确认等。先请求MQ,MQ执行下单;再请求MQ、MQ执行库存;再请求MQ、MQ执行通知仓储。最终一致性、异步执行、无同步阻塞、无单点故障、高性能,但算法复杂度高。

五、分布式锁
1、数据库:创建一张锁表。容易理解,但单点故障、死锁问题、性能低、可靠性低。适用于性能和并发量低的场景。
2、redis缓存:通过setnx实现,并设置过期时间。性能高、有集群、易于实现,但可靠性不如Zookeeper、锁失效时间的控制不稳定。适用于高并发、高性能的场景。
3、ZooKeeper:对应的持久节点目录下为每个进程创建临时顺序节点,每个节点确定编号是否最小,最小编号获得锁,否则等待。无单点、无不可重入、无死锁、解决数据库锁和缓存锁的不足、可靠性高、易于实现,但性能不如内存缓存式高、难以理解。适用于大部分场景,但不适合极高性能要求的场景。

标签: 分布式

添加新评论