• 自动秒收录
  • 软件:1973
  • 资讯:57937|
  • 收录网站:279743|

IT精英团

如何在分布式系统中实现对关键资源的互斥访问?

如何在分布式系统中实现对关键资源的互斥访问?

浏览次数:
评论次数:
编辑: 泽洋
信息来源: ITPUB
更新日期: 2022-09-23 01:42:55
摘要

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

  • 正文开始
  • 相关阅读
  • 推荐作品

互联网时代,以前只能在网上完成的购物、社交等活动,现在都可以在网上完成。为了促进消费,电子商务网络和在线商店经常在有限的商品范围内推出“秒杀”和“抢购”活动。类似的临界资源访问,微信多人抢红包,在我们的生活中屡见不鲜。这个关键资源,当被多人访问时,我们如何保证一个资源不被多人(不止一个人)互斥访问?

00-1010多道程序系统中有许多进程。它们共享各种资源,但是许多资源一次只能被一个进程使用。一次只有一个进程可以使用的资源称为关键资源。

如上所述,在抢购中提交商品订单,在微信中开多人红包,都属于这种关键性的资源访问,一次只允许一个进程使用。

00-1010分布式互斥随着分布式系统的出现而出现,随着分布式系统理论的发展而发展。在分布式系统中,许多进程可以在微观层面上并行执行。然而,由于共享资源的限制和全局数据需求的一致性,对一些关键资源的访问需要以互斥的方式同步。

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

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

00-1010基于现有的情况,我们只需要保证多台机器添加的锁是同一个锁,用加锁的方法控制对某个资源的顺序访问。这需要分布式锁的出现。

分布式锁是一种解决分布式关键资源并发读写的技术。锁定分布式应用可以避免库存超卖和无序访问的现象。

分布式锁的思想是在整个系统中提供一个全局的、唯一的获取锁的“东西”,然后每个系统在需要加锁的时候请求这个“东西”获取一个锁,这样不同系统获取的东西就可以看作是同一个锁。

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

00-1010使用Redis类型缓存实例实现分布式锁定有几个优点:

锁定操作很简单,使用SET、GET、DEL等几个简单的命令就可以获取和释放锁。

性能优异,比磁盘数据库和Zookeeper更好的缓存数据读写。

如下图所示,可以使用redis的set方法锁定关键资源。点击这里获得完整的代码。

使用redis的del方法释放锁。

与传统的redis相比,如今各大云厂商也推出了redis云服务,以即用、安全、可靠、扩展灵活、管理方便等特点受到软件开发企业和开发者的欢迎。

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

