黑马程序员技术交流社区
标题:
【广州校区】【原创】 分布式锁
[打印本页]
作者:
新君
时间:
2019-7-24 16:32
标题:
【广州校区】【原创】 分布式锁
1 分布式锁的概述
是控制
分布式系统之间同步访问共享
资源
的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要
互斥
来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁。
2 分布式锁的实现方式
在进行大型网站技术架构设计以及业务实现的过程中,分布式锁通常可以采用下面三种方式来实现:
a)zk(zookeeper
)
实现原理:
每个客户端对某个功能加锁时,在zookeeper上的与该功能对应的指定节点的目录下,生成一个唯一的瞬时有序节点。判断是否获取锁的方式很简单,只需要判断有序节点中序号最小的一个。当释放锁的时候,只需将这个瞬时节点删除即可。同时,其可以避免服务宕机导致的锁无法释放,而产生的死锁问题。
适应场景:
对可靠性,安全性要求非常高,的并发程度不高的场景下使用。
b)memcached
实现原理:
memcached带有add函数,利用add函数的特性即可实现分布式锁。add和set的区别在于:如果多线程并发set,则每个set都会成功,但最后存储的值以最后的set的线程为准。而add的话则相反,add会添加第一个到达的值,并返回true,后续的添加则都会返回false。利用该点即可很轻松地实现分布式锁。
适应场景:
对可靠性,安全性要求不高的,高并发场景
下使用。
c)redis
实现原理:
redis分布式锁即可以结合zk分布式锁锁高度安全和memcached并发场景下效率很好的优点,其实现方式和memcached类似,采用setnx即可实现。需要注意的是,这里的redis也需要设置超时时间。以避免死锁。可以利用jedis客户端实现。
适应场景:
对可靠性,安全性要求非常高的,
高并发场景
下使用。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2