强一致性算法

分布式系统对fault tolorence的一般解决方案是state machine replication

主从同步复制

Master接受写请求
Master复制日志到Slave
Master等待,直到所有从库返回
在这里插入图片描述
问题:一个节点失败,Master阻塞,导致整个集群不可用,保证了一致性,可用性大大降低。

多数派

每次写入保证写入大于N/2个节点 每次读保证从大于N/2个节点读
问题:
在并发环境下,无法保证系统的正确性,顺序很重要。
在这里插入图片描述

Paxos
1. Basic Paxos

Client : 系统外部角色,请求发起者。像民众
Propser :接受Client的请求,向集群提出提议(propose)。并在冲突发生时,起到冲突协调的作用。像议员,替民众提出议案。
Accepetor(Vector):提议投票和接收者,只有在形成法定人数时(Quorum,为多数派),提议才会最终被接受,像国会。
Learner:提议接受者,backup,备份,对集群的一致性没有影响。像记录员。

步骤,阶段
在这里插入图片描述
基本流程:

在这里插入图片描述
部分节点失败,到达到了Quoroms。
在这里插入图片描述
Proposer失败
在这里插入图片描述
一个proposer失败,会启用另外一个proposer

活锁问题(dueling)
问题:难以实现,效率低(要经过2轮RPC),活锁

2. Multi Paxos

只有一个proposer,不存在活锁问题。
在这里插入图片描述
只有再最开始的时候需要2轮RPC。以后只需要一轮RPC.
减少角色,进一步简化
在这里插入图片描述

3. Raft

划分为3个子问题:

Leader Election
Log Replication
Safety

重定义角色:
Leader
Fellower
Candidate(候选人)

动画解释:
Raft动画演示

  • 选Leader
    设置timeout
  • 同步log
    Leader不断地向fellow发送心跳包,数据也夹杂在心跳包中。
  • 保证safty
    失败地行为 分区行为

场景测试:

Raft场景测试

ZAB

raft为了保证日志连续性,心跳方向为leader至follower。ZAB则相反。

分布式锁

实际应用中,主要使用Zookeeper和Etcd

Zookeeper

内部使用ZAB

etcd

内部使用Raft

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值