面试大厂必问题:分布式锁实现之zk(Zookeeper)+面试资料

本文介绍了分布式锁的重要性,特别是在多线程和分布式环境中防止数据不一致。通过举例说明了Redis在分布式情况下仍需加锁的原因,然后详细探讨了Zookeeper(zk)作为分布式锁的实现方式,包括zk的常用场景、节点类型、并发竞争控制。文章通过伪代码展示了zk如何解决并发问题,讨论了zk分布式锁的实现机制、优点和潜在的并发问题,并对比了基于Redis的分布式锁方案。最后,文章总结了zk分布式锁的关键特性,并预告了接下来将讨论的Redis和MySQL的分布式锁实现。
摘要由CSDN通过智能技术生成

 

点赞再看,养成习惯,感谢大家的阅读!

 

前言

说我想不需要我过多的去说,大家都知道是怎么一回事了吧?

在多线程环境下,由于上下文的切换,数据可能出现不一致的情况或者数据被污染,我们需要保证数据安全,所以想到了加锁。

所谓的加锁机制呢,就是当一个线程访问该类的某个数据时,进行保护,其它线程不能进行访问,直到该线程读取完,其他线程才可使用。

还记得我之前说过Redis在分布式的情况下,需要对存在并发竞争的数据进行加锁,十分费解,Redis是单线程的嘛?为啥还要加锁呢?

看来老公们还是年轻啊,你说的不需要加锁的情况是这样的:创作中心

面试大厂必问题:分布式锁实现之zk(Zookeeper)+面试资料

 

单个服务去访问Redis的时候,确实因为Redis本身单线程的原因是不用考虑线程安全的,但是,现在有哪个公司还是单机的呀?肯定都是分布式集群了嘛。

你看下这样的场景是不是就有问题了:

你们经常不是说秒杀嘛,拿到库存判断,那老婆告诉你分布式情况就是会出问题的。

面试大厂必问题:分布式锁实现之zk(Zookeeper)+面试资料

 

我们为了减少DB的压力,把库存预热到了KV,现在KV的库存是1。

  1. 服务A去Redis查询到库存发现是1,那说明我能抢到这个商品对不对,那我就准备减一了,但是还没减。
  2. 同时服务B也去拿发现也是1,那我也抢到了呀,那我也减。
  3. C同理。
  4. 等所有的服务都判断完了,你发现诶,怎么变成-2了,超卖了呀,这下完了。

是不是发现问题了,这就需要分布式锁的介入了,我会分三个章节去分别介绍分布式锁的三种实现方式(Zookeeper,Redis,MySQL),说出他们的优缺点,以及一般大厂的实践场景。

正文

  • 互斥:互斥的机制,保证同一时间只有一个线程可以操作共享资源 synchronized,Lock等。
  • 临界值:让多线程串行话去访问资源
  • 事件通知:通过事件的通知去保证大家都有序访问共享资源
  • 信号量:多个任务同时访问,同时限制数量,比如发令枪CDL,Semaphore等

那分布式锁你了解过有哪些么?

分布式锁实现主要以Zookeeper(以下简称zk)、Redis、MySQL这三种为主。

那先跟我聊一下zk吧,你能说一下他常见的使用场景么?

它主要的应用场景有以下几个:

  • 服务注册与订阅(共用节点)
  • 分布式通知(监听znode)
  • 服务命名(znode特性)
  • 数据订阅、发布(watcher)
  • 分布式锁(临时节点)

zk是啥?

它是个数据库,文件存储系统,并

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值