zoukankan      html  css  js  c++  java
  • Zk学习笔记——应用场景

    1.Master选举

    在分布式系统中,需要选举一台机器作为master或者leader。

    这时候,可以选择一个跟节点,比如/master,然后多台机器同时像这个节点创建一个子节点/master/lock,利用zookeeper的特性,最终只有一台机器能否创建成功,成功的那台机器就是Master;

    其他机器注册watch到这个子节点,然后当master宕机的时候,其他机器就会重新开始选举。

    2.分布式锁

    分布式锁的场景通常是多个进程需要在某个节点保证同步,比如保证只有一个进程进到某个函数里面

    下面例子中的查询余额更新余额操作就需要用锁锁住,保证一个线程做完了查询和更新操作之后,才能有另外一个线程来做查询和更新操作

    这个使用的锁称为排他锁(Exclusive Locks),又称为写锁或者独占锁。当一个事务1对数据对象1加了排他锁,那么在整个加锁期间,只允许事务1对对象1进行读取或者更新

    一个账户有100元
    进程A,查询账户余额,等于100元
    进程B,查询账户余额,等于100元
    进程B,取出100元,并更新,100-100=0
    进程A,存入100元,并更新,100+100=200(此时发生错误)
    

    其他的锁还有共享锁(Shared Locks),又称之为读锁。 如果事务1对数据对象1加了共享锁,那个当前事务只能对数据对象1进行读操作,其他事务也只能对这个对象加共享锁,直到所有共享锁都被释放。

    3.分布式计数器

    比如统计系统的在线人数

    4.分布式Barrier

    barrier是一种控制多线程之间同步的经典方法

    在一个JVM里面,可以使用java的CyclicBarrier,会等待所有线程同步后,再执行其他业务逻辑

    参考:Java多线程——其他工具类CyclicBarrier、CountDownLatch和Exchange

    在分布式的场景下,可以使用zk来实现

    5.hadoop

    在Hadoop中,Zookeeper主要用于实现HA,其中HDFS的NameNode和ResourceManager都是基于Zookeeper实现的HA。

    6.Hbase

    在Hbase中,Zookeeper主要用于分布式状态协调,即regionserver挂掉时,通知到整个hbase系统,以及客户端。

    7.Kafka

  • 相关阅读:
    Django-haystack对接elasticsearch
    Django http 和 https 官网解答
    -bash: nohup: command not found
    Mysql 10060登录异常解决方法
    ssh
    sed grep awk用法
    grep用法
    shell 随笔
    列表生成式
    css
  • 原文地址:https://www.cnblogs.com/tonglin0325/p/13288482.html
Copyright © 2011-2022 走看看