专栏名称: 架构师之路
架构师之路,坚持撰写接地气的架构文章
目录
相关文章推荐
美团技术团队  ·  让迪拜,见证中国配送新速度 ·  2 天前  
美团技术团队  ·  2024年美团机器人研究院学术年会议程公布 ·  2 天前  
架构师之路  ·  加速MySQL主从同步,核心架构设计思路!( ... ·  6 天前  
架构师之路  ·  又一篇10W+,但都是骂我的... ·  1 周前  
高可用架构  ·  一行代码改进:Logtail的多行日志采集性 ... ·  6 天前  
51好读  ›  专栏  ›  架构师之路

如何1分钟实现一个分布式锁?(第26讲)

架构师之路  · 公众号  · 架构  · 2024-12-20 12:05

正文

《架构师之路:架构设计中的100个知识点》
26.互斥的内核,分布式锁
什么时候要做互斥?
多个访问方,对同一个资源进行操作,要做互斥。

实现互斥的核心是什么?

需要利用一个多个访问方【同时】能够访问到的【锁资源】来实施互斥的。


案例1:同一个进程内,多个线程,怎么做互斥?

典型场景:
生产者消费者对同一个queue进行操作。

如上图所示,在同一个进程空间内,设定一个所有线程都能够访问到的flag,或者锁变量,就能实施互斥。


大家一起抢锁变量,抢到的线程操作队列,操作完之后释放锁变量。

案例2:同一台机器上,多个进程,怎么做互斥?

典型场景:
手机上多个APP对同一个日志文件进行写入。

如上图所示,在同一台机器上,设定一个所有进程都能够访问到的锁资源,就能实施互斥。具体来说,机器上文件系统里inode锁。

大家一起抢inode锁,抢到的进程获得文件的操作权,操作完之后释放inode锁。

案例3:多台机器的分布式环境下,多个进程,怎么做互斥?

典型场景:
多个微服务对同一个资源进行操作。

如上图所示,在分布式环境下,设定一个所有微服务都能够访问到的锁资源,就能实施互斥。

比如,可以setnx一个redis中key值,哪个微服务设置成功,就获得资源的操作权,操作完之后释放key值,让其他微服务再来抢。这,就是一个最简单的分布式锁。

总结
1. 如何实施互斥:需要利用一个多个访问【同时】能够访问到的【锁资源】来实施;

2. 多个线程互斥,可以利用进程空间里的锁资源;
3. 同一台机器上的多进程互斥,可以利用机器上的锁资源;
4. 分布式环境下的多进程互斥,可以利用布式环境下的锁资源;

知其然,知其所以然。

思路比结论更重要。


补充阅读材料:
《用redis实现分布式锁
https://redis.io/docs/latest/develop/use/patterns/distributed-locks/
资料来源,redis官网。

==全文完==


20年,系列1(已完结):
流量从10万到10亿,遇见的80个架构问题》

24年,系列3(进行中):
《架构设计中的100个知识点》
形式:短视频+图文+直播+星球社群,免费,欢迎感兴趣的童鞋关注。
短视频:超经典,网页去重技术核心

宝藏号,日更

点赞,转发,在看,感激不尽!