分布式系统中如何实现临界资源的互斥访问?

摘要:一次仅允许一个进程使用的资源称为临界资源。

本文分享自华为云社区《分布式系统中如何实现临界资源的互斥访问》,作者:华为云PaaS服务小智。

网络时代,购物、社交等之前只能在线下进行的活动,如今都可以在网络上完成。为了促进消费,电商网、网络店铺经常推出商品限定数量内的“秒杀”,“抢购”活动,类似的临界资源访问还有我们生活中常见的微信多人抢红包。这种临界资源,多人访问的情况,如何保证避免一个资源被多人(一人以上)互斥访问呢?

临界资源

多道程序系统中存在许多进程,它们共享各种资源,然而有很多资源一次只能供一个进程使用。一次仅允许一个进程使用的资源称为临界资源。

上面我们提到的在抢购中对商品提交订单,微信中打开多人红包都属于这种临界资源的访问,一次只允许一个进程使用。

临界资源互斥访问

分布式互斥是随着分布式系统的出现而出现的,并随着分布式系统理论发展而发展。在分布式系统中,很多进程能够在微观上并行执行。但由于共享资源的有限性,以及全局数据要求的一致性,一些临界资源的访问需要以互斥的方式实现同步。

Java原生锁

在传统单机部署的情况下,可以使用Java并发处理相关的API(如ReentrantLock或synchronized)进行互斥控制。这种Java提供的原生锁机制可以保证在同一个Java虚拟机进程内的多个线程同步执行,避免出现无序现象。

但在互联网场景,特别是抢购活动中,随着整个系统的并发访问飙升,需要多台机器并发运行,以应对用户井喷式访问,假设此时多个用户的请求同时到来,但落在了不同的机器上,虽然这两个请求是可以同时执行,但是因为两个机器运行在两个不同的Java虚拟机里面,他们加的锁只对属于自己Java虚拟机里面的线程有效,对于其他Java虚拟机的线程是无效的。因此,Java提供的原生锁机制在多机部署场景下失效了,这是因为两台机器加的锁不是同一个锁(两个锁在不同的Java虚拟机里面),这样便会出现库存超卖的现象。

分布式锁

基于存在的现状,我们只要保证多台机器加的锁是同一个锁,用加锁的方式对某种资源进行顺序访问控制。这就需要分布式锁登场了。

分布式锁是一种解决分布式临界资源并发读写的一种技术,对分布式应用加锁,能够避免出现库存超卖及无序访问等现象。

分布式锁的思路是:在整个系统提供一个全局、唯一的获取锁的“东西”,然后每个系统在需要加锁时,都去问这个“东西”拿到一把锁,这样不同的系统拿到的就可以认为是同一把锁。

当前分布式加锁主要有三种方式:(磁盘)数据库、缓存数据库、Zookeeper。

用 Redis 实现分布式锁

使用Redis类型的缓存实例实现分布式加锁,有几大优势:

• 加锁操作简单,使用SET、GET、DEL等几条简单命令即可实现锁的获取和释放。

• 性能优越,缓存数据的读写优于磁盘数据库与Zookeeper。

如下图中所示,使用redis的set方法即可实现对临界资源加锁,点击获取全量代码 

使用redis的del方法即可实现锁的释放。

相对于传统redis,如今各大云厂商也都推出了redis云服务,以即开即用、安全可靠、弹性扩容、便捷管理等特点受到软件开发企业和开发者的欢迎。

参考资料

李美安. 普适分布式互斥算法及应用[D]. 电子科技大学, 2006.

 

点击关注,第一时间了解华为云新鲜技术~

优秀的个人博客,低调大师

微信关注我们

原文链接:https://my.oschina.net/u/4526289/blog/5579724

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。