初识分布式系统| 青训营笔记

87 阅读4分钟

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

本文是对于掘金课程的课程笔记,针对课程内容的一些重难点、本人在学习分布式系统知识时候进行的简单记录。本次课程基本为理论课程,接下来我将对微服务架构中的重要内容进行说明。

其实在前面学习架构的时候就提出了分布式系统的这一概念,也大致知道我们为何需要分布式系统来进行开发,这次的笔记主要来记录分布式系统中的具体的重要概念、一些算法以及应用实践等。

一、本堂课的重点内容

  1. 分布式概述
  2. 系统模型
  3. 理论基础
  4. 分布式事务
  5. 共识协议
  6. 分布式实践

二、详细知识点介绍

分布式概述

分布式系统是计算机程序的集合,程序利用跨多个独立计算节点的计算资源来实现共同目标。

优势:去中心化;低成本;弹性 挑战:普遍节点故障;不可靠的网络;异构的机器与硬件环境

系统模型

故障模型:

  • 拜占庭故障:节点可以任意篡改发送给其他节点的数据
  • ADB:拜占庭的特例,可以篡改数据但是不能伪造其他节点的数据
  • Performance failure:节点未在特定时间段内收到数据,时间太早或者太晚
  • Omission failure:节点收到数据的时间无限晚,即收不到数据
  • Crash failure:在omission failure的基础上,增加了节点停止响应的假设(例如宕机)
  • Fail-stop failure:在crash failure的基础上增加了错误可检测的假设

拜占庭将军问题

两支军队的将军只能派信使穿越敌方通信,以此约定进攻时间,如何在信使可能被俘虏的情况下就进攻时间达成共识。

结论:理论上永远无法达成共识。

共识与消息传递的不同:即使保证了消息传递成功,也不能保证达成共识。

共识和一致性

  • 最终一致性:A和B最终能读到一致的数据
  • 线性一致性:约等同于强一致,A读到更新后即时同步给其他客户端

理论基础

CAP理论

  • C:consistence,一致性,保持多个副本的一致
  • A:availability,可用性,保持可用状态
  • P:network partitioning,分区容错性

可以采取CA,AP,CP

ACID理论

ACID分别对应原子性,一致性,隔离性,持久性

  • A:操作要么全部成功要么全部失败
  • C:执行前后处于一致的一致性状态
  • I:事务不能被其他事务的操作干扰
  • D:事务一旦被提交改变就是永久的

BASE理论

  • 基本可用:假设系统出现故障,基本还是能用
  • 软状态:允许数据存在中间状态
  • 最终一致性:最终数据能够一致

分布式事务

二阶段提交

  • Prepare阶段:协调者向参与者发送prepare
  • Commit阶段:协调者发送commit消息,然后参与者回复ack

三阶段提交

解决了两个问题:单点故障问题;阻塞问题

引入超时机制,在等待超时之后,会继续进行事务的提交

cancommit->precommit->docommit,三阶段

MVCC

是一种并发控制的方法,维持一个数据的多个版本使读写操作没有冲突

共识协议

Quorum NWR模型

三要素NWR

  • N:在分布式存储系统中,有多少分备份数据
  • W:一次成功的更新操作中至少有W份数据写入成功
  • R:同上,R份读取成功

为了强一致性,需要W+R>N

通常用在append only中,因为允许数据被覆盖(问题根源)

RAFT协议

是一种分布式一致性算法(共识算法),即使出现部分节点故障、网络延时等问题,也不影响各节点

  • Leader:领导者,负责处理所有客户端请求
  • Follower:跟随者,不会发送任何请求,接受并持久化leader同步的日志
  • Candidate:leader选举过程中的临时角色

Paxos协议

与RAFT的区别:

  • Multi-paxos可以并发修改日志,raft写日志操作必须连续
  • multi-paxos可以随机选主,不必最新最全的节点当选leader

优势:写入并发性高,所有节点都可以写入 劣势:没有一个节点有完整的最新的数据,恢复流程复杂,需要同步历史记录

分布式实践

这一部分我完成了一个mapreduce词频统计的小项目,环境是ubuntu,使用的是hdfs+mapreduce,这一部分我将在后续的笔记中进行单独说明。

三、课后个人总结

总的来说,通过本次课程,我更加清楚地理解了分布式系统的含义,包括为什么要用分布式系统,分布式系统的优势,以及分布式系统中的各类重要概念,各种故障模型与共识协议等,对于我后续的开发大有帮助。