分布式锁

2019-03-18  本文已影响0人  霍运浩

1、锁:

单进程的系统中,存在多线程同时操作一个公共变量,此时需要加锁对变量进行同步操作,保证多线程的操作线性执行消除并发修改。解决的是单进程中的多线程并发问题。

2、分布式锁:

只要的应用场景是在集群模式的多个相同服务,可能会部署在不同机器上,解决进程间安全问题,防止多进程同时操作一个变量或者数据库。解决的是多进程的并发问题。

3、事务

解决一个会话过程中,上下文的修改对所有数据库表的操作要么全部成功,要不全部失败。所以应用在service层。解决的是一个会话中的操作的数据一致性。

4、分布式事务

解决一个联动操作,比如一个商品的买卖分为:

(1)添加商品到购物车

(2)修改商品库存-1

此时购物车服务和商品库存服务可能部署在两台电脑,这时候需要保证对两个服务的操作都全部成功或者全部回退。解决的是组合服务的数据操作的一致性问题。

5 分布式锁的实现有哪些?

基于数据库:

    基于数据库表做乐观锁,用于分布式锁。(version)
    基于数据库表做悲观锁(InnoDB,for update)
    基于数据库表数据记录做唯一约束(表中记录方法名称)

基于缓存:

  常用方案:使用redis的setnx()用于分布式锁。(setNx,直接设置值为当前时间+超时时间,保持操作原子性)
 使用memcached的add()方法,用于分布式锁。

基于Zookeeper:

 每个客户端对某个方法加锁时,在zookeeper上的与该方法对应的指定节点的目录下,生成一个唯一的瞬时有序节点。 判断是否获取锁只需要判断有序节点中序号最小的一个。 当释放锁的时候,只需将这个瞬时节点删除即可。

上一篇 下一篇

猜你喜欢

热点阅读