| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 分布式锁3种实现方式 -> 正文阅读 |
|
[大数据]分布式锁3种实现方式 |
分布式锁需要具备的条件:
分布式锁主流的实现方案: 1. 基于数据库实现分布式锁: 首先在数据库中创建一张表:
如果要锁住某方法,只要执行:
method_name做了唯一性约束,一个方法只能存在一条记录,执行完这个方法后,再释放锁:
这就使用数据库实现了一个简单的分布式锁,但是对比分布式锁的条件,只满足了可斥性。
虽然数据库实现分布式锁非常简单,但是数据库建立连接查询是一个非常耗性能的操作,基本不会使用 2. 基于缓存(Redis等) 基本原理如图: Redis实现分布式锁?
这种方式存在一些问题: 过期时间太长会影响系统性能,太短有可能会业务未执行完时释放锁 在Redis集群状态下会存在问题:
进阶1:使用Redisson实现分布式锁 1,加锁机制: 如果该客户端面对的是一个redis cluster集群,他首先会根据hash节点选择一台机器,线程去获取锁,获取成功: 执行lua脚本,保存数据到redis数据库。 2.watch dog自动延期机制: Redisson设计了看门狗机制,?线程1 业务还没有执行完时到达过期时间,线程1 还想持有锁的话,就会启动一个watch dog后台线程,不断的延长锁key的生存时间。 进阶2:Redlock Redis集群部署时,在master将锁同步到slave之前,master宕掉会造成风险,Redlock可以大大减少这种风险出现的概率,Redlock是redis官方提出的一种分布式锁的算法。Redlock流程为:
3. 基于Zookeeper 解释: 左边的整个区域表示一个Zookeeper集群,locker是Zookeeper的一个持久节点,node_1、node_2、node_3是locker这个持久节点下面的临时顺序节点。client_1、client_2、client_n表示多个客户端,Service表示需要互斥访问的共享资源。 下面描述使用zookeeper实现分布式锁的算法流程,假设锁空间的根节点为/lock:
问题:zookeeper会不会出现Redis集群那样的数据同步问题呢? zookeeper宕机可能发生在Follwer也可能发生在Cilent,分别分析这两种情况:
综上,采用Zookeeper作为分布式锁,你要么就获取不到锁,一旦获取到了,必定节点的数据是一致的,不会出现redis那种异步同步导致数据丢失的问题。 每一种分布式锁解决方案都有各自的优缺点: 1. 性能:redis最高 2. 可靠性:zookeeper最高 Redis分布式锁:?Redis分布式锁-这一篇全了解(Redission实现分布式锁完美方案)_Coder-CSDN博客_redission分布式锁、 redlock:https://mp.weixin.qq.com/s/JLEzNqQsx-Lec03eAsXFOQ ? ? ? ? ? ? ? ??Distributed locks with Redis – Redis zookeeper实现分布式锁:https://blog.csdn.net/sunfeizhi/article/details/51926396 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 10:04:04- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |