zoukankan      html  css  js  c++  java
  • Zookeeper算法原理笔记

    一、定义:基于消息传递的【一致性算法】

    二、算法的前提:没有拜占庭将军问题;可信的计算机环境中才成立

    三、故事描述

      有一个叫做paxos的小岛,上面居住了一些居民

      岛上的事情由一些特殊的人决定:议员(senator)

      岛上环境事务的变更都需要通过一个提议(Proposal),每个提议都有一个编号(PID),这个编号是一直增长的,不能减少

      每个提议都需要超过半数的议员同意才能执行(senator count/2 + 1)

      每个议员只会同意大于当前编号的提议(包含已生效和未生效的),当前编号是议员自己记录的,每次会议并不能保证每个议员自己记录的当前编号是一致的

      如果小于等于当前编号,则意味着已经有人提过了

      会议的目的:所有的议员对于提议达成一致的看法

    四、ZAB:基于paxos算法为zookeeper定制的分布式一致性算法

      1、四个阶段:

    • 选举阶段:发现leader挂掉了,需要重新选举
    • 发现阶段:选出新的leader,进行连接,同步状态
    • 同步阶段:同步leader上一阶段的副本数据
    • 广播阶段:对外提供服务,消息广播

      

      2、节点的三种状态:

    • FOLLOWING:追随
    • LEADING:领导
    • LOKING:查找选举新Leader

      3、特性:简单和快。虽然可以存储数据,但zookeeper的设计目标并非用于数据库使用,而是分布式协调。其要求的一些特性

    • 高可用&故障容忍(和强一致性冲突)
    • 快(理论上和强一致性也是冲突的,主要是由于要达到数据的一致性,然后又要在一定时间内响应)- 为什么快:因为采用的是基于消息传递(消息队列:顺序)的最终一致性协议(最终一致性可以容忍网络波动和单点故障),使得在一定时间内可以对客户端的请求作出一定响应,但注意:zookeeper更适用于读的比例高于写的比例的场景(如1:10)
    • 在spring 体系中的常规应用:config & discovery;配置和服务发现
    • 可应用在分布式锁(临时节点-session级别,断开后或session失效后则消失),此特性应也可用于微服务的服务管理

      

      4、角色:

    • Leader:领导者,负责写
    • Follower:追随者,负责读
    • Observer:基于zookeeper的设计目标,是要有极快的客户端响应速度,在故障恢复的时候需要重新选举,过多的节点参与选举会影响响应速度;而此角色是不参与投票的。故不会影响故障恢复的200ms目标   
  • 相关阅读:
    [转] DataSet的的几种遍历
    [转] C#实现在Sql Server中存储和读取Word文件 (Not Correct Modified)
    C# 在根据窗体中的表格数据生成word文档时出错
    【剑指offer】堆栈推弹出序列
    kettle于javascript步骤错误处理
    【算法导论】堆排序
    malloc,free简单的实现
    Lichee (六) 优化配置的微内核
    EJBCA于Linux安装在
    【C++】智能指针auto_ptr简单的实现
  • 原文地址:https://www.cnblogs.com/gabin/p/13690647.html
Copyright © 2011-2022 走看看