zookeeper 是分布式锁架构中 数据安全的问题:
可见性:
JMM: volatile synchnorized lock
原子性:
synchronized lock
有序性:
重新排序 volatile synchnorized lock
分布式锁的解决方案:
mysql:
使用行锁: for update
唯一索引
redis:
setNx 命令; 如果key不存在就插入,否则就返回null
zookeeper:
分布式协调框架
半数协调机制
zookeeper 设置的集群一般都是基数的 如果设置的集群挂点之后存活的必须超过半数以上整个集群才能使用。
主集群能 读写, 其余的都只能读。
命令:
create -s 文件路径 内容 -s 是自动生成自增的序号
zookeeper中的监听watch
数据内容的监听 ; get path watch
zookeeper中分布式锁其实就是基于 短暂有序节点+ watch(监听) 要是相互互斥
分布式中 使用锁的应用,
InterProcessMutex lock = new InterProcessMutex(client , "临时的节点路径"); lock.acquire(); //抢占锁 lock.release(); //释放锁
zookeeper 的使用
1 使用在mq中用来监听生产者的消息, 等消费者消费之后来通知生产者的作用:
2 使用zookeeper还能设置主备操作,
加锁:
创建一个临时的节点,
释放锁:
删除临时节点