Java SE 19的新特性
« 上一篇 2022-09-23
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
  • Java线程面试题前50名
    0阅读 0条评论 个赞
    .css-1yuhvjn{margin-top:16px;}.css-3jt6os.FileLinkCard{-webkit-align-items:center;-webkit-box-align……
  • SQL Server操作系统的任务调度机制
    0阅读 0条评论 个赞
    简介SQLServerOS是在Windows之上,用于服务SQLServer的一个用户级别的操作系统层次。它将操作系统部分的功能从整个SQLServer引擎中抽象出来,单独形成一层,以便为存……
  • 卡夫卡数据丢失问题优化总结及重复消费原因分析(二)
    0阅读 0条评论 个赞
    .css-1yuhvjn{margin-top:16px;}.css-3jt6os.FileLinkCard{-webkit-align-items:center;-webkit-box-align……
  • 码头工人日常工作的常用命令
    0阅读 0条评论 个赞
    容器生命周期管理Docker创建新容器并运行[run]语法:dockerrun[OPTIONS]IMAGE[COMMAND][ARG...]OPTIONS说明:-astdin:指定标准输入……
  • Web API版本控制 网络6
    0阅读 0条评论 个赞
    为了了解ASP.NETCoreWebAPI的版本控制,我们必须了解API中的一些版本控制策略,然后将API版本控制与OpenAPI集成,以便我们可以在SwaggerUI中看到版本化的API。1……
  • spring项目中启动包的原理 以及自定义启动包的使用
    0阅读 0条评论 个赞
    MAVEN项目中starter的原理一.原始方式我们最早配置spring应用的时候,必须要经历的步骤:1.pom文件中引入相关的jar包,包括spring,redis,jdbc等等2.通过prope……
  • SpringMVC 01: SpringMVC第一个SpringMVC项目
    0阅读 0条评论 个赞
    SpringMVCSpringMVC概述:是基于MVC开发模式的框架,用来优化控制器是Spring家族的一员,也具备IOC和AOP什么是MVC:它是一种开发模式,是模型视图控制器的简称,所有的web应……
  • 举例说明库伯内特公司的豆荚核心资源
    3阅读 0条评论 个赞
    目录一、Pod定义二、Pod入门yaml描述文件三、共享NetworkNamespace四、共享PID五、容器生命周期六、初始化容器6.1、简介6.2、与普通容器的区别6.3、实验七、Pod探针7.1……
  • [设计模式] Java设计模式-桥模式
    0阅读 0条评论 个赞
    目录【设计模式】Java设计模式-桥接模式简介桥接模式实例代码示例①、品牌接口②、汽车品牌③、抽象汽车类④、汽车类型子类⑤、桥接模式测试1|1简介桥接(Bridge)是用于把抽象化与实现化解耦,使……
  • Java接口自动测试框架系列(1)自动测试框架
    0阅读 0条评论 个赞
    一、什么是自动化测试自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例一步步执行测试,得到实际结果与期望结果的比较。为了节省人力、……
  • 卡夫卡详解(一)——卡夫卡是什么 怎么用
    0阅读 0条评论 个赞
    kafka是什么在回答这个问题之前,我们需要先了解另一个东西--eventstreaming。什么是eventstreaming我觉得,eventstreaming是一个动态的概念,它描述了一……
  • SQL SERVER存储过程学习笔记
    6阅读 0条评论 个赞
    将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来,那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。存储过程的优点1.存储……
  • 让自己更有价值的5种能力
    0阅读 0条评论 个赞
    如何让自己更值钱?回答这个问题,需要用到黄金圈理论。什么是黄金圈理论?黄金圈理论,是国际知名营销专家、作家SimonSinek在2011年提出的,这是一种由内向外的思维模式。黄金圈理论提倡由Why、……
  • 企业操作和维护实践-丢弃docker构建
    15阅读 0条评论 个赞
    本章目录目录0x00前言简述快速介绍什么是Kaniko?为啥用Kaniko?Kaniko是如何工作的?Kaniko已知功能问题kaniko构建上下文kaniko缓存构建0x01部署使用环境……
  • RDD星火基金简介(01)
    0阅读 0条评论 个赞
    1,基本概念RDD(ResilientDistributedDataset):弹性分布式数据集它是Spark中最基本的数据抽象,是编写Spark程序的基础。简单的来讲,一个Spark程序可以概括……
  • 如何使用spark或hive sql将Excel文件加载到hive表中
    0阅读 0条评论 个赞
    .css-1yuhvjn{margin-top:16px;}.css-3jt6os.FileLinkCard{-webkit-align-items:center;-webkit-box-align……
  • 中国台湾的建设:有效登陆中国台湾的六脉神剑
    0阅读 0条评论 个赞
    在数字化时代,数字化体系的建设需要的是系统化的规划和产品化的迭代的模式,基于企业核心业务能力体系,做中台化的持续建设与落地,则是一种不错的选择。所以,企业业务中台的建设和落地,是关系到企业数字化战略成……
  • Oracle服务器迁移的一些经验
    3阅读 0条评论 个赞
    前言通过此文章来分享一下Oracle服务器迁移过程中的一些经验,希望对大家有些许帮助。本文旨在帮助更多的同学,会提及一些基本命令或技巧,但不赘述,后续有机会再进一步分享各个细节。背景之前因机房迁移……
  • 二战MySQL数据库【升华】
    0阅读 0条评论 个赞
    MYSQL入门系列——第二篇1.筛选条件:(1)比较运算符:(2)逻辑运算符:(3)其他操作:1.排序:2.限制:拓展:3.去重:4.模糊查询:(like'%')5.范围查询:2.聚合与分组(重点……
  • PostgreSQL逻辑副本解密
    0阅读 0条评论 个赞
    PostgreSQL逻辑复制解密在数字化时代的今天,我们都认同数据会创造价值。为了最大化数据的价值,我们不停的建立着数据迁移的管道,从同构到异构,从关系型到非关系型,从云下到云上,从数仓到数据湖,试图……
最近发布资讯
更多