Apache Curator

聊聊curator recipes的LeaderLatch

℡╲_俬逩灬. 提交于 2019-12-02 07:36:46
序 本文主要研究一下curator recipes的LeaderLatch 实例 @Test public void testCuratorLeaderLatch() throws Exception { CuratorFramework client = CuratorFrameworkFactory.newClient("localhost:2181", new ExponentialBackoffRetry(1000, 3)); client.start(); String leaderLockPath = "/leader-lock2"; List<LeaderLatch> latchList = IntStream.rangeClosed(1,10) .parallel() .mapToObj(i -> new LeaderLatch(client,leaderLockPath,"client"+i)) .collect(Collectors.toList()); latchList.parallelStream() .forEach(latch -> { try { latch.start(); } catch (Exception e) { e.printStackTrace(); } }); TimeUnit.SECONDS.sleep(5); Iterator

三种实现分布式锁的方式

戏子无情 提交于 2019-11-30 14:59:37
一、为什么要使用分布式锁 我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的Java多线程的18般武艺进行处理,并且可以完美的运行,毫无Bug! 注意这是单机应用,也就是所有的请求都会分配到当前服务器的JVM内部,然后映射为操作系统的线程进行处理!而这个共享变量只是在这个JVM内部的一块内存空间! 后来业务发展,需要做集群,一个应用需要部署到几台机器上然后做负载均衡,大致如下图: 上图可以看到,变量A存在JVM1、JVM2、JVM3三个JVM内存中(这个变量A主要体现是在一个类中的一个成员变量,是一个有状态的对象,例如:UserController控制器中的一个整形类型的成员变量),如果不加任何控制的话,变量A同时都会在JVM分配一块内存,三个请求发过来同时对这个变量操作,显然结果是不对的!即使不是同时发过来,三个请求分别操作三个不同JVM内存区域的数据,变量A之间不存在共享,也不具有可见性,处理的结果也是不对的! 如果我们业务中确实存在这个场景的话,我们就需要一种方法解决这个问题! 为了保证一个方法或属性在高并发情况下的同一时间只能被同一个线程执行,在传统单体应用单机部署的情况下,可以使用Java并发处理相关的API(如ReentrantLock或Synchronized)进行互斥控制。在单机环境中,Java中提供了很多并发处理相关的API

zookeeper - java

£可爱£侵袭症+ 提交于 2019-11-29 19:57:33
Curator几个组成部分 Client: 是ZooKeeper客户端的一个替代品, 提供了一些底层处理和相关的工具方法 Framework: 用来简化ZooKeeper高级功能的使用, 并增加了一些新的功能, 比如管理到ZooKeeper集群的连接, 重试处理 Recipes: 实现了通用ZooKeeper的recipe, 该组件建立在Framework的基础之上 Utilities:各种ZooKeeper的工具类 Errors: 异常处理, 连接, 恢复等 Extensions: recipe扩展 @Bean(initMethod = "start", destroyMethod = "close") public CuratorFramework zookeeperClient() { //创建重试策略 RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 5); //创建zookeeper客户端 CuratorFramework client = CuratorFrameworkFactory.builder().connectString("77.11.159.108:2181") //.authorization() //.connectionTimeoutMs() //

【Spring Boot】26.分布式

心已入冬 提交于 2019-11-29 19:24:35
简介 在本章节你可以学习到: dubbo和zookeeper的基本特性 一个简单的集成项目 zookeeper可视化工具和dubbo可视化工具 分布式和集群的特点 分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。 在分布式系统中,国内常用zookeeper+dubbo组合,而Spring Boot推荐使用全栈的Spring,Spring Boot+Spring Cloud。 分布式系统可以用下图直观的表示 分布式系统是若干独立计算机的集合,这计算机对用户来说就像单个相关系统。 单一应用架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。 垂直应用架构 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。 分布式服务架构 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

Zookeerper实现分布式锁服务

放肆的年华 提交于 2019-11-29 09:13:47
利用Curator客户端API,实现分布式事务锁. 1.Maven 坐标配置 <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>2.5.0</version> </dependency> 2.利用API封装类 CuratorUtil.java import java.util.concurrent.TimeUnit; import org.apache.curator.RetryPolicy; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.framework.recipes.locks.InterProcessMutex; import org.apache.curator.retry.ExponentialBackoffRetry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework

zk运维中的知识补充

Deadly 提交于 2019-11-28 19:52:39
1 使用telnet命令连接zk telnet 127.0.0.1 2181 使用stat命令查看服务状态信息 2 brew install zookeeper create -e /zk-book 123 ls / get /zk-book set /zk-book delete /zk-book 客户端 zkClient Curator ZK原始API 来源: oschina 链接: https://my.oschina.net/iioschina/blog/3134290

Apache Curator Zookeeper客户端

余生颓废 提交于 2019-11-26 17:05:23
Curator是Netflix公司开源的一个Zookeeper客户端,与Zookeeper提供的原生客户端相比,Curator的抽象层次更高,简化了Zookeeper客户端的开发量。 1.Zookeeper安装部署 Zookeeper的部署很简单,如果已经有 Java 运行环境的话,下载tarball解压后即可运行。 [root@vm Temp]$ wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz [root@vm Temp]$ tar zxvf zookeeper-3.4.6.tar.gz [root@vm Temp]$ cd zookeeper-3.4.6 [root@vm zookeeper-3.4.6]$ cp conf/zoo_sample.cfg conf/zoo.cfg [root@vm zookeeper-3.4.6]$ export ZOOKEEPER_HOME=/usr/local/src/zookeeper-3.4.5 [root@vm zookeeper-3.4.6]$ export PATH=$ZOOKEEPER_HOME/bin:$PATH [root@vm zookeeper-3.4.6]$ bin/zkServer.sh

使用Curator实现的zookeeper分布式锁出现的Unimplemented for {root.path}

南笙酒味 提交于 2019-11-26 17:05:07
问题描述 Curator使用 ZooKeeper 作为分布式锁,启动时发生该异常。 Curator 客户端版本: curator-recipes-2.10.0 ZooKeeper 服务器版本: 3.4.13 $ echo stat | nc localhost 2181 Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT 异常日志 Exception in thread "pool-5-thread-4789" java.lang.NoClassDefFoundError: Could not initialize class com.itstyle.seckill.distributedlock.zookeeper.ZkLockUtil 以及 org.apache.zookeeper.KeeperException$UnimplementedException: KeeperErrorCode = Unimplemented for /curator/lock/_c_9e23f33f-49e7-48df-a268-0dde3afb0e35-lock- 问题分析 UnimplementedException 的描述是 Operation

基于zookeeper/curator的一个任务分片方案

两盒软妹~` 提交于 2019-11-26 09:33:01
假如现在有一个表,表里记录的是一些延迟消息,也就是在未来某时刻需要发送出去的消息,表的记录数不定,如果很多,那么需要多台机器来执行,如果很少,那么一两台就够了,这时候需要一个领导选举/任务分片的工作,下面是一个方案,使用curator来实现。 上代码: import com.google.common.collect.Lists; import org.apache.commons.lang3.StringUtils; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.framework.recipes.cache.NodeCache; import org.apache.curator.framework.recipes.cache.NodeCacheListener; import org.apache.curator.framework.recipes.cache.PathChildrenCache; import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent;