zoukankan      html  css  js  c++  java
  • zookeeper 分布式锁的实现及原理

    保证线程安全

    ZooKeeper初始化示意图

    InterProcessMutex

     1 public static void main(String[] args) {
     2         CuratorFramework curatorFramework = CuratorFrameworkFactory.builder()
     3                 // 客户端连接任意zk 节点都行,也可以指定集群
     4                 .connectString(CommonConstants.CONNECT_URL)
     5                 .sessionTimeoutMs(5000)
     6                 // 重试策略
     7                 .retryPolicy(new ExponentialBackoffRetry(1000, 3))
     8                 .connectionTimeoutMs(4000).build();
     9         // 表示启动
    10         curatorFramework.start();
    11         /**
    12          * locks表示命名空间
    13          *
    14          * 锁的获取逻辑是放在zookeeper上
    15          * 当前锁是跨进程可见
    16          */
    17         InterProcessMutex lock = new InterProcessMutex(curatorFramework, "/locks");
    18         for (int i = 0; i < 10; i++) {
    19             new Thread(()->{
    20                 System.out.println(Thread.currentThread().getName() + "->" + "尝试抢占锁");
    21                 try {
    22                     // 抢占锁,没有抢占到,则阻塞
    23                     lock.acquire();
    24                     System.out.println(Thread.currentThread().getName() + "->" + "获取锁成功");
    25                 } catch (Exception e) {
    26                     e.printStackTrace();
    27                 }
    28                 // 释放锁
    29                 try {
    30                     Thread.sleep(4000);
    31                     lock.release();
    32                     System.out.println(Thread.currentThread().getName() + "->" + "释放锁成功");
    33                 } catch (Exception e) {
    34                     e.printStackTrace();
    35                 }
    36             },"t-"+i).start();
    37         }
    38 
    39     }

    zookeeper leader 选举

    kafka -> master/slave | kafka+zookeeper

    Leader latch

      利用临时有序节点

    Leader selector

    利用 -> curator.recepis 中锁的实现

    • dubbo + zookeeper 注册中心,注册服务

    • dubbo + zookeeper 配置中心,元数据管理

    • 实现分布式锁(Curator)

    • leader 选举(定时任务的互斥执行)

      • leader latch

      • leader selector(释放leader权限知乎,仍然可以继续参与选举)

    zookeeper实际应用以及原理分析

      Zookeeper的基本原理

    数据模型

    • 弱一致性模型

    • 2 PC协议(原子性)

    • 过半提交

    ZABZAB(zookeeper atomic Broadcast)

     

    • leader选举

    • 数据同步

    • 崩溃恢复 (looking)

    • 原子广播

    •  

    消息广播

    • Zxid(64)

    • observer(不参与投票和ack,只和leader保持数据 同步)

    崩溃恢复

    • 选举出新leader(选举谁作为leader)

    • 数据同步

    Zxid(*)

    • 已经被处理的消息不能丢失

    • 被丢弃的消息不能再次出现

    如何实现?(leader)

     

    • zxid最大(和leader选举有关系?)

    • Epoch ->term(raft).zxid()

    Zxid(事务id)

    • 64位

    • 高32位是epoch、低32位代表递增是不编号

  • 相关阅读:
    飞控相关资料
    PID
    详解NXP Cortex-M3加密设置
    ucos ii 百度官方介绍
    两个静态页面之间值传递方式
    Wex5各组件介绍
    链接学习
    WeX5基础
    Oracle中用触发器实现自动记录表数据被修改的历史信息
    HTML DOM setInterval() 方法
  • 原文地址:https://www.cnblogs.com/lwx57280/p/13791511.html
Copyright © 2011-2022 走看看