zookeeper分布式锁

ZooKeeper

安稳与你 提交于 2019-12-06 07:40:46
一、ZooKeeper入门   1.1 ZooKeeper 概述    Zookeeper是一个 基于观察者模式分布式开源框架 ,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务 ——分布式同步( Distributed Synchronization)、命名服务( Naming Service)、集群维护( Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。 ZooKeeper本身可以以单机模式安装运行,不过它的长处在于 通过分布式 ZooKeeper集群(一个 Leader,多个 Follower),基于一定的策略来保证 ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。   1.2 集群机制    Zookeeper集群的角色: Leader 和 follower   只要集群中有半数以上节点存活,集群就能提供服务   1.3 ZooKeeper 特性     1. 一个leader,多个follower组成的集群    2、 全局数据一致: 每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的    3、分布式读写,更新请求转发,由leader实施    4、更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行    5、 数据更新原子性

ZooKeeper典型应用场景一览

隐身守侯 提交于 2019-12-06 03:03:55
原文链接: https://www.cnblogs.com/tommyli/p/3766189.html ZooKeeper 典型应用场景一览 数据发布与订阅(配置中心) 发布与订阅模型,即所谓的配置中心,顾名思义就是发布者将数据发布到ZK节点上,供订阅者动态获取数据,实现配置信息的集中式管理和动态更新。例如全局的配置信息,服务式服务框架的服务地址列表等就非常适合使用。 应用中用到的一些配置信息放到ZK上进行集中管理。这类场景通常是这样:应用在启动的时候会主动来获取一次配置,同时,在节点上注册一个Watcher,这样一来,以后每次配置有更新的时候,都会实时通知到订阅的客户端,从来达到获取最新配置信息的目的。 分布式搜索服务中,索引的元信息和服务器集群机器的节点状态存放在ZK的一些指定节点,供各个客户端订阅使用。 分布式日志收集系统。这个系统的核心工作是收集分布在不同机器的日志。收集器通常是按照应用来分配收集任务单元,因此需要在ZK上创建一个以应用名作为path的节点P,并将这个应用的所有机器ip,以子节点的形式注册到节点P上,这样一来就能够实现机器变动的时候,能够实时通知到收集器调整任务分配。 系统中有些信息需要动态获取,并且还会存在人工手动去修改这个信息的发问。通常是暴露出接口,例如JMX接口,来获取一些运行时的信息。引入ZK之后,就不用自己实现一套方案了

zookeeper分布式锁

故事扮演 提交于 2019-12-05 23:05:43
分布式锁    流程 查看目标Node是否已经创建,已经创建,那么等待锁。 如果未创建,创建一个临时节点zkTemp,表示已经占有锁。 如果创建失败,那么证明锁已经被其他线程占有了,那么同样等待锁。 当释放锁,节点被删除,唤醒之前等待锁的线程去争抢锁。 分布式案例   OrderNumber生成订单号类: /*生成订单号*/ public class OrderNumber { private static int number=0; //生成订单号 public String getOrderNumber(){ SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); ++number; return simpleDateFormat.format(new Date())+"\t"+number; } }   OrderService订单业务逻辑类: /*订单业务逻辑*/ public class OrderService implements Runnable { private static OrderNumber orderNumber=new OrderNumber(); public Lock lock=new ZookeeperImpl(); //生成订单 public

zookeeper分布式锁

北城以北 提交于 2019-12-05 22:38:56
分布式锁    流程 查看目标Node是否已经创建,已经创建,那么等待锁。 如果未创建,创建一个临时节点zkTemp,表示已经占有锁。 如果创建失败,那么证明锁已经被其他线程占有了,那么同样等待锁。 当释放锁,节点被删除,唤醒之前等待锁的线程去争抢锁。 分布式案例   OrderNumber生成订单号类: /*生成订单号*/ public class OrderNumber { private static int number=0; //生成订单号 public String getOrderNumber(){ SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); ++number; return simpleDateFormat.format(new Date())+"\t"+number; } }    OrderService订单业务逻辑类: /*订单业务逻辑*/ public class OrderService implements Runnable { private static OrderNumber orderNumber=new OrderNumber(); public Lock lock=new ZookeeperImpl(); //生成订单

zookeeper的基础

一曲冷凌霜 提交于 2019-12-05 15:45:00
Zookeeper 课程目标 一 、 什么 Zookeeper Zookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。 1、zookeeper是为别的分布式程序服务的 2、Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务) 3、Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统> 一名称服务等 4、虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能: 管理 (存储,读取)用户程序提交的数据(类似namenode中存放的metadata); 并为用户程序提供数据节点监听服务; 1.1 Zookeeper 集群 机制 Zookeeper集群的角色: Leader 和 follower

Zookeeper(一)

十年热恋 提交于 2019-12-05 14:47:16
一、什么Zookeeper Zookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。 1、zookeeper是为别的分布式程序服务的 2、Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务) 3、Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统> 一名称服务等 4、虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能: 管理(存储,读取)用户程序提交的数据(类似namenode中存放的metadata); 并为用户程序提供数据节点监听服务; 1.1 Zookeeper集群机制 Zookeeper集群的角色: Leader 和 follower 只要集群中有半数以上节点存活,集群就能提供服务 1.2

zookpeeper简单的描述

匆匆过客 提交于 2019-12-05 14:40:50
一 、 什么是 Zookeeper Zookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。 1、zookeeper是为别的分布式程序服务的 2、Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务) 3、Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统> 一名称服务等 4、虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能: 管理 (存储,读取)用户程序提交的数据(类似namenode中存放的metadata); 并为用户程序提供数据节点监听服务; 1.1 Zookeeper 集群 机制 Zookeeper集群的角色: Leader 和 follower 只要集群中有半数以上节点存活

