当前位置:   article > 正文

另外一个进程已经为 dpkg frontend lock 加锁_手把手教你实现一个基于Redis的分布式锁...

另外一个进程已经为dpkg frontend lock加锁

986109326b6fe773aa63271e1fd72c78.png
作者:王天一
链接: https://www. wangtianyi.top

简介

分布式锁在分布式系统中非常常见,比如对公共资源进行操作,如卖车票,同一时刻只能有一个节点将某个特定座位的票卖出去;如避免缓存失效带来的大量请求访问数据库的问题

设计

这非常像一道面试题:如何实现一个分布式锁?在简介中,基本上已经对这个分布式工具提出了一些需求,你可以不着急看下面的答案,自己思考一下分布式锁应该如何实现?

首先我们需要一个简单的答题套路:需求分析、系统设计、实现方式、缺点不足

需求分析

  • 能够在高并发的分布式的系统中应用
  • 需要实现锁的基本特性:一旦某个锁被分配出去,那么其他的节点无法再进入这个锁所管辖范围内的资源;失效机制避免无限时长的锁与死锁
  • 进一步实现锁的高级特性和JUC并发工具类似功能更好:可重入、阻塞与非阻塞、公平与非公平、JUC的并发工具(Semaphore, CountDownLatch, CyclicBarrier)

系统设计

转换成设计是如下几个要求:

  • 对加锁、解锁的过程需要是高性能、原子性的
  • 需要在某个分布式节点都能访问到的公共平台上进行锁状态的操作

所以,我们分析出系统的构成应该要有锁状态存储模块、连接存储模块的连接池模块、锁内部逻辑模块

锁状态存储模块

分布式锁的存储有三种常见实现,因为能满足实现锁的这些条件:高性能加锁解锁、操作的原子性、是分布式系统中不同节点都可以访问的公共平台:

  • 数据库(利用主键唯一规则、MySQL行锁)
  • 基于Redis的NX、EX参数
  • Zookeeper临时有序节点

由于锁常常是在高并发的情况下才会使用到的分布式控制工具,所以使用数据库实现会对数据库造成一定的压力,连接池爆满问题,所以不推荐数据库实现;我们还需要维护Zookeeper集群,实现起来还是比较复杂的。</

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/480876
推荐阅读
相关标签
  

闽ICP备14008679号