首页 > 其他分享 >分布式锁

分布式锁

时间:2024-07-26 19:30:07浏览次数:10  
标签:释放 过期 节点 MYSQL 进程 ID 分布式

分布式锁

MYSQL实现

  1. 创建一个锁表, 表头资源ID,锁状态,节点ID
  2. 当一个节点处理请求时 先根据资源ID判断资源是否上锁,等待锁被释放后创建一条锁记录,进行后续操作.

缺点:

  1. 因为MYSQL是文件IO效率会慢

REDIS实现

  1. 通过setnx来设置锁,如果返回1代表获取锁,0就继续等待

问题:

  1. 可能会出现死锁,假如程序异常导致锁没有正常释放就会出现死锁; 解决方法就是设置一个过期时间,这样就算程序崩溃锁也会被回收.
  2. 设置过期会引发新的问题,假如过期的时间内业务没有执行完,这时候锁会被提前释放,这时候有下个进程的话会进来设置一个新锁,前一个进程业务执行完以后又会把锁给释放掉,程序就乱了; 解决这两个问题的方法就是在value里面保存进程信息, 获取锁的时候触发一个进程任务每半个过期时间判断一下进程是否执行完了,没执行完就给锁续一下期,还有就是释放锁的时候判断一下是否是进程自己的锁.

相比MYSQL,REDIS基于内存性能会好很多

使用分段锁可以提升性能

分段锁是把资源ID分成多个段,对应的锁就会有多把,能增加并发量

Zookeeper实现

基本概念:

  1. 顺序节点: 每个节点和zookeeper连接的时候zk会按顺序创建一个节点的lock文件
  2. 临时节点: 当节点和zk断开的时候会删掉这个文件

所以每个进程可以通过判断lock文件的编号是不是最小的,如果是就能获取锁,否则就等着.

标签:释放,过期,节点,MYSQL,进程,ID,分布式
From: https://www.cnblogs.com/houjiaqi/p/18326010

相关文章

  • Redis应用场景-分布式锁
    1.创建springboot项目2.添加依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="htt......
  • 安徽省大学生网络与分布式系统创新设计大赛-MISC
    最终排名第七,拿到省一图穷匕见去010看到有16进制,提取出来文本太大了,工具解不了上脚本是坐标用脚本画出来解码flag{40fc0a979f759c8892f4dc045e28b820}流下没有技术的眼泪是16进制,两个一组;转换成10进制分析与ascii之间的关系,每个减去128然后转换成ascii字符......
  • 分布式系统心跳机制(一)
    本文分享自天翼云开发者社区《分布式系统心跳机制(一)》,作者:白杨分布式系统架构当前大部分分布式系统架构如下图: 有一个中心节点来存储集群元数据和管理work儿节点,中心节点采用主备模式来实现HA。当中心节点主故障后,备节点接管业务成为主节点。我们下面讨论的心跳机制就是基于......
  • 掌握Postman中的分布式系统API测试:构建弹性架构的秘诀
    掌握Postman中的分布式系统API测试:构建弹性架构的秘诀在当今的软件开发中,分布式系统变得越来越普遍。这些系统由多个组件分布在不同的服务器或服务上,它们通过网络进行通信。测试分布式系统中的API交互是一个复杂但至关重要的任务。Postman,作为一个强大的API开发工具,提供了......
  • 分布式系统常见软件架构模式
    常见的分布式软件架构Peer-to-Peer(P2P)PatternAPIGatewayPatternPub-Sub(Publish-Subscribe)Request-ResponsePatternEventSourcingPatternETL(Extract,Transform,Load)PatternBatchingPatternStreamingProcessingPatternOrchestrationPattern总结......
  • 写一个aop ,分布式锁
    先定义一个注解@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public@interfaceMyLock{Stringname();longwaitTime()default0;longleaseTime()default-1;TimeUnittimeUnit()defaultTimeUnit.SECONDS;}再写一个切面@......
  • locust多进程实现分布式压测遇到的问题
    多进程分布式的实现:locust分布式时,需借助命令locust一个一个启动worker,在使用中有点繁琐,下面借助于多进程,按既定worker数量,一键启动;fromlocustimportFastHttpUser,task,User,events,HttpUser#classWebsiteUser(FastHttpUser):错误的使用!!!classWebsiteUser(......
  • Python 的分布式锁管理器
    我有一堆具有多个实例的服务器,这些实例访问的资源对每秒的请求有硬性限制。我需要一种机制来锁定所有正在运行的服务器和实例对此资源的访问。有我在github上找到的一个restful分布式锁管理器:https://github.com/thefab/restful-distributed-lock-manager不幸......
  • 【分布式锁】Redis实现分布式锁
    在分布式系统中,当多个服务实例(或节点)需要访问或修改同一份共享资源时,就需要使用分布式锁来确保数据的一致性和防止并发问题。这种情况下,传统的Java并发控制机制如ReentrantLock或synchronized就无法满足需求,因为它们是JVM级别的锁,只能保证单个JVM实例内部的线程同步,而无法......
  • 分布式训练并行策略
    1.分布式训练的概念分布式训练(DistributedTraining)是指将机器学习或深度学习模型训练任务分解成多个子任务,并在多个计算设备上并行地进行训练。一个模型训练任务往往会有大量的训练样本作为输入,可以利用一个计算设备完成,也可以将整个模型的训练任务拆分成子任务,分发给不......