分布式理论 | 青训营笔记

98 阅读5分钟

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

主要内容

本节课主要学习了分布式的相关概念,包括什么是分布式系统,拜占庭将军问题,CAP理论、ACID理论,分布式事务,共识协议等内容。

具体内容

分布式基本概念

分布式系统的概念:是计算机程序的集合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标。
优点:去中心化、低成本、弹性、资源共享、可靠性高
缺点:普遍的节点故障、不可靠的网络、安全 一个服务器能存储的资源是有限的,如果能用多个服务器,让资源共享,那么。优点的逐步递进的,越往后实现起来越困难。 虽然单台服务器发生故障的概率很低,但是当有很多台服务器时,出现故障的概率大大增大。
服务器处于对、错和未决三种状态。
如果一个集群被攻破,那么整个集群都可能不再安全。

why-How-What三个角度的思考。可以从使用者和学习者两个角色的层面。对于学习者,如果要学习分布式系统的概念,要掌握分布式理论,并且理解一致性协议,对要点深入展开,并且深入实践。分布式系统相关的文章往往集中于工业界,不能只靠学校和课本。

常见的分布式系统

包括分布式存储、分布式数据库、分布式计算。其中分布式存储有GFS、Ceph、Hadoop HDFS、Zookeeper,分布式数据库有HBase、MongoDB、TiDB,分布式计算Spark、YARN、Hadoop。

系统模型

该部分主要讲解了故障模型、拜占庭将军问题、共识和一致性、时间和事件顺序。

故障模型

将分布式系统出现的故障,根据处理的难易程度划分为六种类型,分别为Byzantine failure、ADB(拜占庭故障的特例)、Performance failure、Omission failure、 Crash failure、 fail-stop failure。上面的故障中,Byzantine failure是最难处理的。Crash failure是只知道状态,不知道原因;fail-stop failure是既知道状态又知道原因。Omission failure是未决的状态(长时间未决,但知道是故障)Performance failure是故障和非故障的叠加态。Byzantine failure更多的是正确性方面的故障,大部分分布式系统并不解决Byzantine failure,在实际工程中,往往对信息进行加密或者冗余设计。

主要可以从四个维度分析故障:正确性、时间、状态和原因。 真实故障:主要有磁盘故障、磁盘坏道、坏块、服务器主板、板卡故障、网络故障、网络分区等故障。该部分的故障讲课的老师几乎都遇到过。

共识和一致性

一致性有最终一致性和线性一致性。最终一致性指数据最终是一致的,但是过程中不一定。而线性一致性则是数据在运行过程中始终是一致的。

理论基础

CAP

简写实际概念
CConsistence一致性,数据在多个副本中能保持一致的特性(强一致性)
AAvailability可用性
PNetwork partitioning分区容错性,指系统的服务必须一直处于可用的状态,每次请求都能得到非错的响应

实际上是不能同时满足(100%满足)CAP这三个条件,因此实际工程中出现了CA, AP, CP三种。 CA:放弃了分区容错性,加强了一致性和可用性,通常是传统的单机数据库是这么选的 AP:放弃了一致性(强一致性),注重用户体验, CP:放弃了可用性,例如与钱财有关的系统

ACID

指事务的原子性、一致性、隔离性和持久性。其中原子性、一致性在数据库中是一定要保证的,但是隔离性和持久性不一定保证。

BASE

来自网络实战,保证了分区容错性和可用性,其核心思想是基本可用、软状态和最终一致性。软状态是指允许系统中的状态存在中间状态,并认为不影响系统的整体可用性。大部分情况下,能够保证AP就够了。

分布式事务

CP相关的。比较难处理,因此很多系统都会尽量避免产生分布式事务。

二阶段提交

基于三个假设:1.引入了协调者(Coordinator)和参与者(Participant)两个角色;所有的节点都采用预写式日志;所有节点都不会永久性损坏。
二阶段主要有prepare阶段和Commit阶段。
二阶段提交主要存在性能问题(耗时长)、协调者单点故障问题、网络分区导致数据不一致等问题。

三阶段提交

将二阶段提交中的prepare阶段拆分成了CanCommit和PreCommit机制。主要解决了单点故障问题和阻塞问题。

MVCC

多版本并发控制。与事务的时间戳相关联,维持一个数据的多个版本使读写操作不冲突,既不会阻塞写,也不会阻塞读。能够提高并发性能,解决脏读问题。

共识协议

主要是了解了Quorum NWR、RAFT协议和Paxos协议。这部分只是简单的进行了了解,没有深入介绍其内部的实现原理。

总结

经过这节课程的学习,我主要了解了分布式的种种基本概念,包括CAP原理、ACID、分布式事务等。