浅谈分布式锁
分布式锁是一个在分布式环境中重要的原语,它表明不同进程间采用互斥的方式操作共享资源。本文将谈谈分布式相关的内容。
从进程锁到分布式锁
在单进程环境中,为了防止多线程同时对共享资源进行读写操作,我们通常使用内核或者类库实现线程间的互斥。当扩展到分布式系统下,我们需要提供相同功能的分布式锁服务,不同的主机通过该服务获取一把锁,而获取该锁的机器就可以排他性的访问共享资源。
在单机环境下,操作系统知道自己进程的状态,当进程挂掉的时候该进程会释放自己持有的锁资源,但在分布式环境下,存在宕机、网络分区、时延等各种异常状态,因此需要给分布式锁提供新的特性:可用性。
基于锁资源的安全性,可以将分布式锁分为以下两部分:
基于异步复制的分布式系统,例如:redis、mysql基于paxos协议的分布式一致性系统,例如:etcd、zookeeper基于异步复制的分布式系统,存在丢锁的风险,不够安全,通常使用TTL机制承担细粒度的锁服务,该系统接入简单,适用于对事件很敏感,期望设置一个较短的有效时间,执行短期任务,丢锁对业务影响相对可控的服务。
基于paxos协议的分布式系统,通过一致性协议保证数据的多副本,数据的安全性高,通常使用lease机制承担粗粒度的锁服务,适用于对安全性很敏感,希望长期持有锁,不希望发生丢锁现象的服务。
基于 redis 的分布式锁
通常可以使用setnx(set if not ests)实现排他的获取锁操作,但是由于分布式系统中进程可能随时宕机,因此获取锁时,需要添加TTL保证锁不会因为进程挂掉之后变成死锁状态,但是此时又出现了第二个问题,那就是setnx和expire操作必须是原子操作,因为setnx之后,如果进程挂掉,expire有可能没有机会执行,这同样会导致死锁。正确的操作如下:
SET lock_name value NX EX lock_time释放锁时,只需要调用DEL命令删除锁即可:
DEL lock_name需要注意的是,这里有可能出现错误删除锁的问题。场景如下:
进程A加锁成功,锁超时时间20秒。由于进程A业务逻辑执行过长,20秒之后,锁过期自动释放。此时进程B接着加锁,加锁成功后,执行业务逻辑。这期间,进程A结束执行,使用DEL释放锁。这样就导致进程A错误的释放进程B的锁。因此,为了不被错误的释放锁,我们在加锁的时候需要设置UUID。例如:
SET lock_name uuid NX EX lock_time释放锁时,需要先获取锁的UUID,如果是自己分配的,则释放锁。但是这里的比较和释放操作必须是原子操作,否则会出现获获取锁比对的时候正确,此时正好TTL过期,另一个进程加锁成功,这样的话还是会出现错误释放锁的操作。可以使用Lua脚本实现判断与删除的原子操作。
基于 etcd/zookeeper 的分布式锁
排他锁(exclusive locks)
排他锁(写锁、独占锁)表现如下:
进程p1对数据d1加上排他锁,那么在整个加锁期间,只允许进程p1对数据d1进行读取和更新操作,其他任何进程都不能再对整个数据进行任何类型的操作。直到p1释放排他锁。
通过在zk/etcd上的数据节点来表示一个锁
上面/exclusive_lock/lock1节点,就可以被定义为一个锁。
获取锁:
创建排他锁:需要获取排他锁的时候,所有的客户端都会试图调用create()接口,在/exclusive_lock节点下创建临时子节点/exclusive_lock/lock1。zk/etcd会保证在所有的客户端中,最终只有一个客户端能够创建成功,那么就可以为该客户端获取锁。watch排他锁:所有没有成功获取锁的客户端就要到/exclusive_lock节点上注册一个子节点变更的watcher监听,用于实时监听lock1节点的变更情况。释放锁即移除该临时节点。由于/exclusive_lock/lock1是一个临时节点(etcd通过租约,通过发送心跳来续租),因此需要考虑以下情况:
已经获取锁的client发生了宕机,那么zk/etcd上整个临时节点就会被移除正常完成业务之后,client会主动删除临时节点无论在什么情况下移除lock节点,zk/etcd都会通知所有watcher /exclusive_lock的客户端。这些客户端在接受到通知之后,再次重新发起分布式锁获取,即重复获取锁过程。
共享锁(读锁)表现如下:
进程p1对数据d1加上共享锁,那么当前事务只能对d1进行读取操作,其他事务也只能对整个数据加共享锁,直到该数据对象上的所有共享锁都被释放。
与排他锁的区别是,加上排他锁之后,数据只对一个事务可见,而加上共享锁之后,数据对所有事务可见。
定义锁:
同样是通过zk/etcd上的数据节点表示一个锁,格式可以参考/shared_lock/[hostname]-请求类型-序号 的临时节点。
例如:下图中/shared_lock/host1-R-001就代表了一个共享锁
需要获取共享锁时,所有客户端都会到/shared_lock整个节点下创建一个临时顺序节点。
如果当前是读请求,创建/shared_lock/192.168.0.1-R-01节点如果是写请求,创建/shared_lock/192.168.0.1-W-02节点根据共享锁的定义,
不同的事务可以对同一数据对象进行读取操作更新操作必须在当前没有任何事务进行读写操作的情况下进行zk/etcd的读写顺序:
创建完节点,获取/shared_lock节点下的所有子节点,并对该节点注册子节点变更的watcher监听确定自己的节点序号,在所有子节点中的顺序对于读请求:如果没有比自己小的子节点,或者所有比自己小的子节点都是读请求,那么自己已经成功获取到共享锁,可以开始业务逻辑如果比自己小的节点中有写请求,那么需要进入等待对于写请求:如果自己不是序号最小的子节点,那么就需要进入等待接收到watcher通知后,重复步骤1释放锁与排他锁是一致的:
例子:
主机10.16.0.1先进行读操作,完成后,将节点/shared_lock/10.16.0.1-R-000001删除剩余4台机器均收到节点移除通知,然后重新从/shared_lock节点上获取一份新的子节点列表每个主机判读自己的读写顺序。接着,主机10.16.0.2检测到自己已经是需要最小的了,于是开始执行写操作,而其他主机发现没有轮到自己进行读取或者更新操作,于是继续等待继续上面循环添加微信免费咨询更多IT信息微信号:landui07
推荐文档
- 11.往年大连中考满分是多少
- 12.为什么说学播音毁一生,原因有哪些
- 13.淘宝店铺的优质好评语大全
- 14.考研可改变第一学历吗、专科考研可以改变第一学历吗
- 15.民学网查出的学历国家承认吗(民学网查出的学历国家承认吗是真的吗)
- 16.往年轻薄商务笔记本电脑推荐-商务轻薄本性价比排行
- 17.承德护理职业学院(承德护理职业学院2023年招生计划)
- 18.wreak是什么意思wreak的翻译(wake,area是什么意思中文翻译)
- 19.电子科技大学A+类学科名单有哪些(含A、B、C类学科名单)
- 20.systematic是什么意思systematic的翻译(systematically是什么意思中文翻译)
- 21.leant是什么意思leant的翻译(lean,on什么意思中文意思)
- 22.华南农业大学是几本大学,华南农业大学是一本还是二本
- 23.包头中考考试科目时间预测安排,包头中考考哪几门考哪些课程
- 24.高考430分能上什么大学,430分高考能报啥学校
- 25.朱自清的散文代表作有什么(朱自清的散文代表作有什么散文集有什么散文诗集有什么)
- 26.浙江有几所大学是985和211,全国985和211大学名单汇总
- 27.i5,1155G7和R5,5600U哪款好-对比评测
- 28.荷兰什么叫-荷兰弟为什么叫荷兰弟,出演蜘蛛侠原因曝光
- 29.警察警衔工资改革新政策及新方案【全文】解读
- 30.电大专科(电大专科毕业论文)
- 31.广东省高级技工学校官网
- 32.广州大学专科
- 33.大连陆军学院,原大连陆军学院校址现在什么是什么学校
- 34.亲们,谁给一份南京大学的研究生招生简章?(河海大学
- 35.他日若遂凌云志全诗及出处
- 36.铜绿的化学式是什么有哪些性质
- 37.「佛山市顺德养正西山学校初中部」往年录取分数线
- 38.公办本科(公办本科和民办本科有什么区别)
- 39.外交学院是名牌大学吗
- 40.往年湖南高考成绩排名一分一段表
- 41.全国有8所烟草院校是哪些(这4所大学门槛低)
- 42.私人垄断资本主义基本概念是私人垄断资本主义
- 43.难以启齿,这8部影片可以一看(性教育适合看的影片)
- 44.美国独立战争的性质爆发战争的原因是什么
- 45.往年东莞市高中排名前十最新
- 46.大朗网络教育(大朗教育)
- 47.往年甘肃省高中排名最好的高中
- 48.逻辑思维训练有哪些方法优秀训练方法推荐
- 49.浙江大学教务管理系统
- 50.人类的动物老师有哪些这属于什么学科
- 51.往年山西高考状元榜_山西历届高考理科状元和文科状元
- 52.往年北京舞蹈学院艺术类招生简章招生人数及专业
- 53.航空最好的5个专业就业前景如何
- 54.太原科技大学怎么样及评价好不好太原科技大学口碑如何
- 55.满招损谦受益这句话的意思是什么出自哪
- 56.舍本逐末发生在什么时期含义是什么
- 57.女孩子首选十大专业什么专业适合女生
- 58.国防生是什么意思指的是什么
- 59.河南省三本学院有哪些2018最新三本院校名单
- 60.往年龙岩高中学校排名榜单龙岩十大优秀高中
- 51.兼职小时工,肯德基招聘兼职小时工9元小时
- 52.观潮路那边在修什么,大厂潮白再迎三大利好
- 53.自己如何重装电脑系统,在家就可以自己安装电脑系统
- 54.东乡县往年城区现在有多少人口,快来看看你的家乡有多少人
- 55.rat9,表面粗糙度Rz16相当于Ra多少
- 56.商务代表岗位职责,商务代表的职能是什么应该具体怎样制定工作计划
- 57.申报个税是什么意思,个税接口是什么意思
- 58.巴哥犬好养吗一只小巴哥犬多少钱,普通八哥犬多少钱一只
- 59.女款车10万左右自动挡,10万块小车值得入手吗
- 60.营口巨成教学科技开发有限公司怎么样,...医疗教学模型
- 61.四平市地下管廊总投资多少钱,迎来地下管廊投资高潮
- 62.生活改造家校舍叫什么,临危受命改造老校舍
- 63.七个一广播器材包括什么,陪伴青春的广播体操
- 64.姚安有什么开工建,总投资44.3亿元
- 65.开医疗配送公司怎么样,外卖及配送业务机器人化转型
- 66.城阳哪里水库洗澡,猫咪洗澡过程中死亡
- 67.公元怎么转化年份,知道他是怎么划分的吗
- 68.什么是采购事后监管,对采购当事人违规业务亮灯预警
- 69.企业转包税率怎么算,纳税人和税率最全总结
- 70.政府?购竞争性磋商是什么意思,竞争性磋商的差异

