Zookeeper分布式锁
羊群效应
所有的连接都在对同一个节点进行监听,当服务器检测到删除事件时,要通知所有的连接,所有的连接同时收到事件,再次并发竞争
以上这两种加锁方式有一个共同的特质,就是都是<b>互斥锁</b>
同一时间只能有一个请求占用,如果是大量的并发上来,性能是会急剧下降的,所有的请求都得加锁,那是不是真的所有的请求都需要加锁呢?
zookeeper和redis实现分布式锁区别
优缺点
对于可靠性而言,zookeeper比redis更强一点。
从性能上zookeeper更差点,写的机器更多。
ZooKeeper 内存数据和持久化
事务日志
针对每一次客户端的事务操作,Zookeeper都会将他们记录到事务日志中
Zookeeper也会将数据变更应用到内存数据库中
可以在zookeeper的主配置文件zoo.cfg 中配置内存中的数据持久化目录
Zookeeper在创建事务日志文件的时候就进行文件空间的预分配
顺序写机制
数据快照
数据快照用于记录Zookeeper服务器上<b>某一时刻的全量数据</b>
可以通过配置snapCount配置每间隔事务请求个数,生成快照
快照事务日志文件名为: snapshot.<当时最大事务ID>
日志满了即进行下一次事务日志文件的创建
有了事务日志,为啥还要快照数据?
快照数据主要时为了快速恢复
事务日志文件是每次事务请求都会进行追加的操作
而快照是达到某种设定条件下的内存全量数据
所以通常快照数据是反应当时内存数据的状态
事务日志是更全面的数据,<br>所以恢复数据的时候,可以先恢复快照数据,再通过增量恢复事务日志中的数据即可。
Zookeeper 集群模式
Leader
处理所有的事务请求(写请求),可以处理读请求,集群中只能有一个Leader
<div yne-bulb-block="paragraph" style="white-space: pre-wrap; line-height: 1.75; font-size: 14px;"><span style="font-weight: bold;">Follower</span></div><!--5f39ae17-8c62-4a45-bc43-b32064c9388a:W3siYmxvY2tJZCI6IjQ0NjYtMTYwNTUyOTMyOTczNCIsImJsb2NrVHlwZSI6InBhcmFncmFwaCIsInN0eWxlcyI6eyJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsInRleHQtaW5kZW50IjowLCJsaW5lLWhlaWdodCI6MS43NSwiYmFjay1jb2xvciI6IiIsInBhZGRpbmciOiIifSwidHlwZSI6InBhcmFncmFwaCIsInJpY2hUZXh0Ijp7ImRhdGEiOlt7ImNoYXIiOiJGIiwic3R5bGVzIjp7ImJvbGQiOnRydWV9fSx7ImNoYXIiOiJvIiwic3R5bGVzIjp7ImJvbGQiOnRydWV9fSx7ImNoYXIiOiJsIiwic3R5bGVzIjp7ImJvbGQiOnRydWV9fSx7ImNoYXIiOiJsIiwic3R5bGVzIjp7ImJvbGQiOnRydWV9fSx7ImNoYXIiOiJvIiwic3R5bGVzIjp7ImJvbGQiOnRydWV9fSx7ImNoYXIiOiJ3Iiwic3R5bGVzIjp7ImJvbGQiOnRydWV9fSx7ImNoYXIiOiJlIiwic3R5bGVzIjp7ImJvbGQiOnRydWV9fSx7ImNoYXIiOiJyIiwic3R5bGVzIjp7ImJvbGQiOnRydWV9fV0sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fV0=-->
只能处理读请求,同时作为 Leader的候选节点,即如果Leader宕机,Follower节点要参与到新的Leader选举中,有可能成为新的Leader节点。
Observer
Observer:只能处理读请求。不能参与选举
Zookeeper集群安装