分布式锁

在分布式环境中,为了保证数据的一致性,经常在程序运行的某个运行点。需要进行同步控制。

  1. package master;
  2.  
  3. import java.text.SimpleDateFormat;
  4. import java.util.Date;
  5. import java.util.concurrent.CountDownLatch;
  6.  
  7. import org.apache.curator.framework.CuratorFramework;
  8. import org.apache.curator.framework.CuratorFrameworkFactory;
  9. import org.apache.curator.framework.recipes.locks.InterProcessLock;
  10. import org.apache.curator.framework.recipes.locks.InterProcessMultiLock;
  11. import org.apache.curator.framework.recipes.locks.InterProcessMutex;
  12. import org.apache.curator.retry.ExponentialBackoffRetry;
  13.  
  14. public class Recipes_Lock {
  15.  
  16. static String lock_path="/lock_paht";
  17. static CuratorFramework client = CuratorFrameworkFactory.builder().
  18. connectString("192.168.64.60:2181")
  19. .connectionTimeoutMs(5000).
  20. retryPolicy(new ExponentialBackoffRetry(3000, 3))
  21. .build();
  22.  
  23. public static void main(String[] args) {
  24. client.start();
  25. final InterProcessMutex lock= new InterProcessMutex(client,lock_path);
  26. final CountDownLatch down = new CountDownLatch(1);
  27.  
  28. for (int i = 0; i <30; i++) {
  29. new Thread(new Runnable() {
  30. public void run() {
  31. try {
  32. down.wait();
  33. lock.acquire();
  34. } catch (InterruptedException e) {
  35. // TODO Auto-generated catch block
  36. e.printStackTrace();
  37. } catch (Exception e) {
  38. // TODO Auto-generated catch block
  39. e.printStackTrace();
  40. }
  41. SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss|SSS");
  42. String orderNo = dateFormat.format(new Date());
  43. System.out.println("生成的订单号是:"+orderNo);
  44. try {
  45. lock.release();
  46. } catch (Exception e) {
  47. // TODO Auto-generated catch block
  48. e.printStackTrace();
  49. }
  50. }
  51. }).start();;
  52.  
  53. }
  54. down.countDown();
  55. }
  56. }

上面这个程序借助Curator来实现了一个简单的分布式锁。其核心接口如下:

工具

curator也提供了了很多的工具类,其中用的最多的就是zkPath和EnsurePath。

ZKPaths

ZKPaths提供了一些简单的API来构建ZNode路径,递归创建和删除节点等,

  1. package utils;
  2.  
  3. import org.apache.curator.framework.CuratorFramework;
  4. import org.apache.curator.framework.CuratorFrameworkFactory;
  5. import org.apache.curator.retry.ExponentialBackoffRetry;
  6. import org.apache.curator.utils.ZKPaths;
  7. import org.apache.curator.utils.ZKPaths.PathAndNode;
  8. import org.apache.zookeeper.ZooKeeper;
  9.  
  10. public class ZKPaths_sample {
  11.  
  12. static String path="/zkpath_path";
  13. static CuratorFramework client = CuratorFrameworkFactory.builder().
  14. connectString("192.168.64.60:2181")
  15. .connectionTimeoutMs(5000).
  16. retryPolicy(new ExponentialBackoffRetry(3000, 3))
  17. .build();
  18.  
  19. public static void main(String[] args) throws Exception {
  20. client.start();
  21.  
  22. ZooKeeper zooKeeper = client.getZookeeperClient().getZooKeeper();
  23. System.out.println(ZKPaths.fixForNamespace(path, "sub"));
  24. System.out.println(ZKPaths.makePath(path, "sub"));
  25. System.out.println(ZKPaths.getNodeFromPath("zkapth_path/sub1"));
  26.  
  27. PathAndNode pn = ZKPaths.getPathAndNode("/zkpath_path/sub1");
  28. System.out.println(pn.getPath());
  29. System.out.println(pn.getNode());
  30.  
  31. ZKPaths.mkdirs(zooKeeper, path+"/child1");
  32. ZKPaths.mkdirs(zooKeeper, path+"/child2");
  33. System.out.println(ZKPaths.getSortedChildren(zooKeeper, path));
  34.  
  35. }
  36.  
  37. }

EnsurePath

提供了一种能够确保数据及诶单存在的机制。

TestingServer

为了便于开发人员进行zookeeper的开发与测试,curator提供了一种启动简易的zookeeper服务器服务的方法

——TestingServer。TestingServer允许开发人员非常方便的启动一个标准的zookeeper服务器。并进行一系列的单元测试。

TestingCluster

TestingCluster是一个可以模拟zookeeper集群环境的curator工具类,能够便于开发人员在本地模拟由

n台机器组成的集群环境。下面我们模拟一个有3台机器构成的zookeeper集群场景。

