分布式锁
在分布式环境中,为了保证数据的一致性,经常在程序的某个运行点(例如,减库存操作或流水号生成等)需要进行同步控制。以流水号生成为例,普通的后台应用通常都是使用时间戳方式来生成,但是在用户并发量非常大的情况下,可能会出现并发问题,下面来演示下如何出现以及解决问题。
时间戳生成的并发问题
|
|
从输出结果可以看出订单号有很多的重复。
在分布式环境中,为了保证数据的一致性,经常在程序的某个运行点(例如,减库存操作或流水号生成等)需要进行同步控制。以流水号生成为例,普通的后台应用通常都是使用时间戳方式来生成,但是在用户并发量非常大的情况下,可能会出现并发问题,下面来演示下如何出现以及解决问题。
|
|
从输出结果可以看出订单号有很多的重复。
本章开始学习下Curator一些典型的使用场景,可以为实际项目提供参考。
Zookeeper原声支持通过注册Watcher来进行事件监听,但使用起来不是特别方便,需要反复注册Watcher,比较繁琐。Curator引入了Cache来实现对Zookeeper服务端事件的监听,Cache是Curator中对事件监听的包装,并且自动反复注册监听。Cache分为两类监听类型:节点监听和子节点监听。
本章我们来看下另外一个更强大的客户端Curator。
在zookeeper-sample项目中新建名为curator的module,curator版本如下:
开源客户端是对ZooKeeper原声API的封装,会屏蔽繁琐的细节,使开发人员用起来更方便,这一章我们就看一下ZkClient Api的使用。
在zookeeper-sample项目中新建名为zkclient的module,zkclent版本如下:
Zookeeper提供了ALC的权限控制机制,简单来说就是通过设置Zookeeper服务器上数据节点的ACL,来控制客户端对该数据节点的访问权限。Zookeeper提供了多种权限控制模式,这里选择digest来了解下API的使用方法。
|
|