Skip to content

Latest commit

 

History

History
65 lines (47 loc) · 2.37 KB

001一致性.md

File metadata and controls

65 lines (47 loc) · 2.37 KB

分布式

为什么要引入分布式

  • 摩尔定律的影响在慢慢衰减、失效(单个硬件能提供的能量不再呈线性增加)
  • 为了保证思想扩张不受资源的限制(硬件能力)
  • 既然单个硬件能力成了拖后腿的,那思想的延伸就要用多个硬件的承载

AlphaGo就是一个典型的例子。

分布式系统的设计目标:

  • 可用性。所有系统设计的最核心目标
  • 可扩展性。硬件的增加获得性能的线性提升
  • 容错性。复杂系统必须要考虑的点。对已发生的错误,进行规避和恢复
  • 性能。服务的响应延时和吞吐率要满足需求

相比单体架构,挑战有哪些:

  • 节点之间的网络通信是不可靠的,存在延时和丢包
  • 节点处理任务时出错,或节点宕机
  • 同步调用意味着系统可扩展性为零

cap原理

  • c:consistency 一致性。数据的一致性。节点对数据的读写都是‘原子的’,也就是不会造成数据竞争
  • a:availability 可用性。只要节点没有故障,在有限事件内要给出响应
  • p:tolerance to partition of network 分区容忍性。发生网络故障,分区间无法通信时,系统仍然可以正常工作

Raft一致性算法

  • 基于复制状态机模型推导的。
  • 节点的关系模型是 非对称

包含3种角色:

  • leader 领袖
  • candidate 候选人
  • follower 群众

核心术语还有 team 表示任期

角色变化:

群众

  • 初始状态是 群众,
  • 任期超时或开始选举,状态变为 候选人

候选人

  • 任期超时、新选举,角色还是候选人
  • 获得半数选票,角色变为 领袖
  • 发现新领导或新任期开始后,角色变为 群众

领袖

  • 发现新任期后,角色变为群众

选举中的心跳和选举定时器

  • 每个群众都有一个选举定时器,时长个不一致,超时表示新一轮的选举开始
  • 领袖会定期发送心跳,群众收到心跳会将自己的定时器清零重置
  • 对群众来说,不管是网络原因延时还是领袖节点宕机,只要超时就开始选举

群众参加选举的3个步骤:

  • 将自己维护的任期号加1
  • 将自己的状态切到候选人,为自己投票
  • 向集群其他节点发送投票rpc,要其他人给自己投票

日志快照

因为raft已经保证了数据的一致性,所以快照并不依赖强领袖,群众也能创建自己本地的快照