分布式体系
✔分布式体系面对的挑战
- 数据规划越来越大
- 服务的可用性要求越来越高
- 快速迭代的业务要求体系满足易用
✔抱负中的分布式体系
- 高性能:可拓宽、低时延、高吞吐
- 正确:共同性、易于了解
- 牢靠:容错、高可用
从HDFS开端
自我思考
分布式体系便是让终端用户把一组工作在一起的计算机当做一个单独的机器来运用
数据规划的不断增加,咱们需求大规划分布式体系
分布式体系最大的优点便是能够让开发者横向地扩展体系。
共同性与共同算法
什么是共同性
共同性是一种模型(或语义)来约好一个分布式体系怎么向外界 (运用)提供服务。
关于咱们的KV像操作一台机器相同要读到最近写入的值。
KV中常见的共同性模型:
- 终究共同性: 读取可能暂时读不到可是总会读到
- 线性共同性:最严厉,线性执行
仿制协议
- 当主副本失效时,为了使得算法简略,咱们人肉切换,只需满足快咱们还是能够确保较高的可用性。
- 可是怎么确保主副本是真的失效了呢?
- 在切换的过程中,主副本又开端接纳client端的恳求
- 两个主副本显然是不正确的,log 会被覆盖写掉
- 咱们期望算法能在这种场景下依然保持正确
- 要是增加到三个节点呢?
- 每次都等其他节点操落盘性能较差
- falut-tolerance能答应少数节点挂了的情况下,依然能够工作
共同算法
✔概念
协商共同问题需求多个进程(或代理)达到共同。一个单一的数据值。有些过程(代理)可能在其他方面失败或不牢靠,因此,协商共同的协议必须具有容错性或弹性。
简而言之一个值一旦确认,所有人都认同,
- 共同协议不等于共同性
- 运用层面不同的共同性,都能够用共同协议来完成
- 简略的仿制协议也能够提供线性共同性
- 一般评论共同协议时说到的共同性,都指线性共同性
- 由于弱共同性往往能够运用相对简略的仿制算法完成
自我思考
共同性往往指分布式体系中多个副本对外呈现的数据的状况。
共同则描述了分布式体系中多个节点之间,互相对某个状况达到共同结果的过程。体系中多个节点最关键的是对多个事情的次序进行共同(排序)。
共同性协议案例:Raft
「自我思考」
Raft是一个分布式共同算法,分布式共同算法还有Paxos,不过Paxos很难了解。
Raft与2014年发表,以易于了解作为算法的设计目标,运用了
- 运用了RSM、Log、RPC的概念
- 直接运用RPC对算法进行了描述
- Strong Leader-based
- 运用了随机的方法减少约束
Raft人物
Raft整体流程
Raft Term
- 每个Leader服务于一个term
- 每个term至多只要一个leader
- 每个节点存储当时的term
- 每个节点term从一开端,只增不减
- 所有rpc的request reponse都带着term
- 只commit本term内的log
Raft的安全性
- 关于Term内的安全性
- 关于所有已经的commited的<term, index>方位上至多只要一条log(目标)
- 由于Raft的多数派推举,咱们能够确保在一个term 中只要一个leader
- 关于跨Term的安全性:
- 目标:假如一个log被符号commited,那这个log必定会在未来所有的leader中出现Leader completeness