zoukankan      html  css  js  c++  java
  • zookeeper基础知识

    zookeeper基础知识

         zk session
                每一个客户端连接到zk的时候都会生成一个session来代表这个客户端
                session有创建和销毁的过程,session只出现在zk的临时节点上面

                zk的数据和redis一样全部存储在内存中

                zk会在所有节点保存所有客户端的session信息

          zk只有主节点可以写,其他从节点都只能读
          zk集群是单主的模式,有单点故障问题,但是单主节点可以保证处理顺序的一致性
          主节点一旦宕机,zk会立即在从节点中投票选出一个新的主节点


           3888端口是zk所有节点启动的时候相互进行通信来选举zk leader
           zk leader选出来后会监听2888端口,其他节点会连接leader节点的2888端口
           然后通过2888端口进行节点创建,删除等相关业务操作

    zookeeper集群状态

             

              

             

            

            

     zookeeper的连接模型

            

             

           

     Paxos分布式一致性算法      

        Paxos成立的前提条件
            必须保证集群中所有主机通信是安全的,只有在一个可信的网络环境中才能成立

        

          ZAB协议

              两阶段提交

               1.leader把消息发送给所有的follwer,所有的follower会在本机先写相应的日志文件
                  leader会等待超过半数的follower返回写日志成功的结果
               2.leader接收到超过半数的follower(包含leader本身计算一票)成功消息后,leader本身会把数据写入自己的内存然后会把数据写入内存的任务发送给每个follower对应维护的消息队列
                  所有的follower会从自己的队列里消费任务,最终实现整个集群节点数据的一致性
          ZAB快速选出leader节点机制

          

     zookeeper的watch机制-分布式协调

         1.轮询心跳机制

         2.watch机制

        zk最大的优势是有事件回调机制

         

     zookeeper实现分布式协调机制

       

        

     zookeeper实现分布式锁

        zk实现分布式锁的优势 zk集群是高可用的
        redis是有单点故障 而且不能开启数据持久化,开启持久化就涉及磁盘IO影响性能

        锁的功能是在单机多线程或者分布式多主机多线程的情况下限制同一时刻只能有一个客户端使用被锁的资源
        单线程的情况下是无需设置锁的


         第一步:争抢锁 只有一个客户端能获得锁
         第二步:处理死锁 获得锁的客户端在没有释放锁之前就宕机
         第三步:客户端正常释放锁
         第四步: 锁被释放或者被删除后,如何通知其它客户端


        分布式锁实现机制
           1.每个独立线程并发连接zk集群
           2.线程连接zk后调用zk的API创建一个序列临时节点,创建完成之后所有线程进入等待状态
           3.注册创建zk临时节点回调函数,获取当前zk目录下的所有子节点
           4.比较子节点列表编号,把编号最小的线程从等待状态切换成运行状态
           5.每个zk临时节点watch它前面编号的zk节点

          

           

  • 相关阅读:
    Unobtrusive Ajax
    Asp.Net Web API 2(入门)第一课
    c# in depth之泛型的实现
    ASP.NET MVC 單元測試系列
    菜单栏
    【C++ 中文手册】即将完成
    AspNet MVC3中过滤器 + 实例
    虚拟机安装Linux中常见异常及解决办法
    webbrowser打开新窗口事件+=
    Java Bad version
  • 原文地址:https://www.cnblogs.com/yxh168/p/15194170.html
Copyright © 2011-2022 走看看