分布式理论

分布式系统的定义

硬件或软件分布在不同的网路计算机上,彼此间透过消息进行通信或协调的系统。

解决的问题(单体架构缺点)

  • 对海量用户处理能力有限。
  • 程序复杂性越高,开发效率越低。
  • 生产环境发生重大BUG,将导致整个服务瘫痪。
  • 代码量增加,编译效率下降。
  • 只能关注一套技术栈。

名词释义(分布式/集群/网络分区)

分布式:多个人在一起做不同的事。

集群:多个人在一起做相同的事。

网络分区(脑裂):网络之间不连通,导致分布式系统出现局部小集群,小集群间网络异常,小集群内部网路正常。

架构演进

单体应用架构->应用服务器和数据库服务器分离->应用服务器集群->数据库服务器主从复制,读写分离->增添搜索引擎缓解数据库压力->增加缓存缓解读库压力->数据库拆分(水平/垂直拆分)->应用服务器垂直拆分->应用服务器水平拆分。

一致性分类

1、强一致性:要求系统写入什么,读出来也是什么。性能影响大。

2、弱一致性:不承诺多久后数据能达到一致,尽可能在某个级别(秒/分/小时)达到一致状态。

3、读写一致性:第一时间看到自己更新的内容,其他人不保证。

  • 特定内容从主库读取,主库压力大。
  • 刚更新的内容从主库读取,过段时间后,从从库读取。

4、最终一致性:仅保证最终系统内所有副本的数据是正确的。

CAP定理

1、Consistency(一致性):所有副本数据一致,从任意节点读取到的数据都是最新的。

2、Availablity(可用性):对外提供的服务保持正常,不会出现响应超时或响应错误。

3、Partition torerance(分区容忍性):当出现网络分区时,仍可对外提供服务。

任何分布式系统指哪个同时满足三个要求中的其中两个。例如:用户向N1发出请求,将值从vo改成v1,此时网络N1和N2之间发生中断,然后又有一个用户向N2发出请求获取该字段的值。此时有三种做法:

  • 将vo返回(牺牲一致性,AP模式)
  • 等待网络恢复,再返回v1(牺牲可用性,CP模式)
  • 将N1,N2合并(舍弃分布式技术,CA模式)

BASE理论

对CAP定理的权衡结果,如果无法做到强一致性,则根据业务特点,以适当方式实现最终一致性。

1、Basically Available(基本可用):当分布式系统出现故障时,允许损失部分可用性。(时间:正常是0.5秒响应结果,故障时可增加到1-2秒)。流量激增时,将部分用户引导到降级页面)

2、Soft State(软状态):允许数据存在中间状态(有部分数据尚未完成同步),但不影响系统整体可用性。

3、Eventuallly consistent(最终一致性):经过一段时间的同步后,数据最终能达到一致。

一致性协议(处理分布式事务)

2PC(两阶段提交)

流程

1、准备阶段:协调者给每个参与者发送prepare消息,运行本地事务但不提交。

2、提交阶段:协调者发现参与者运行失败或超时,则向参与者发送RollBack消息,否则发送Commit消息。

缺点

1、同步阻塞:在一阶段未到二阶段时,参与者事务都处于阻塞状态。

2、单点问题:如果协调者在运行二阶段时崩溃,参与者事务都处于锁定状态。

3、数据不一致:协调者在尚未发送完Commit消息就崩溃,将导致数据不一致。

4、过于保守:任意节点失败,将导致整个事务失败。

3PC(三阶段提交)

流程

1、CanCommit:协调者给每个参与者发送包含事务的请求,询问是否可以运行。

2、PreCommit:协调者要求参与者运行事务。

3、DoCommit:协调者要求参与者提交事务:此阶段参与者若无法收到协调者消息,超时默认提交事务。

降低了2PC的事务阻塞范围,但并未完全解决数据不一致的问题。

一致性算法(选出最终结果或Leader)

Paxos算法

角色

1、Client客户端:向分布式系统发出请求。

2、Proposer提案发起者:说服Acceptor达成一致。

3、Acceptor决策者:批准提案。

4、Leaner学习者:学习最终决策。

规范

1、一个Acceptor必须接受它收到的第一个提案。

2、每次收到的提案值,都必须跟第一次一样。

3、一个提案被选定,需要被半数以上的Acceptor接受。

流程1

1、Proposer向半数以上的Acceptor发起编号为N但没有Value的prepare请求。

2、如果Acceptor未接受过该提案,则返回null。

3、此时Proposer可以自行决定value值,向Accptor发起编号为N,值为value的accept请求。

4、Accpetor接受编号为N,值为Value的提案。

流程2

1、Proposer向半数以上的Acceptor发起编号为N+1但没有Value的prepare请求。

2、如果Acceptor已经接受过编号为N的提案,则返回提案N的Value值。

3、此时Proposer向Acceptor发起编号为N+1,值为Value的accept请求。

4、Acceptor接受编号为N+1,值为Value的提案。

极端情况:两个Proposer依次提交编号递增的提案,导致死循环。

解决:规定只有一个Proposer能提交提案。

Raft算法

角色

1、Leader领导者:与客户端交互,只有一个。

2、Candidate候选者:负责在选举过程中提名自己,当选举成功,成为领导者。

3、Follower跟随者:选民,等待投票通知。

流程

1、选举开始,所有节点都是Follower。

2、如果收到RequestVote(投票给我)、AppendEntries(已选出Leader)的请求,则保持Follower状态。

3、一段时间(随机150~300ms)内没收到请求,则将身份转换为Candidate开始竞选Leader,如果获得半数票数则成为Leader。

4、如果最后没选出Leader,则开启下一轮选举。

分布式系统设计策略

心跳检测

通常携带状态、元数据信息,方便管理。

  • 周期心跳检测:响应超时,判定死亡。
  • 累积失效检测:对濒临死亡的节点,发起有限次数重试。

高可用

  • 主备模式(常用):主机宕机,备机接管主机的一切工作。主机恢复后,通过自动热备或手动冷备的方式将服务切换回主机。
  • 互备模式(多主):两台主机同时运行,并且相互监测。
  • 集群模式:多个节点同时运行,透过主节点分担请求,需解决主节点高可用问题。

负载均衡

解决方案

  • 硬件:F5
  • 软件:LVS、HAProxy、Ngnix。

策略:随机、轮询、权重、最少连接、哈希。

网路通信

RPC

Remote Procedure Cal

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值