什么时候需要分布式锁?
分布式锁也是锁
在单体应用的时候,如果多个线程要访问共享资源的时候,我们通常线程间加锁的机制,在某一个时刻,只有一个线程可以对这个资源进行操作,其他线程需要等待锁的释放,Java中也有一些处理锁的机制,比如synchronized。
而到了分布式的环境中,当某个资源可以被多个系统访问使用到的时候,为了保证大家访问这个数据是一致性的,那么就要求再同一个时刻,只能被一个系统使用,这时候线程之间的锁机制就无法起到作用了,因为分布式环境中,系统是会部署到不同的机器上面的,那么就需要【分布式锁】了。
什么时候需要使用分布式锁总结来看,当有多个客户端需要访问并操作同一个资源,还需要保持这个资源一致性的时候,就需要使用【分布式锁】,让多客户端互斥的对共享资源进行访问。
举个例子来说明一下:
有多个批处理任务,两台机器同时处理,如果不加任何控制的话,很有可能同一个批处理被两台机器分别处理一遍;如果使用分布式锁,在领取任务的时候,一个任务只会被一台机器领到,这样就不会造成任务的重复执行;再多思考一些,如果A/B两台机器,任务1被A机器领取到进行处理,在处理到一半的时候,A机器挂掉了,那么这个批处理任务也就无法顺利执行了,除非A机器可以恢复。
这时候就可以知道分布式锁需要做哪些工作了排他性:在同一时间只会有一个客户端能获取到锁,其它客户端无法同时获取;避免死锁:锁在一段时间内有效,超过这个时间后会被释放(正常释放或异常释放);高可用:获取或释放锁的机制必须高可用且性能佳。我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有