这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
分布式概述
分布式系统是计算机程序的集合,这些程利用跨多个独立计算节点的计算资源来实现共同的目标。计算、存储、数据库。
优点:去中心化;低成本;弹性;资源共享;可靠性高
缺点:普遍的节点故障;不可靠的网络;异构的机器与硬件环境;安全问题
分布式系统
分布式存储:GFS,Ceph,Hadoop HDFS, Zookeeoer
分布式数据库:Google Spanner, TiDb, HBase, MongoDB
分布式计算: Hadoop, Spark, YARN,
故障模型,从上到下包含
Byzantine failuere:节点可以任意篡改发送给其他节点的数据
Authentication detectable byzantine failure(ADB),节点可以篡改数据,但不能伪造其他节点的数据
Performance failure:节点未在特定时间段内收到数据,即时间太早或太晚
Omission failure: 节点收到数据的时间无限晚,即收不到数据
Crash failure: 在omission failure的基础上,增加了节点停止响应的假设
Fail-stop failure:在crash failure的基础上增加了错误可检测的假设
拜占庭将军问题
两个将军达成共识无法通过两个信使实现
tcp是工程解
共识与一致性
最终一致性在读请求和写请求并发时可能读到旧值;线性一致性是强一致,要达到强一致。
时间和事件顺序
定义“happened before”关系,记为“->”。其满足如下三个条件: 如果a和b是在相同节点上的两个事件,a在b之前发生,则定义:a->b。 如果事件a表示某个节点发送某条消息,b是另一个节点接受这条消息,则a->b 如果有a->b且b->c,则有a->c 当且仅当a->/b且b->/a,称两个事件为并发的
CAP理论
C:一致性,指数据在多个副本之间能够保持一致的特性。 A:可用性,指系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据。 P:分区容错性,分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境发生了故障。
CA:放弃分区容错性,加强一致性和可用性,传统的单机数据库的选择
AP:放弃一致性(强一致),追求分区容错性和可用性,例如一些注重体验的
CP:放弃可用性,追求一致性和分区容错性,例如与钱财安全相关的系统。
分布式事务
二阶段提交
三个假设:1、引入协调者和参与者,互相进行通信;2、所有节点都采用预写式日志,且日志被写入后即被保持在可靠的存储设备上;3、所有节点不会永久性损坏,即使损坏后仍然可以恢复。
问题
1、性能问题:两阶段提交需要多次节点间的网络通信,耗时过大,资源需要进行锁定,徒增资源等待时间。
2、协调者单点故障问题:如果事务协调者节点宕机,需要另起新的协调者,否则参与者处于中间状态无法完成事务
3、网络分区带来的数据不一致:一部分参与者收到了Commit消息,另一部分参与者没收到Commit消息,会导致节点之间数据不一致。
三阶段提交:
将两阶段提交中的Prepare阶段,拆成两部分:CanCommit和PreCommit,解决了单点故障问题和阻塞问题。
Quorun NWR模型。
三要素:N在分布式存储系统中,有多少份备份数据;W代表一次成功的更新操作要求至少有w份数据写入成功;R:代表一次成功的读数据操作要求至少有R份数据成功读取。为了保证强一致性,需要保证W+R>N.