重学| 面试复习(五)分布式问题

分布式理论cap定理

一致性(C:consistency):分布式环境中,数据多个副本直接能够保持一致性的特性(严格的一致性)。在一致性的需求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然在一致的状态
可用性(A:Availability): 指系统提供的服务必须一致处于可用的状态,每次请求都能获取到非错的相应–但是不保证获取的数据为最新数据
分区容错性(P:partition tolerance): 分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生来了故障。

一个分布式系统不可能同时满足一致性,可用性和分区容错性,最多只能同时满足其中的两个

分布式理论base理论

在cap定理中,cap不可能同事满足,而分区容错是对于分布式系统而言,是必须的。但如果系统能够同时实现cap是再好不过的了,所以出现了BASE理论
核心思想: 既然无法做到强一致性,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性
Basically Available(基本可用): 指分布式系统在出现不可预知故障的时候,允许损失部分的可用性,但绝不等价于系统不可用,如“响应时间上的损失”,“功能上的损失”
Soft state(软状态): 要求多个节点的数据副本都是一直的,这是一种硬状态。软状态指的是,允许系统中的数据存在中间状态,并任务该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本直接进行数据同步的过程中存在延迟
Eventually consistent(最终一致性): 最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态,因此最终一致性的本质是需要系统保证数据能够达到一致,而不需要实时保证系统的数据的强一致性

一致性协议2pc

两阶段提交又称2PC(two-phase commit protocol),2pc是一个非常经典的强一致、中心化的原子提交协议。这里所说的中心化是指协议中有两类节点:一个是中心化协调者节点(coordinator)和N个参与者节点
阶段一 :提交事务请求
阶段二:执行事务请求
优点:原理简单
缺点:同步阻塞,单点问题,数据不一致,过于保守


PDF/p10

一致性协议3pc

3PC,全称"three phase commit",是2PC的改进版,将2PC的“提交事务请求”过程一分为二,共形
成了由CanCommit、PreCommit和doCommit三个阶段组成的事务处理协议。
阶段一:CanCommit
阶段二:PreCommit
阶段三:do Commit
优点
相比较2PC,最大的优点就是降低了参与者的阻塞范围(第一个阶段是不阻塞的),其次能够在单点故
障后继续达成一致(2PC在提交阶段会出现此问题,而3PC会根据协调者的状态进行回滚或者提
交)。
缺点
如果参与者收到了preCommit消息后,出现了网络分区,此时协调者所在的节点和参与者所在的节点
无法进行正常的网络通信,那么参与者等待超时后,会进行事务的提交,这必然会出现分布式数据不一
致的问题。


PDF/p13

2pc与3pc对比

首先对于协调者和参与者都设置了超时机制(在2PC中,只有协调者拥有超时机制,即如果在一定时间
内没有收到参与者的消息则默认失败)。其次在2PC的准备阶段和提交阶段之间,插入预提交阶段,使
3PC拥有CanCommit、PreCommit、DoCommit三个阶段。PreCommit是一个缓冲,保证了在最后提
交阶段之前各参与节点的状态是一致的。

paxos算法

首先一个很重要的概念叫提案(Proposal)。最终要达成一致的value就在提案里。
提案(Proposal):Proposal信息包括提案编号(Proposal ID)和提议的值(Value)
在Paxos算法中,有三种角色:
Proposer:提案发起者
Acceptor:决策者,可以批准提案
Learners:最终决策的学习者
Proposer可以提出(propose)提案;Acceptor可以接受(accept)提案﹔如果某个提案被选定(chosen),那么该提案里的value就被选定了。在具体的实现中,一个进程可能同时充当多种角色。比如一个进程可能既是Proposer又是Acceptor又是Learner。

Proposer:只要Proposer发的提案被Acceptor接受(刚开始先认为只需要一个Acceptor接受即
可,在推导过程中会发现需要半数以上的Acceptor同意才行),Proposer就认为该提案里的value
被选定了。
Acceptor:只要Acceptor接受了某个提案,Acceptor就认为该提案里的value被选定了。
Learner: Acceptor告诉Learner哪个value被选定,Learner就认为那个value被选定。


PDF/p18

一致性算法raft

首先说什么是Raft算法:Raft是一种为了管理复制日志的一致性算法。
Raft提供了和Paxos算法相同的功能和性能,但是它的算法结构和Paxos不同。Raft算法更加容易理解并且更容易构建实际的系统。
为了提升可理解性,Raft将一致性算法分解成了几个关键模块,例如领导人选举、日志复制和安全性。同时它通过实施一个更强的一致性来减少需要考虑的状态的数量。
Paxos和Raft都是为了实现一致性(Consensus)这个目标,在Raft中这个过程如同选举一样,参选者需要说服大多数选民(服务器)投票给他,一旦选定后就跟随其操作。
Raft算法分为两个阶段,首先是选举过程,然后在选举出来的领导人带领进行正常操作,比如日志复制等。


PDF/p29

⼀致性Hash算法

⾸先有⼀条直线,直线开头和结尾分别定为为1和2的32次⽅减1,这相当于⼀个地址,对于这样⼀条线,弯过来构成⼀个圆环形成闭环,这样的⼀个圆环称为hash环。我们把服务器的ip或者主机名求hash值然后对应到hash环上,那么针对客户端⽤户,也根据它的ip进⾏hash求值,对应到环上某个位置,按照顺时针⽅向找最近的服务器节点确定⼀个客户端路由到哪个服务器处理


PDF/p2

⼀致性Hash算法数据(请求)倾斜问题

为了解决这种数据倾斜问题,⼀致性哈希算法引⼊了虚拟节点机制,即对每⼀个服务节点计算多个哈希,每个计算结果位置都放置⼀个此服务节点,称为虚拟节点。具体做法可以在服务器ip或主机名的后⾯增加编号来实现。⽐如,可以为每台服务器计算三个虚拟节点,于是可以分别计算 “节点1的ip#1”、“节点1的ip#2”、“节点1的ip#3”、“节点2的ip#1”、“节点2的ip#2”、“节点2的ip#3”的哈希值,于是形成六个虚拟节点,当客户端被路由到虚拟节点的时候其实是被路由到该虚拟节点所对应的真实节点

分布式ID解决方案

1.UUID(可以⽤)
2.独⽴数据库的⾃增ID
3.SnowFlake 雪花算法(可以⽤,推荐)
4.借助Redis的Incr命令获取全局唯⼀ID(推荐)


PDF/p15

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值