zoukankan      html  css  js  c++  java
  • zookeeper全局数据一致性及其典型应用(发布订阅、命名服务、帮助其他集群选举)

    ZooKeeper全局数据一致性:

      全局数据一致:集群中每个服务器保存一份相同的数据副本,client 无论连接到哪个服务器,展示的数据都是一致的,这是最重要的特征。

    那么zookeeper集群是怎样做到全局数据一致的呢?

    • 1,zookeeper集群中有一个leader和多个follower;
    • 2,当follower接收到客户端事务性请求(对znode的增删改)的时候,会把该事务请求 转发给leader;
    • 3,leader根据某种规则,调度所有同时对某个znode节点进行事务性操作的follower先后顺序;
    • 4,一旦客户端通过zk集群中的某一个进行了事务性操作,那么集群中所有的zk都认可这个操作,以保证客户端通过任何zk查询得到的结果是一致的。

    ZooKeeper数据的发布与订阅:

    首先我们设想一个应用场景:

      我们使用dubbo的时候,注册服务提供者的时候就相当于发布,注册服务消费者的时候就相当于订阅。

    那么具体是怎么实现的呢?

    • 1,启动服务提供者时,把其注册到zk上,相当于我们把这个提供者的信息防止在zk的某个znode节点上;
    • 2,启动服务消费者时,把其注册到zk上,相当于去zk指定的节点去拉去提供者信息,并开启针对该节点数据修改的监听;
    • 3,当提供者在zk的节点上的数据修改的时候,会触发监听通知给消费者,然后消费者再重新拉去提供者信息,并开启监听。。。

    如此便实现了zookeeper的发布与订阅。

    ZooKeeper的命名服务:

      在分布式系统中,通过使用命名服务,客户端应用能够根据指定名字来获取资源或服务的地址,提供者等信息。被命名的实体通常可以是集群中的机器,提供的服务地址,远程对象等等——这些我们都可以统称他们为名字(Name)。其中较为常见的就是一些分布式服务框架中的服务地址列表。通过调用 ZK 提供的创建节点的 API,能够很容易创建一个全局唯一的 path(znode),这个 path 就可以作为一个名称。

    ZooKeeper帮助其他集群选举Master:

      zookeeper不仅可以根据自身的选举机制来选举集群中的主从关系,还可以帮助其他应用的集群进行选举。

    那么zookeeper是如何实现的呢?

    • 1,首先让这个软件集群中的每个软件在启动的时候,都先去zk指定的路径下创建指定的znode节点(非序列化、短暂的);
    • 2,集群中的哪个机器创建成功的话,就是当下的Master,其他的都创建不成功之后设置监听(监听指定的znode是否存在),然后安心当slave;
    • 3,如果某一刻当前的Master挂掉了,会话结束这个znode也就被删除了,那么其他slave的监听就会触发,然后再次去执行第一步的,创建znode成功的作为新的Master。。

    如此便实现了zookeeper帮助其他集群选举。

  • 相关阅读:
    POJ 1556 The Doors (未完)
    setblendstate & setdepthstencilstate
    transparent 的新问题
    texCUBE() to CubemapSampler.Sample()
    error: The shader requires a sampler in slot 0 which hasn't been set [XXXsampler]
    error X3025:global variables are implicitly constant, enable compatibility mode to allow modification
    MSAA
    check environment var
    setDepthStencilState
    sampler state
  • 原文地址:https://www.cnblogs.com/blazeZzz/p/9643003.html
Copyright © 2011-2022 走看看