关于分布式锁的一点看法

      其实很多人在面试过程中都有遇到面试官问分布式的实现?其实要回答这个问题,即使你从未做个分布式锁,但只要你能正确理解锁这个概念,其实也能回答出来。搞应用开发的的,主要还是思路问题。下面我们先来了解锁。

     锁是一种共享资源,主要在多线程环境中使用。那么为什么会有锁?锁主要是解决并发环境中,某些资源能被正确的访问或修改,保证数据的正确性。在数据库中,锁从不同角度有多种叫法,比如:乐观锁(逻辑锁,通过数值来实现)、悲观锁(数据库锁);共享锁(select 并发度高)、排它锁(update、delete);行级锁、表锁。这些锁的出现都有一个共同特点,那就是粒度。因为锁会给系统带来瓶颈,所以在设计应用的过程中要注意这样的问题。那么在JAVA中,其实很多锁的设计思想都跟数据库很类似,比如:读锁(其实即使共享锁),写锁(排他锁);还有像ConcurrentHashMap使用了分段锁(相当于数据库的行级锁)。

     好了,说了那么多废话。那么在分布式系统中,如果我们要设计一把分布式锁,该如果操作?如果把分布式系统中的每一个节点看成是一个线程,那么大家应该能想到怎么做了吧。我们所要做的就是寻找一个全局的共享资源,比如:redis、数据库、zookeeper等,但有个前提是,这些资源都是只有一个主。也就是说这些共享资源即使有多个节点,那么也只有一个节点是主节点,所有的数据都已这个主节点的为标准。只要把锁放在这样的资源里面,所有业务节点按照一定的规则来使用这把锁,那么任何时刻都能保证同锁只能被一个业务节点使用。

相关推荐