• 0

  • 513

分布式系统理论总结

机器猫

机器学习

1个月前

前言:

             主要是总结之前学习过相关分布式的知识点,可以一起学习,会有比较多口语化的词,之前做的笔记,见谅。 文章末尾会贴出相关学习理论资料,可以方便一起学习交流 

( 真的很气,刚写好的发到网站上,挂掉了,现在要重新总结一次~)

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,又怎么保证这个节点挂掉后集群能正常工作。

免责声明:文章版权归原作者所有,其内容与观点不代表Unitimes立场,亦不构成任何投资意见或建议。

机器学习

513

相关文章推荐

未登录头像

暂无评论