分布式理论 | 青训营笔记

79 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天

概述

分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标。可以分为分布式计算、分布式存储、分布式数据库等。

系统模型

分布式系统面临的一大难题是故障引起的共识与消息一致性问题。分布式系统要做到在单个发生故障的情况下依旧做到数据的正确性,为此需要设计一系列算法。

理论基础

CAP理论

  • C: Consistence,一致性,指数据在多个副本之间能够保持一致的特性。
  • A: Availability,可用性,指系统提供的服务必须一直处于可用的状态,但是不保证请求数据为最新数据。
  • P: Network partitioning,分区容错性,分布式系统在遇到任何网络分区故障的时候,仍对外提供一致性和可用性。

在网络发生分区的情况下,必须在可用性和一致性之间做出角色。解决方法是故障转移。

ACID理论

数据库事务拥有四个特性ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。

  • 原子性:操作要么全部成功,要么全部回退。
  • 一致性:事务执行前后必须都处于一致性状态。
  • 隔离性:多个用户并发访问时,用户之间的事务必须相互隔离。
  • 持久性:一个事务一旦被提交,即使系统故障也不能丢失提交事务的操作。

BASE理论

BASE是对CAP的妥协,其核心思想是:Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)。

分布式事务

为了分布式节点进行提交时保持事务的一致性,需要一些算法。

二阶段提交

三个假设:

  1. 引入协调者(Coordinator)和参与者(Participant)
  2. 所有节点都采用预写日志,保持在可靠存储设备上
  3. 所有节点损坏后可以恢复

分为两个阶段:

  1. Prepare阶段
  2. Commit阶段

可能的情况

  1. 协调者不宕机,参与者宕机,需要回滚操作
  2. 协调者宕机,参与者不宕机,可以起新协调者,重复二阶段提交
  3. 都宕机

三阶段提交

将二阶段提交中的Prepare阶段差分为CanCommit和PreCommit,解决了单点故障和阻塞问题。

MVCC

  • 悲观锁: 操作数据时直接锁住数据,操作完成后释放锁
  • 乐观锁:不会上锁,只会更新时判断数据是否被修改,冲突时放弃操作

MVCC是一种并发控制的方式,维持一个数据的多个版本,所以不会阻塞读写。MVCC为每一个修改保存版本,和事务的时间戳关联。

共识协议

  • Quorum NWR
  • Raft
  • Paxos