zookeeper分布式锁用法

我与影子孤独终老i 提交于 2019-12-05 14:10:30
package com.example.demo3.zk; import lombok.extern.slf4j.Slf4j; import org.apache.storm.shade.org.apache.zookeeper.*; import java.util.concurrent.CountDownLatch; /** * Zookeeper 初始化,获取锁,释放锁。创建临时锁。 */ @Slf4j public class ZooKeeperSession { private static CountDownLatch countDownLatch=new CountDownLatch(1); private ZooKeeper zooKeeper; //目录 private String lockPath="/orderId-lock-"; /** * 连接zookeeper */ public ZooKeeperSession(){ try { //连接zk服务器 this.zooKeeper=new ZooKeeper("192.168.132.154:2181,192.168.132.156:2181,192.168.132.155:2181", 50000,new ZooKeeperWatcher()); log.info("状态:"+zooKeeper

分布式问题分析

人走茶凉 提交于 2019-12-05 11:24:56
分布式问题分析 https://www.cnblogs.com/zhang-qc/p/8688052.html 原作者的blog问题写的非常好 先分布式 才能cloud native 参考: https://github.com/CyC2018/Interview-Notebook/blob/master/notes/ 业务中的分布式: 分布式 存储 :将数据分片到多个节点上,不仅可以提高性能(可扩展性),同时也可以使用多个节点对同一份数据进行备份(高可用性) 分布式 计算 :将一个大的计算任务分解成小任务分配到多个节点上去执行,再汇总每个小任务的执行结果得到最终结果。MapReduce 是分布式计算最好的例子。 分布式事务: 指事务的操作位于不同的节点上,需要保证事务的 AICD 特性。 产生的原因: 数据库分库分表; SOA 架构,比如一个电商网站将订单业务和库存业务分离出来放到不同的节点上。 解决办法: 1. 两阶段提交协议(很好地解决分布式事务问题) 2. 消息中间件(本质上是一个暂存转发消息的一个中间件) 处理模型:(1)点对点;(2)发布/订阅 负载均衡的算法与实现: 算法有轮询(Round Robin)、加权轮询、最少连接(将请求发送给当前最少连接数的服务器)、加权最小连接、随机算法 上面的没有加权的适合服务器性能差不多场景 Zookeeper 分布式锁  

Java-技术专区-技术栈分析辨证方法

僤鯓⒐⒋嵵緔 提交于 2019-12-05 11:12:20
1、好多公司动不动就JVM、高并发、分布式、微服务等等,我没有实际经验。 2、从事Java开发三年了,目前的职位是高级Java工程师,感觉技术和工资都到了瓶颈,对以后的发展方向有些迷茫。 3、加班时间过长,年龄大了,精力严重不够,竞争力远不如年轻程序员了。 4、Java工程师体量庞大,供大于需,导致Java程序员面临更加激烈的竞争。 5、目前做技术管理,薪资25K,但25K基本是天花板了,不甘心。   在我看来,开发三年甚至五六年以上的Java程序员要解决上面的问题无非就是两个层面: 1、技术经验   在技术经验方便,个人感觉你要想有所突破,首先就要形成一套技术体系,从技术的实现原理到技术应用,再到不同技术的优劣比较。因为当前各大公司使用的如火如荼的技术栈,无怪乎那些你已经曾经使用过的东西,只是你需要在这个基础上,让自己更有深度和见解。 2、业务需求能力   在业务需求能力方面,一个公司除了看重技术积累方面,另外还比较注重个人的业务理解和分析能力,如果你在某个领域的业务能力比较强,能够hold住当前的一个业务架构,这样说明你对业务的理解能力是非常到位的。所以在业务方便,首先需要的是结合场景的个人理解,其次是延伸扩展。   裁员并不可怕,没有技术实力才可怕,真正有实力的人不会被埋没。真正有实力的人才能走的更远飞的更高。当你具备这些能力时,你不用担心裁员而是应该考虑我要不要继续留在