java开发之zookeeper

一、zookeeper介绍
zookeeper是一个分布式开源框架,解决分布式协调工具
二、zookeeper应用场景
dobbo:rpc远程调用框架,zookeeper作为注册中心(命名服务)
1)发布订阅
2)负载均衡
3)分布式通知
4)mster选举
5)zookeeper分布式锁
6)分布式配置中心
7)分布式队列(不常用)
三、zookeeper节点
持久节点:永久保存到硬盘上
临时节点:生命周期内绑定,一旦连接断开,节点信息直接删除
临时顺序节点:按照顺序排列
顺序节点:节点有一个顺序的编号
四、java操作zookeeper

public class Zookeeper {
    //zookeeper连接地址
    private static final String CONNECTIONS="127.0.0.1:2181";
    //zookeeper会话超时时间
    private static final int OUTTIME=2000;
    //使用countDownLatch阻塞用户程序,用户必须等待连接,发送成功信号
    private static final CountDownLatch cd=new CountDownLatch(1);
    public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
        ZooKeeper zk=new ZooKeeper(CONNECTIONS, OUTTIME, new Watcher() {
            //事件通知
            public void process(WatchedEvent event) {
                //获取事件状态
                KeeperState State = event.getState();
                //判断事件连接状态
                if(KeeperState.SyncConnected==State){
                    //获取事件类型
                    EventType eventType = event.getType();
                    //EventType.None表示为连接状态
                    if(eventType==EventType.None){
                        //cd.countDown();
                        System.out.println("zookeeper开始启动连接.....");
                    }
                }
            }
        });
        //cd.await();
        //"/test1"为节点名称,"test"为节点内容,Ids.OPEN_ACL_UNSAFE为开放权限,CreateMode.PERSISTENT为创建持久节点
        String result=zk.create("/test", "test".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        System.out.println("新增节点信息:"+result);
        zk.close();
    }

五、节点事件通知
通过使用事件监听,获取到节点发生改变信息,比如:新增、删除、修改
六、zookeeper实现分布式锁
使用临时节点,只要能创建临时节点,就能获得锁,连接关闭后,会释放锁
七、线程安全问题
当多个线程共享同一个全局变量,做写的时候可能会受到其他线程的干扰,导致数据问题,这种现象叫做线程安全问题。
八、分布式锁
分布式锁是在多个jvm中保证唯一
九、分布式锁实现方式
1)数据库实现分布式锁
2)使用缓存实现分布式锁
3)zookeeper实现分布式锁
十、zookeeper实现分布式锁实现原理
使用zookeeper创建临时顺序节点来实现分布式锁,适用于顺序执行的程序,思路是创建临时序列节点,找出最小的序列节点,获得分布式锁,程序执行完成后此序列节点消失
通过watcher来监控节点的变化,从剩下的节点找到最小的序列节点,获得分布式锁,执行相应处理,依次类推
十一、负载均衡
负载均衡的作用是减轻服务器访问压力
十二、负载均衡算法
1)轮询机制:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器宕掉,能自动剔除
2)IP绑定:每个请求按ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session问题
3)权重:指定轮询几率,weight和访问率成正比,用于后端服务器性能不匀的情况
4)随机
十三、软负载和硬负载的区别
1)软负载:使用软件进行实现,比如:Nginx,缺点:服务器反向代理配置发生更改需要重启反向代理服务器
2)硬负载:使用硬件进行实现,比如:F5
十四、动态负载均衡
当服务器发生变化时可以实时的进行更新同步,不需更新
十五、duboo负载均衡原理
生产者提供服务到注册中心,有多台服务器情况下,通过轮询机制进行调用。

你可能感兴趣的:(java开发之zookeeper)