读《分布式一致性原理》CURATOR客户端3的更多相关文章

  1. 读<分布式一致性原理>初识zookeeper

    zookeeper是什么 zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如:数据发布/订阅,负载均衡,命名服务,分布式协调/通知 ,集群管理,Master选举 ...

  2. 《从Paxos到Zookeeper:分布式一致性原理与实践》【PDF】下载

    内容简介 Paxos到Zookeeper分布式一致性原理与实践从分布式一致性的理论出发,向读者简要介绍几种典型的分布式一致性协议,以及解决分布式一致性问题的思路,其中重点讲解了Paxos和ZAB协议. ...

  3. 从Paxos到Zookeeper 分布式一致性原理与实践读书心得

    一 本书作者介绍 此书名为从Paxos到ZooKeeper分布式一致性原理与实践,作者倪超,阿里巴巴集团高级研发工程师,国家认证系统分析师,毕业于杭州电子科技大学计算机系.2010年加入阿里巴巴中间件 ...

  4. 读《分布式一致性原理》CURATOR客户端

    创建会话 使用curator客户端创建会话和其它客户端产品有很大不同 1.使用CuratorFrameworkFactory这个工厂类的两个静态方法来创建一个客户端: public static Cu ...

  5. 我读《从Paxos到zookeeper分布式一致性原理与实践》

    从年后拿到这本书开始阅读,到准备系统分析师考试之前,终于读完了一遍,对Zookeeper有了一个全面的认识,整本书从理论到应用再到细节的阐述,内容安排从逻辑性和实用性上都是很优秀的,对全面认识Zook ...

  6. 《从Paxos到ZooKeeper分布式一致性原理与实践》学习笔记

    第一章 分布式架构 1.1 从集中式到分布式 集中式的特点: 部署结构简单(因为基于底层性能卓越的大型主机,不需考虑对服务多个节点的部署,也就不用考虑多个节点之间分布式协调问题) 分布式系统是一个硬件 ...

  7. 《从Paxos到ZooKeeper 分布式一致性原理与实践》读书笔记

    一.分布式架构 1.分布式特点 分布性 对等性.分布式系统中的所有计算机节点都是对等的 并发性.多个节点并发的操作一些共享的资源 缺乏全局时钟.节点之间通过消息传递进行通信和协调,因为缺乏全局时钟,很 ...

  8. 2月22日 《从Paxos到Zookeeper 分布式一致性原理与实践》读后感

    zk的特点: 分布式一致性的解决方案,包括:顺序一致性,原子性,单一视图,可靠性,实时性 zk的基本概念: 集群角色:not Master/Slave,is Leader/Follower/Obser ...

  9. [从Paxos到ZooKeeper][分布式一致性原理与实践]<二>一致性协议[Paxos算法]

    Overview 在<一>有介绍到,一个分布式系统的架构设计,往往会在系统的可用性和数据一致性之间进行反复的权衡,于是产生了一系列的一致性协议. 为解决分布式一致性问题,在长期的探索过程中 ...

随机推荐

  1. Sqlalchemy 设置表编码及引擎

    1. 设置引擎编码方式为utf8. engine = create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/sqldb01?ch ...

  2. 【剑指offer】数组中出现次数超过数组长度一半的数字,C++实现

    原创博文,转载请注明出处! # 题目 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过 ...

  3. kubeadm搭建kubernetes集群之一:构建标准化镜像

    使用docker可以批量管理多个容器,但都是在同一台电脑内进行的,这在实际生产环境中是不够用的,如何突破单机的限制?让多个电脑上的容器可以像单机上的docker-compose.yml管理的那样方便呢 ...

  4. ubuntu安装依赖:0.8.1-1ubuntu4.4 正要被安装以及vm nested解决方法

    刚才在ubuntu10.04虚拟机上安装kvm,提示0.8.1-1ubuntu4.4 正要被安装,查了一下,有一种解决方法: 进入“系统->系统管理->更新管理器->设置”,在弹出的 ...

  5. BZOJ3083 遥远的国度 【树链剖分】

    BZOJ3083 遥远的国度 Description zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国度.当zcwwzdjn准备进入遥远的国度继续追杀时,守护神RapiD阻拦了zcw ...

  6. Ecel 粘贴图片并调整大小,移到底层

    Sub Click() ActiveSheet.Pictures.Paste.Select Selection.ShapeRange.ScaleWidth 1.4, msoTrueSelection. ...

  7. grpc 安装以及墙的解决方法

    1. 默认官方文档 go get -u google.golang.org/grpc 因墙的问题,大部分安装是无法完成的 2. 解决方法 a. grpc mkdir -p $GOAPTH/src/go ...

  8. Python WebServer with MSSql

    今天尝试了一下在windows上用python来写web服务 我的环境是 win7(64位)+ python(2.7.11) 第一步需要安装pymssql 第二步需要安装tornado(web服务靠他 ...

  9. 【转载】Leaflet 中文api

    L.Map API各种类中的核心部分,用来在页面中创建地图并操纵地图. 使用 example // initialize the map on the "map" div with ...

  10. php分页类 可直接调用

    <?php /** * 分页类 * @author xyy * 调用分页实例 $subPages=new SubPages(数据总条数);//实例化分页类 * //$subPages->s ...