Zookeeper入门·

官网:
http://Zookeeper.apache.org
Zoo keeper 动物园管理者
作用:用来管理大量服务的(用于分布式应用程序的高性能协调服务)
常用来:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。
什么是分布式?
随着公司的发展,应用的客户变多,功能也日益完善,加了很多的功能,整个项目在一个tomcat上跑,tomcat说它也很累,能不能少跑点代码,这时候 就产生了分布式系统。我们可以把大项目按功能划分为很多的模块,比如说单独一个系统处理订单,一个处理用户登录,一个处理后台等等,然后每一个模块都单独在一个tomcat中跑,合起来就是一个完整的大项目,这样每一个tomcat都非常轻松。(多个tomcat服务协同工作)
Zookeeper主要应用场景:
1注册中心
分布式应用中,通常需要有一套完整的命名规则,既能够产生唯一的名称又便于人识别和记住,通常情况下用树形的名称结构是一个理想的选择,树形的名称结构是一个有层次的目录结构。通过调用Zookeeper提供的创建节点的API,能够很容易创建一个全局唯一的path,这个path就可以作为一个名
称。
阿里巴巴集团开源的分布式服务框架Dubbo中使用Zookeeper来作为其命名服务,维护全局的服务地址列表。
2、配置中心
数据发布/订阅即所谓的配置中心:发布者将数据发布到Zookeeper一系列节点上面,订阅者进行数据订阅,当数据有变化时,可以及时得到数据的变化通知,达到动态获取数据的目的。
3、分布式锁
分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁。
4、分布式队列【12306、秒杀商品,网上挂号,抢购…】
在传统的单进程编程中,我们使用队列来存储一些数据结构,用来在多线程之间共享或传递数据。分布式环境下,我们同样需要一个类似单进程队列的组件,用来实现跨进程、跨主机、跨网络的数据共享和数据传递,这就是我们的分布式队列。
Java代码操作Zookeeper–Apache Curator( Apache Zookeeper的Java客户端库)
pom.xml

<!--Maven配置Java编译JDK版本和编码 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <!--Zookeeper的依赖--> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.7</version> </dependency> <!--zookeepr CuratorFramework 是NetFlix公司开发的一款连接Zookeeper服务的框架, 通过封装的一套高级API简化了Zookeeper的操作,提供了比较全面的功能, 除了基础的节点的操作,节点的监听,还有集群的连接以及重试. --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>4.0.1</version> </dependency>
<!--单元测试jar包--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies>

创建节点

//1.创建Zookeeper的客户端对象,配置重试策略
 String connectAddress = "127.0.0.1:2181";
 //两次重试之间,休眠的时间3s;最大重试3次
 RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000, 3);
 //创建节点
 CuratorFramework client = CuratorFrameworkFactory.newClient(connectAddress, retryPolicy);
 //2.开启客户端 
 client.start();
 client.create().forPath("/app1");
   //3.关闭客户端,释放资源 
   client.close();

修改节点数据

@Test 
public void updateNode() throws Exception {
 //1.开启客户端 
 client.start(); 
 //2.修改节点
  client.setData().forPath("/app1", "app1Node".getBytes()); 
  //3.关闭客户端,释放资源 
  client.close(); 
  }

节点数据查询

@Test 
public void getNode() throws Exception {
 //1.开启客户端 
 client.start(); 
 //2.获取节点数据 
 byte[] nodeDateBytes = client.getData().forPath("/app1"); 
 System.out.println("节点数据 = " + new String(nodeDateBytes));
  //3.关闭客户端,释放资源 
  client.close(); 
  }

删除节点

@Test 
public void deleteNode() throws Exception { 
//1.开启客户端 
client.start();
 //2.删除节点数据
  //方式1: 删除一个节点
   //client.delete().forPath("/app3");
    //方式2: 递归删除多个节点
     //client.delete().deletingChildrenIfNeeded().forPath("/app3");
      //方式3: 强制删除【避免一些因为网络传输导致的删除不成功】 client.delete().guaranteed().forPath("/app2"); 
      //3.关闭客户端,释放资源 
      client.close(); 
      }

zk的watch机制?
watch机制是一种订阅发布机制,使用了观察者模式,采用了一种推拉结合的模式。一旦服务端感知主题变了,那么只会发送一个事件类型和节点信息给关注的客户端,而不会包括具体的变更内容,所以事件本身是轻量级的,这就是所谓的“推”部分。然后,收到变更通知的客户端需要自己去拉变更的数据,这就是“拉”部分。
Curator(一款连接Zookeeper服务的框架)对watche机制在这方面做了优化,Curator引入了Cache的概念用来实现对Zookeeper服务器端进行事件监听。Cache是Curator对事件监听的包装,其对事件的监听可以近似看做是一个本地缓存视图和远程Zookeeper视图的对比过程。而且Curator会自动的再次监
听,我们就不需要自己手动的重复监听了。
Curator客户端中的cache共有三种
NodeCache:
NodeCache是用来监听指定节点的数据变化的,当监听的节点的数据发生变化的时候就会回调对应的函数。
PathChildrenCache
PathChildrenCache是用来监听指定节点 的子节点变化情况
TreeCache
TreeCache既能够监听
自身节点的变化、也能够监听子节点的变化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值