站长网 Linux 分布式锁,再难一些!!

分布式锁,再难一些!!

原理:多个访问方对同一个资源进行操作,需要进行互斥,通常是利用一个这些访问方同时能够访问到的lock来实施互斥的。 场景一 在同一个进程内,多个线程的互斥,我们可以通过加锁来进行串行化访问。 步骤: 多个线程同时抢锁 只一个线程抢到,未抢到的阻塞

原理:多个访问方对同一个资源进行操作,需要进行互斥,通常是利用一个这些访问方同时能够访问到的lock来实施互斥的。

场景一

在同一个进程内,多个线程的互斥,我们可以通过加锁来进行串行化访问。

步骤:

多个线程同时抢锁

只一个线程抢到,未抢到的阻塞,或下次再来抢

抢到锁的线程操作临界资源

操作完临界资源后释放锁

画外音:锁是进程内的一个数据结构,将临界资源的冲突转变为对锁结构的冲突。

场景二

在分布式环境下,进程内的锁结构就无法作用于进程外了,所以多进程情况下怎么进行临界资源的保护呢?

结合进程内锁的机制,我们可以得出几点条件:

需要有一个特殊的数据结构,每个进程都能访问

同时只能一个进程访问成功

访问成功的进程可以访问临界资源

画外音:问题的关键在于找到同时只有一个进程访问成功的外部存储结构。

三、分布式锁

既然分布式锁的核心是选择合适的外部存储,那怎么选择“合适”的存储介质和存储模型就是我们思考的核心了。

那分布式锁用关系型存储还是KV存储?

从锁的角度来看,我们对它要求不多,KV存储足够。这样我们第一想到的就是Redis方案了,那是不是Redis方案就是最优方案呢?

Redis:单线程高性能的内存KV存储方案。

满足所有进程都能访问的数据结构

单线程满足只有一个进程能访问成功(setnx命令)

业务上保证set成功的进程进行临界资源操作

本文来自网络,不代表站长网立场,转载请注明出处:https://www.zwzz.com.cn/html/server/linux/2021/0525/6276.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部