分布式互斥

对排他性的资源访问方式,称为分布式互斥。而这种被互斥访问的排他性资源,就叫做临界资源
  • 如何访问
  • 霸道总载:集中式算法

    优点:直观、简单,信息交互量少、易于实现
    问题:协调者会成为系统性能瓶颈;单点故障
    增加主备备分,应用比较广泛
  • 民主协商:分布式算法

    先到先得、投票全票通过机制
    适合节点数量少且变动不频繁的系统,且由于每个程序均需通信交互,适合P2P系统
    应用场景:Hadoop
  • 轮值CEO:令牌环算法

    更加公平的算法
    非常适合通信模式为令牌环方式的分布式系统
    场景:移动自组织网络,无人机通信

分布式选举

集群多节点组成,多个节点到底怎么协同,怎么管理。
主节点:在一个集群中负责对其他节点的协调和管理,可以保证其他节点有序运行,数据一致性。

  • 选举算法
  • 长者为大:Bully算法
  • 民主投票:Raft 算法
  • 优先级的民主投票:ZAB算法

    多数派选主算法通常采用奇数节点:ZooKeeper 、etcd、Kubernetes

分布式共识

分布式共享地就是在多个节点均可独自操作或记录的情况下,使用得所有节点针对某个状态达成一致的过程
分布式共识的本质就是“存异求同”
从本质上看,分布式选举问题,其实就是传统的分布式共识方法,主要基于多数投票策略实现的。
分布式在线记帐,是指在没有集中的发行方,也就是没有银行参与的情况下,如何保证交易的一致性。

  • PoW (Proof of Work) 工作量证明
  • PoS (Proof of Stake) 权益证明
  • DPos (Delegated Proof of Stake) 委托权益证明

一致性是指,分布式系统中的多个节点之间,给定一系列的操作,在约定协议的保障下,对外界呈现的数据或状态是一致的。
共识是指,分布式系统中多个节点之间,彼此对某个状态成达一致结果的过程

分布式事务

分布式事务,就是在分布式系统中运行的事务,由多个本地事务组合而成

  • ACID
  • 原子性 (Atomicity)
    要么成要么败
  • 一致性 (Consistency)
    事务操作前和操作后,数据完整性保持一致
  • 隔离性 (Isolation)
    多个事务不会相互干扰
  • 持久性 (Durability)
    永久保存
  • 如何实现分布式事务
  • 二阶段锁
    同步阻塞问题
    单点故障问题
    数据不致问题
  • 三阶段锁
    锁定资源,降低性能
  • 消息队列
  • BASE 理论
  • 基本可用 Base Available
    分布式系统出现故障时,允许损失一部分功能的可用性
  • 柔性状态 Soft State
    允许系统存在中间状态,但不会影响系统整体可用性。比如,数据库读写分离,写库同步到读库会有一个延时,其实就是一种柔性状态
  • 最终一致性 Eventual Consistency
    事务在操作过程中可能会由于同步延迟等问题导致不一致,但最终状态下,数据都是一致的。

基于XA协议的2PC和3PC采用强一致性,基于消息的最终一致性方法,遵从BASE理论

分布式锁

锁是实现多线程同时访问同一共享资源,保证同一时刻只有一个线程可访问共享资源所做的一种标记

  • 实现方式
  • 基于数据库实现分布式锁
    创建一张锁表,为申请者在锁表里建立一条记录,记录建立成功则获得锁,消除记录则释放锁
  • 基于缓存实现分布式锁

    Redis 通过队列来维持进程访问共享资源的先后顺序
  • 性能更好,数据存放于内存
  • 很多缓存可跨集群部署
  • 很多缓存都提供可以用来实现分布锁的方法
  • 可以直接设置超时来控制锁的释放
  • 基于ZooKeeper 实现分布式锁
    可以完美解决设计分布式锁时遇到的各种问题。

ZooKeeper分布式锁的可靠性最高,有封装好的框架,很容易实现分布式锁的功能,几乎解决数据库锁和缓存锁的不足,是首选方法。

为了确保分布式锁的可用性,在设计时应考虑:

  • 互斥性
  • 具备锁失效机制
  • 可重入性
  • 有高可用的获取锁和释放锁的功能

如何解决分布式锁的羊群效应问题
??