您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

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

时间:2022-09-22 12:23:08  来源:  作者:华为云开发者联盟

本文分享自华为云社区《分布式系统中如何实现临界资源的互斥访问-云社区-华为云》,作者:华为云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.



Tags:分布式   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
本文分享自华为云社区《分布式系统中如何实现临界资源的互斥访问-云社区-华为云》,作者:华为云PaaS服务小智。网络时代,购物、社交等之前只能在线下进行的活动,如今都可以在网络...【详细内容】
2022-09-22  Tags: 分布式  点击:(0)  评论:(0)  加入收藏
一、背景我们在聊架构风格之前先明确一个问题,什么是架构?我们为什么要选择架构、用来解决哪些问题?1、什么是架构书本定义:“软件的架构是一种抽象的结构,他由软件的各个组成部...【详细内容】
2022-09-14  Tags: 分布式  点击:(8)  评论:(0)  加入收藏
redisson相比原生的jredis具有排队的功能,不一致秒杀时,一时获取锁失败就返回失败。秒杀的原理就是使用redis的分布式锁的功能,保证每次抢购不会出现超卖的情况 1 引入pom...【详细内容】
2022-09-01  Tags: 分布式  点击:(29)  评论:(0)  加入收藏
前期准备模板机准备修改静态IPvim /etc/sysconfig/network-scripts/ifcfg-ens33TYPE="Ethernet"PROXY_METHOD="none"BROWSER_ONLY="no"BOOTPROTO="static" //这里改成stati...【详细内容】
2022-08-27  Tags: 分布式  点击:(41)  评论:(0)  加入收藏
0 | 0001100 10100010 10111110 10001001 01011100 00 | 10001 | 1 1001 | 0000 00000000twitter在把存储系统从MySQL迁移到Cassandra的过程中由于Cassandra没有顺序ID生成...【详细内容】
2022-08-20  Tags: 分布式  点击:(37)  评论:(0)  加入收藏
概述Paxos算法是Lamport宗师提出的一种基于消息传递的分布式一致性算法,是目前公认的解决分布式一致性问题最有效的算法之一。本文的目的就是带领大家深入浅出理解Paxos算法,...【详细内容】
2022-08-02  Tags: 分布式  点击:(38)  评论:(0)  加入收藏
我们在分布式开发中经常听到的一个词就是“服务治理”。在理解“服务治理”的概念之前让我们先理解什么是分布式系统,分布式系统之间如何通过RPC(Remote Procedure Call,远程过...【详细内容】
2022-07-22  Tags: 分布式  点击:(35)  评论:(0)  加入收藏
仓库地址:https://gitee.com/J_look/ssm-zookeeper/blob/master/README.md 锁:我们在多线程中接触过,作用就是让当前的资源不会被其他线程访问! 我的日记本,不可以被别人看到。所...【详细内容】
2022-07-20  Tags: 分布式  点击:(48)  评论:(0)  加入收藏
分布式系统定义:建立在网络之上的软件系统,彼此之间通过消息传递进行通信和协调的系统,展现给用户是一个统一的整体。分布式系统架构需要解决三大问题 吞吐量 可用性 可扩展什...【详细内容】
2022-07-19  Tags: 分布式  点击:(71)  评论:(0)  加入收藏
导读:Apache HBase(Hadoop Database),是一个基于Google BigTable论文设计的高可靠性、高性能、可伸缩的分布式存储系统。全文将围绕以下几个方面展开: HBase是什么 HBase社区的发...【详细内容】
2022-07-08  Tags: 分布式  点击:(53)  评论:(0)  加入收藏
▌简易百科推荐
本文分享自华为云社区《分布式系统中如何实现临界资源的互斥访问-云社区-华为云》,作者:华为云PaaS服务小智。网络时代,购物、社交等之前只能在线下进行的活动,如今都可以在网络...【详细内容】
2022-09-22  华为云开发者联盟    Tags:分布式   点击:(0)  评论:(0)  加入收藏
所谓架构,一种通俗的说法就是“最高层次的规划,难以改变的决定”,这些规划和决定奠定了事物未来发展的方向和最终的蓝图。而软件架构即“有关软件整体结构与组件的抽象描述,用于...【详细内容】
2022-09-14   开源字节     Tags:架构   点击:(15)  评论:(0)  加入收藏
Spring Security提供了对身份验证的全面支持。架构组件下面描述Spring Security在Servlet身份验证中使用的主要架构组件。 SecurityContextHolder:SecurityContextHolder是Sp...【详细内容】
2022-09-14  中年猿人  今日头条  Tags:Spring Security   点击:(32)  评论:(0)  加入收藏
一、背景我们在聊架构风格之前先明确一个问题,什么是架构?我们为什么要选择架构、用来解决哪些问题?1、什么是架构书本定义:“软件的架构是一种抽象的结构,他由软件的各个组成部...【详细内容】
2022-09-14  树洞君    Tags:架构   点击:(8)  评论:(0)  加入收藏
技术传播的价值,不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径,加速业务的上线速率,也体现在优秀工程师在工作效率提升、产品性能优化和用户体验改善等经验方...【详细内容】
2022-09-13  dbaplus社群  搜狐号  Tags:架构   点击:(22)  评论:(0)  加入收藏
作者 | Tomas Fernandez译者 | 平川微服务应用程序是一组通过网络进行通信的分布式程序,有时也会与第三方服务和数据库交互。微服务是网络化的,与传统的单体应用程序相比,它的...【详细内容】
2022-09-12  InfoQ     Tags:微服务   点击:(20)  评论:(0)  加入收藏
一、微服务架构的由来在微服务架构出现之前,最常用的架构就是单体架构,俗称"一个jar(war)包打天下"。在一个jar包工程中,采用MVC架构,分为表现层,业务层,数据访问层,所有的业务模块...【详细内容】
2022-09-12  互联共商   网易号  Tags:架构   点击:(18)  评论:(0)  加入收藏
在介绍QP前先简单介绍一下有赞搜索平台的整体设计,方便大家快速了解QP在搜索平台中的作用。下图简单展示了一个搜索请求开始到结束的全部流程。业务通过简洁的api接入los,管理员在搜索平台新建配置并下发,完成整个搜索接...【详细内容】
2022-09-07  有赞coder  微信公众号  Tags:架构设计   点击:(17)  评论:(0)  加入收藏
环境搭建// maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId>...【详细内容】
2022-09-07  陈三岁98  今日头条  Tags:RabbitMQ   点击:(26)  评论:(0)  加入收藏
前言 在文章《小谈Springcloud中的几个主流熔断器》,我们介绍了SpingCloud架构中的几个主流熔断器,其中SpringCloud官方推荐的Resilience4j作为2020.x以后的新秀,远远没有hystr...【详细内容】
2022-09-07  程序员紫龙  今日头条  Tags:SpringCloud   点击:(26)  评论:(0)  加入收藏
站内最新
站内热门
站内头条