bboyjing's blog


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • 公益404
bboyjing's blog

Zookeeper学习笔记八【Curator典型使用场景(二)】

发表于 2016-10-12 | 分类于 Zookeeper

分布式锁

在分布式环境中,为了保证数据的一致性,经常在程序的某个运行点(例如,减库存操作或流水号生成等)需要进行同步控制。以流水号生成为例,普通的后台应用通常都是使用时间戳方式来生成,但是在用户并发量非常大的情况下,可能会出现并发问题,下面来演示下如何出现以及解决问题。

时间戳生成的并发问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class RecipesNoLock {
public static void main(String[] args) throws Exception {
final CountDownLatch down = new CountDownLatch(1);
for (int i = 0; i < 10; i++) {
new Thread(() -> {
try {
down.await();
} catch (Exception e) {
}
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss|SSS");
String orderNo = sdf.format(new Date());
System.err.println("生成的订单号是 : " + orderNo);
}).start();
}
down.countDown();
}
}

从输出结果可以看出订单号有很多的重复。

阅读全文 »
bboyjing's blog

Zookeeper学习笔记七【Curator典型使用场景(一)】

发表于 2016-10-09 | 分类于 Zookeeper

本章开始学习下Curator一些典型的使用场景,可以为实际项目提供参考。

事件监听

Zookeeper原声支持通过注册Watcher来进行事件监听,但使用起来不是特别方便,需要反复注册Watcher,比较繁琐。Curator引入了Cache来实现对Zookeeper服务端事件的监听,Cache是Curator中对事件监听的包装,并且自动反复注册监听。Cache分为两类监听类型:节点监听和子节点监听。

阅读全文 »
bboyjing's blog

Zookeeper学习笔记六【开源客户端之Curator】

发表于 2016-09-21 | 分类于 Zookeeper

本章我们来看下另外一个更强大的客户端Curator。

环境准备

在zookeeper-sample项目中新建名为curator的module,curator版本如下:

1
2
3
4
5
6
7
8
<!-- curator -->
<dependencies>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.11.0</version>
</dependency>
</dependencies>

阅读全文 »
bboyjing's blog

Zookeeper学习笔记五【开源客户端之ZkClient】

发表于 2016-09-21 | 分类于 Zookeeper

开源客户端是对ZooKeeper原声API的封装,会屏蔽繁琐的细节,使开发人员用起来更方便,这一章我们就看一下ZkClient Api的使用。

准备环境

在zookeeper-sample项目中新建名为zkclient的module,zkclent版本如下:

1
2
3
4
5
6
7
8
<dependencies>
<!-- zkclient -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.9</version>
</dependency>
</dependencies>

阅读全文 »
bboyjing's blog

Zookeeper学习笔记四【Java客户端API之权限控制】

发表于 2016-09-12 | 分类于 Zookeeper

Zookeeper提供了ALC的权限控制机制,简单来说就是通过设置Zookeeper服务器上数据节点的ACL,来控制客户端对该数据节点的访问权限。Zookeeper提供了多种权限控制模式,这里选择digest来了解下API的使用方法。

创建带权限信息的节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//使用含权限信息的ZooKeeper会话创建数据节点
public class ZNodeForFoo implements Watcher{
private static CountDownLatch connectedSemaphore = new CountDownLatch(1);
public static void main(String[] args) throws Exception {
String path = "/zk-book-auth_test";
ZooKeeper zookeeper = new ZooKeeper("localhost:2181", 50000, new ZNodeForFoo());
connectedSemaphore.await();
//添加带权限信息的节点
zookeeper.addAuthInfo("digest", "foo:true".getBytes());
zookeeper.create( path, "init".getBytes(), Ids.CREATOR_ALL_ACL, CreateMode.EPHEMERAL );
}
@Override
public void process(WatchedEvent watchedEvent) {
if (Event.KeeperState.SyncConnected == watchedEvent.getState()) {
connectedSemaphore.countDown();
}
}
}
阅读全文 »
1…242526…30
bboyjing

bboyjing

147 日志
17 分类
20 标签
友情链接
  • bailaohe
© 2021 bboyjing
由 Hexo 强力驱动
主题 - NexT.Mist