首页 > 其他分享 >请谈谈对分布式锁的理解和实现?

请谈谈对分布式锁的理解和实现?

时间:2023-12-26 21:32:56浏览次数:29  
标签:实现 Zookeeper 谈谈 理解 线程 一致性 节点 分布式

面试题之五

请谈谈对分布式锁的理解和实现?

难度指数:四星级

考察频率:85%

开发年限:3-5年

一.概念

分布式锁:是一种跨进程、机器节点的互斥锁,可以用来保证多台机器接待对于共享资源的访问排它性。

和线程本质上是一样的,线程锁的生命周期是单进程多线程,分布式锁的生命周期是多进程多机器节点。

本质上:需要满足锁的几个特性:

​ 1)排它性:同一个时刻只能有一个节点访问资源。

​ 2)可重入性:允许一个获得锁的进程,在没有释放锁之前重新获得锁。

3)锁的获取、释放的方法。

4)锁:失效机制、从而避免死锁的情况。

只要满足上述这些特性的技术组件,都可以实现分布式锁。

二.实现

1)RDBMS:如何来实现锁的排它性。唯一约束。

​ 针对某个方法加锁,建一个表,方法名作为字段,设置其为唯一约束。

抢占锁的逻辑:插入一条数据,如果有其他线程获得了某个方法的锁,那么这个时候插入数据fail,从而保证互斥性。这种实现方式比较简单,考虑重入性,锁失效机制,阻塞机制,比较麻烦。

2)Redis,指令:SETNX命令,可以实现锁的排它性。如果锁不存在,则返回1,存在则返回0,可以设置过期失效时间(expire),可以避免死锁问题。

锁过期,但是业务逻辑还没有结束。这种情况下,写一个定时任务,对指定的key进行续约。

Redisson这个开源组件,就提供了分布式锁的封装实现,并且也内置了一个WatchDog机制对key做续约。

99%,解决问题。

高可用集群可能由于场景(主从切换)导致key失效,这种情况可能由于多个线程抢占同一个锁资源,Redis官方提供了一个RedLock的解决方案。

3)本质CP模型,(一致性、分区容错特性),Redis(AP模型),由于数据一致性问题,会导致出现多个线程抢占到锁的情况很难避免。CP模型下实现分布式锁的特性,Zookeeper。

4)数据一致性,ZAB协议保证(Zookeeper Atomic Broadcase)原子广播协议,通过ZAB协议可以保证集群主 从节点的数据同步、从而保证数据一致性。

5)Zookeeper基于有序节点,再加上Watch机制实现互斥和唤醒操作。

思考

分布式系统和并发安全的理解。

技术底层

标签:实现,Zookeeper,谈谈,理解,线程,一致性,节点,分布式
From: https://blog.51cto.com/teayear/8987738

相关文章

  • Alpha-Beta剪枝的原理的深入理解(无图预警)
    转载请注明原文链接:https://www.cnblogs.com/Multya/p/17929261.html考虑一个树:一棵树上只有叶子节点有值,有确定的根节点的位置根据层数来划分叶子节点和根节点之间的链接节点偶数层上的值取子节点的最大值,奇数取最小因为叶子节点上的值确定,在有这么个规则之后整棵树上所......
  • 架构设计理解
    作为一个开发人员,经常会听到架构一词,那么架构到底是什么呢?又为什么需要架构呢?以及架构设计的要点在哪?目前我作为一年级新生(工作经验一年),希望能以自己的了解浅显的回答下这个问题。架构的定义架构是什么?维基百科给出的解释是:架构是有关软件整体结构与组件的抽象描述,用于指导大型......
  • MySQL 8.0.12 深入理解bit类型
     背景:在阿里巴巴推荐的MySQL建表规范里要求如下:表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsignedtinyint(1表示是,0表示否)。解释:在MySQL里表示是和否的概念可以使用如下三种方案:1.使用bit(1)类型,此时bit允许存储的是ASCII中的0和1.0表示否1表示是的概念。2......
  • C#深度理解:数组、集合、哈希、字典、堆、栈 优缺点
    一、数组1、Array固定数组优点:1).快速访问:数组通过索引来访问元素,访问速度非常快,因为可以通过索引进行直接定位。2).内存连续存储:数组在内存中以连续的方式存储元素,这样有助于提高数据的读取和写入效率。3).多维支持:C#中的数组支持多维(二维、三维等)数据结构,可以用于表示......
  • 使用分布式锁实现定时任务的精确调度
    定时任务,实现分布式控制定时任务使用分布式锁实现定时任务的精确调度在分布式系统中,实现定时任务的精确调度是一项具有挑战性的任务。由于分布式环境中存在多个节点,传统的定时任务可能会出现并发执行、重复执行或者错过执行的问题。为了解决这些问题,我们可......
  • HTML学习第五天:深入理解CSS与样式
    在今天的HTML学习中,我深入了解了CSS和样式的重要性。早上,我开始学习CSS的基础知识。CSS是一种用于描述网页样式的语言,它可以使网页更加美观和易于阅读。通过使用CSS,我可以控制网页中元素的布局、颜色、字体和许多其他样式属性。我学习了如何将CSS与HTML结合使用,以及如何使用不同的......
  • Java变量再次理解
    Java变量共分为三类,分别为成员变量,局部变量,静态变量希望这次可以理解的透彻并记住成员变量(也叫实例变量,对象变量):其实通俗理解就是当每个对象都想有自己的变量值时就是声明成员变量,比如班级里的每个人都有自己的name,我们创建类的时候声明的成员变量的名字是name,这样大家都有自......
  • 自然语言理解与语言模型:结合的力量
    1.背景介绍自然语言理解(NaturalLanguageUnderstanding,NLU)和自然语言模型(LanguageModel,LM)是人工智能领域中的两个重要概念。NLU涉及到从自然语言文本中抽取出有意义的信息,以便于进行进一步的处理和分析。而自然语言模型则是一种用于预测给定上下文中下一个词的统计模型。在这......
  • 自然语言处理的未来:语义理解与知识图谱
    1.背景介绍自然语言处理(NLP)是人工智能领域的一个重要分支,其主要研究如何让计算机理解和生成人类语言。随着大数据、深度学习等技术的发展,NLP领域取得了显著的进展。然而,目前的NLP技术仍然存在一些局限性,如无法理解语境、无法处理多义性等。因此,语义理解和知识图谱等技术成为了未......
  • 分布式架构的高性能与可用性
    分布式架构是一种将系统拆分为多个独立的组件或服务,并在不同的计算节点上部署这些组件或服务的架构方式。它可以提供高性能和可用性的好处。下面我将详细介绍分布式架构在高性能和可用性方面的优势。高性能横向扩展:分布式架构可以通过增加计算节点来实现横向扩展,从而提高系统......