前言:
**主要是总结之前学习过相关分布式的知识点,可以一起学习,会有比较多口语化的词,之前做的笔记,见谅。 文章末尾会贴出相关学习理论资料,可以方便一起学习交流 **
( 真的很气,刚写好的发到网站上,挂掉了,现在要重新总结一次~)
1.CAP理论(布鲁尔定理)
1.分区容错性
指的分布式系统中的某个节点或者网络分区出现了故障的时候,整个系统仍然能对外提供满足一致性和可用性的服务。也就是说部分故障不影响整体使用。
事实上我们在设计分布式系统是都会考虑到bug,硬件,网络等各种原因造成的故障,所以即使部分节点或者网络出现故障,我们要求整个系统还是要继续使用的
(不继续使用,相当于只有一个分区,那么也就没有后续的一致性和可用性了)
(网络出现故障 这个集群还是可以使用)
P是一定要满足的,是基础的! 必须是这个架构
2.可用性
一直可以正常的做读写操作。简单而言就是客户端一直可以正常访问并得到系统的正常响应。用户角度来看就是不会出现系统操作失败或者访问超时等问题。(不能超时,在合理的时间内返回正确的结果)
3.一致性
在分布式系统完成某写操作后任何读操作,都应该获取到该写操作写入的那个最新的值。相当于要求分布式系统中的各节点时时刻刻保持数据的一致性。(也就是数据同步要快!能读到最新的)
P和C一起满足是可以的! 如果在PC的基础上 还要满足可用的话,基本上不可能; 为什么呢?(一致性的基础上,A 和B数据进行同步的话,同步是需要一段时间进行同步的,就会有延迟,如果在延迟的时候 要返回数据 那么就可能会造成可用性不能满足,必须等到同步完成! 或者说如果要满足可用性,那么一致性就满足不了,因为必须在这么短的时间内去处理!)
总结:不能同时满足 C(一致性)和A(可用性) 只能在里面选一个 ,因为满足C的时候,如果正在做同步,那么读取的速度就会很慢 ; 要么做一致性要么做可用性
2.Base理论(是对AP的一个扩展)
最终一致性:在当下某个时间内 虽然没有同步,但是最后的状态必须是一致的。
牺牲强一致性来获得可用性!
弱一致性:最终一致性(DNS)
强一致性:同步,Paxos,Raft,ZAB
3.强一致性(状态机一致性的共识算法)
1.Paxos
里面的learner是两个备份数据库,中间的Acctpor是数据库节点(最重要的Server),proposer只是服务器?
第一轮接收提案之后去投票,投票通过 Acctpor会写log,然后最后的learner也会去备份
第一轮proposer会选主,当老大 不管client有没有提案过来
一开始一轮RPC选总统,两轮RPC; 后面都是一轮RPC,只有唯一一个Leader proposer,提出来就必须通过
第一个主机成为Leader,其与的都是slave 简化角色
2.Raft
Follower只是服从的角色,听从Leader的指挥,Candidate是Leader挂了后填补的
第一轮进行竞选,然后投票
所有的请求先经过写入到Leader,然后同步,什么时候写系统文件呢? 要等待Follower确认之后,或者大多数确认;其他的Follower也要写
会有一个心跳机制 timeout,在一定时间内 如果没有Leader发送信息过来,那么就知道这个集群里是没有Leader的 ,可以竞选Leader
有Leader之后timeout刷新,然后Leader会发送心跳包过来,数据会跟着心跳包一块过来,每次发送心跳 都会更新那个定时器
如果Leader掉了,timeout到期 就会去竞选Leader
如果两个节点都想成为Leader,平票怎么办?随机的timeout,短的会很快去竞选,长的就会放弃;
所有的写请求都要经过Leader,然后Leader把数据报夹杂着心跳发送给 Follower,知道大多数Follower提交成功以后,自己就会写log到文件系统
分区的情况:
单数个节点
合并的话,会按照最新的系统来做Leader
如何保证安全性的:失败了会什么行为(另外一个Leader会竞选,重新提高服务),分区了什么行为
如果某个宕机一段时间,数据后面会补上
没有达到多数派的话,是不会写log的
少数派的leader更新其实是不会成功的
可能会丢失数据,覆盖掉之前的leader数据,但是整个系统的共识还是没有问题的!需要客户端达到的!
3.ZAB(Zookeeper)
其实也做不到完全的强一致性!
leader挂掉了,在选举的时候 如果来了请求,怎么处理! 这个时候会超时,实现一致性肯定会牺牲一点可用性的; 可以失败,只要保持一致性就可以了
4.虚拟机比docker的好处?
很方便! 优势很大! 容器的管理 直接去拉那种环境就可以了
5.为什么不可以随机选择一个节点做为leader?
这么多节点由谁来负责随机呢?假设有专门的节点负责随机选举leader,又怎么保证这个节点挂掉后集群能正常工作。