分布式锁总结
作者:互联网
分布式锁
一、分布式锁应用
系统演进
单体->集群->微服务
单体:技术架构上为一个单体应用,即一个应用一个DB。
集群:在多个服务器上部署应用。一组相互独立的、通过高速网络互联的计算机。
微服务:各应用独立开发、独立测试、独立运维。
微服务解决了什么问题?
解决了协同、效率的问题
CAP (一致、高可用、分区容错性)
指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。
CAP 原则:三个要素最多只能同时实现两点,不可能三者兼顾。
Why?
分布式系统涉及网络通信,存在通信失败。系统设计时只能选择一个目标。如果追求一致性,那么无法保证所有节点的可用性;如果追求所有节点的可用性,那就没法做到一致性:
● CP模型
● AP模型
二、实现方式
redis(缓存) AP模型 k-v
setnx key:1
请求调用链路,获取分布式锁的节点:
问题,极端情况下
redis1、redis2 两台机器
redis1拿到了锁, 机器挂了,没同步到redis2
又有一个客户端,请求redis2,拿到了锁,就会出现2个客户端同时拿到了锁
续租,锁超时时间设置了3秒,业务执行时间5s ,锁超时时间结束后还是可以被拿到
心跳机制:检查集群分布式锁是不是好的,给锁做续租
在redis续租实现较难
2.ZK CP模型 保证整个数据强一致性
服务注册中心
分布式锁
涉及到很多节点的增删改查
部署都是2n+1 master节点 竞选机制
获取失败,等待
问题:
节点操作复杂,效率不高、实现比较复杂
● ETCD CP模型 效率高 续租方便 命令
kv
问题:开源框架,时间不长,出现问题后可能没有人解决
三、如何测试
1.锁是否生效
正常业务都是秒级,来不及测试, 需要把超时时间做成可配置,测试时修改成5分钟,同样的请求重复调用,只有首次才能成功。
2. 释放
(a)手动,业务执行完成后释放。
(b)自动,超时
3. 性能
一般情况,10-20ms;RPC 一般 300-500ms
自己的补充
啥是分布式锁?
为啥会出现分布式锁?
分布式锁的作用?
宕机(死机):指操作系统无法从一个严重系统错误中恢复过来,或系统硬件层面出问题,以致系统长时间无响应,而不得不重新启动计算机的现象。它属于电脑运作的一种正常现象,任何电脑都会出现这种情况。
分布式锁实现的三种实现原理(基于数据库实现分布式锁、Redis分布式锁、ZooKeeper分布式锁)
https://www.cnblogs.com/liuqingzheng/p/11080501.html
Redis分布式锁、ZooKeeper分布式锁的详解
https://blog.csdn.net/aoxida/article/details/115769230
标签:总结,redis2,一致性,续租,超时,节点,分布式 来源: https://blog.csdn.net/weixin_44158264/article/details/122436463