印象笔记zookeeper

199 阅读6分钟

刷题:ok

题:如何理解选主算法。14-71 Fast算法/FastLeader: 1/服务器刚启动,推荐自己为leader,将serverid,epoch/选举的轮数/逻辑时钟,zxid/数据ID/越大越新,广播发送给其他服务器,其他服务器返回信息:Looking,其他(leading,following)。 2/其他服务器返回Looking:先判断Epoch选举的轮数/逻辑时钟, 2.1/接收到Epoch大于自己的Epoch,clear其他服务器的选举数据(过时),判断是否更新自己的选举状况(一开始选举自己为leading)。 选举判断规则:zxid大的胜出,serverid大的胜出,把结果广播给其他服务器。 2.2/接收到Epoch等于自己的Epoch,根据选举判断逻辑,结果广播给其他服务器。 2.3/接收到Epoch小于自己的Epoch,把自己的信息(Eppch,zxid,serverid)广播给其他服务器。 3/接收到所有/半数以上其他服务器的选举leader,退出选举并设置自己的角色。 4/其他服务器返回Following,Leading:如果收到Epoch相同,接收服务器宣称leader,判断是否半数以上服务器选举它,是则退出选举过程。如果收到Epoch不同,说明在另一个选举过程已有选举结果,保存选举结果,退出选举。

  • 41.zookeeper的作用:分布式锁、注册服务中心。
  1. 配置管理。2. 名字服务。3. 分布式锁。4. 集群管理。
  • 42.zookeeper如何实现分布式锁、其他分布式锁怎么实现。 分布式的CAP理论:一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。 分布式锁的实现方案: 1.数据库实现。 2.基于缓存(redis,memcached等)实现。 3.Zookeeper实现分布式锁。

【Zookeeper】Zookeeper中的ZAB协议/14-81,选主算法/14-70。OK ZAB协议:zookeeper原子广播协议。zookeeper通过Zab协议来保证分布式事务的最终一致性,Zab协议借鉴了Paxos算法。 步骤:客户端写请求,leader将写请求转化为事务并分配zxid,leader为每个follower分配单独的队列FIFO策略发送消息,follower接收请求写入磁盘并发送ack,leader收到半数以上ack后发送commit消息,follower收到commit消息后提交上一个事务。 Zab如何保证数据一致性:事务在leader提交,且超半数following响应ack,提交 Zab节点3种状态:leading,following,looking/选举,(observing) Zab协议3个阶段: 选举/选举leader,epoch最大/zxid最大/serverid最大,投票超过半数以上。 恢复/follower把自己lastZxid发给leader,follower从leader同步数据。 广播/ 选主算法/Fast算法/Fast Leader:1-9有答案。

分布式一致性协议raft,paxos 了解吗?/分布式数据一致性算法?14-82 Paxos算法,raft协议,Zab协议/zk Paxos算法:分布式系统对某一个状态达成一致。假设不存在拜占庭将军问题。 Paxos算法角色:proposer/发送提案,accepter/裁决提案/过半数/只能一个提案通过,learner/学习提案。 Paxos算法步骤: 1prepare阶段/生成提案/proposer,生成X编号的提案向acceptor发送,acceptor反馈并不再接受小于X号的提案。 2accpt阶段/批注提案 3learner阶段/学习策略:先发送给一个/一批learner,该learner再发送给其他learner。 Raft算法:拜占庭将军问题的解决方案,Raft共识算法,不同节点之间保持数据一致性。 节点的3个状态:leader,follower,candidate。 每个节点有倒计时150-300ms,重设timeout/收到选主的请求和收到leader的heart-beat。 Raft运行中2个活动:选主和复制日志。 选主: 1正常情况下选主:节点倒计时结束后状态变成candidate给其他节点发送选举请求,其他节点返回成功/半数以上由candidate转成leader,且每隔一段时间给其他follower发送heartbeat。 2leader故障下选主:正常情况下选主一样,故障的leader恢复加入集群后变为follower。 3多个candidate下选主:俩follower同时timeout成为candidate,并投票后平手,再次timeout新一轮投票。 复制日志: 1正常情况下复制日志:leader给其他follower发送更新数据请求,数据在follower上没冲突,将数据写在本地并返回ok,follower数据还是uncommitted,leader返回半数以上成功则状态改为committed且再次发送给其他follower。 2NetPartition情况下复制日志:部分节点之间没办法通信,Raft也能保证数据一致性。 拜占庭将军问题: 5个将军一个是奸细,对于进攻与否投票中俩将军赞成俩将军反对,这时投票的多数代表不了多数人的真实决议。拜占庭将军问题映射到分布式系统中,将军为分布式系统的节点,节点间的通信映射为信使,当分布式系统中通信不可靠时如何保证节点的数据一致性。

第2题:Kafka原理和容错。14-69 OK (原理)存储: 一个topic由多个partition组成,每个partition有自己的副本,一个partition内的消息有序,不同的partition间消息无序。partition的每条消息包含:offset,data,MessageSize三个属性。查找offset的Message是顺序查找,如果数据文件很大效率就低。Kafka通过分段segment和索引来提高查询效率。segment以最小的offset命名,每个segment大小相同(二分查找)。索引文件由offset和position组成。消息在partition的segment数据文件中是顺序读写,这种顺序磁盘IO存储设计是Kafka高性能很重要的原因。 生产者Producer负载均衡: topic由多个partition组成,partition分不到不同Broker。 容错: ISR机制:replication2f+1个节点,可失败2f个节点,且不丢失消息。 MajorityVote选举算法:可失败f个节点失败。

书 ACID,CAP/BASE

2PC与3PC

Paxos算法

ZAB协议

Zookeeper客户端

系统模型 数据节点,ZNode 全局唯一的事务ID,ZXID 节点类型:持久节点,顺序节点,临时节点。 持久节点,持久顺序节点,临时节点,临时顺序节点 顺序节点:保持第一级子节点的创建顺序 临时节点:生命周期和客户端的会话绑定在一起,会话失效则清理节点 watcher机制:发布订阅功能。客户端注册Watcher,服务端处理Watcher,客户端回调Watcher。 当服务端节点变更出发watcher机制后向客户端发送通知,客户端执行回调逻辑。 通信协议:基于TCP/IP的自行实现,len+请求头+请求体

Leader选举 看题

服务器角色 leader:处理所有写数据 follower observer

数据与存储 内存数据,磁盘数据 ConcurrentHashMap,key:数据的path,value:数据内容 临时节点,单独存储 磁盘数据:定时dump内存数据到磁盘