Dubbo教程-02-zookeeper简介,一些API,分布式锁

本文介绍了Zookeeper的基础知识,包括其在分布式应用中的作用,如命名服务、配置管理、集群管理和分布式锁。详细讲解了如何利用Zookeeper实现分布式锁,包括原生API和Curator框架的使用,并提供了相关代码示例。通过Zookeeper,可以实现高效、可靠的分布式协调服务。
摘要由CSDN通过智能技术生成

zookeeper介绍

我们需要下载 zk

目前官网的一个稳定版本 zookeeper-3.4.12.tar.gz

http://mirrors.hust.edu.cn/apache/zookeeper/stable/

      ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等

zookeeper 可以保证最终数据一致性

zk 实例 可以主从复制 并且 效率很高 可靠性也高

结构化存储

类似模拟文件系统的一种存储方式

因为分布式的数据最终一致性

和结构化持久存储

以及优越的读写性能

我们通常会利用 zk 做下面这几件事情

1.命名服务

     在zookeeper的文件系统里创建一个目录,即有唯一的path。在我们使用tborg无法确定上游程序的部署机器时即可与下游程序约定好path,通过path即能互相探索发现。

2.配置管理

     程序总是需要配置的,如果程序分散部署在多台机器上,要逐个改变配置就变得困难。现在把这些配置全部放到zookeeper上去,保存在 Zookeeper 的某个目录节点中,然后所有相关应用程序对这个目录节点进行监听,一旦配置信息发生变化,每个应用程序就会收到 Zookeeper 的通知,然后从 Zookeeper 获取新的配置信息应用到系统中就好

3.集群管理

所谓集群管理无在乎两点:是否有机器退出和加入、选举master。
对于第一点,所有机器约定在父目录GroupMembers下创建临时目录节点,然后监听父目录节点的子节点变化消息。一旦有机器挂掉,该机器与 zookeeper的连接断开,其所创建的临时目录节点被删除,所有其他机器都收到通知:某个兄弟目录被删除,于是,所有人都知道:它上船了。
新机器加入也是类似,所有机器收到通知:新兄弟目录加入,highcount又有了,对于第二点,我们稍微改变一下,所有机器创建临时顺序编号目录节点,每次选取编号最小的机器作为master就好

4.分布式锁 

    有了zookeeper的一致性文件系统,锁的问题变得容易。锁服务可以分为两类,一个是保持独占,另一个是控制时序。
    对于第一类,我们将zookeeper上的一个znode看作是一把锁,通过createznode的方式来实现。所有客户端都去创建 /distribute_lock 节点,最终成功创建的那个客户端也即拥有了这把锁。用完删除掉自己创建的distribute_lock 节点就释放出锁。
     对于第二类, /distribute_lock 已经预先存在,所有客户端在它下面创建临时顺序编号目录节点,和选master一样,编号最小的获得锁,用完删除,依次方便。

5.队列管理

两种类型的队列:
1、同步队列,当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达。
2、队列按照 FIFO 方式进行入队和出队操作。
第一类,在约定目录下创建临时目录节点,监听节点数目是否是我们要求的数目。
第二类,和分布式锁服务中的控制时序场景基本原理一致,入列有编号,出列按编号。

zk角色介绍

本地安装

首先去我上面的地址下载zk

然后解压 放到一个 文件夹中

进入 zk文件夹 基本这个样子

我们 需要做一个 重命名 在我们 运行之前

把你看到的 那个 .cfg 文件 改成 我这样

然后 回到 bin 目录 启动

接下来我们会利用分布式锁 这个例子 演示 zk的 JAVA API

ZkDemo.java


import org.apache.zookeeper.*;

public class ZkDemo implements Watcher {

    public static void main(String[] args) throws Exception {
        ZooKeeper zooKeeper = new ZooKeeper("127.0.0.1:2181",3000*10,new ZkDemo());
        ZooKeeper.States state = zooKeeper.getState();
        System.out.println(state);
        zooKeeper.exists("/data",new ZkDemo());
        zooKeeper.create("/data","bywind".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        Thread.sleep(2000);

    }

    @Override
    public void process(WatchedEvent event) {
        System.out.println("watcher:"+event.getState());
        if (event.getType().equals(Event.EventType.NodeCreated)){
            System.out.println("watcher:node created");
        }
    }
}

HADemo.java 看ZK如何实现HA(High Availability高可用性)

import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class HADemo implements Watcher {

    private String role = "master";
    private static final String HA_PATH = "/HA";

    private ZooKeeper zooKeeper;



    public static void main(String[] args) throws Exception 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值