分布式锁的锁优化

By | 2021年1月4日

分布式锁的锁优化

在去除原有synchronized单机锁后,在关键步骤添加分布式锁来对具体业务进行锁定,然而由于锁定范围大,导致锁竞争增加,不断发生锁等待,如果不进行优化,可能会让线程队列增大甚至阻塞,而且在等待时长超过设定的阈值时,线程将超时返回。
在此,初步对锁进行优化,如何理解分布式锁与单机锁的应用范围和实现机制,分布式锁与单机锁并不冲突,单机锁类似于海选初赛,而分布式锁则相当于决赛,单机锁用于在当前服务器中,控制所有线程的访问,当最终有线程得到访问数据库或其他唯一性的可操作数据的中间件,再由分布式锁来控制所有进入最终决赛线程的操作顺序。

锁分两级,本地数据操作使用单机锁,而对于数据库的操作使用分布式锁。

乐观自旋锁:在查询数据库时不进行加锁,在修改数据库时则对之前获取的值和现有的值进行对比,如果数据不一致,则加锁并对数据进行修改,当并发量不高时,这种方式可以减少加锁次数,服务器之间交替互相操作,恰好不产生冲突。

通过锁空间实现细粒度加锁:在分布式锁定对数据库的操作时,可以根据要修改的数据关键字段进行加锁,如不同应用加不同的锁,保证只是修改当前应用数据的这类线程加锁,这样可以提高并发量,减少不必要的锁开销。

总之,加锁不是一劳永逸的操作,在保证数据一致性的同时,也要保证服务性能的开销,通过不断的测试和调整达到锁应用的最优。

#工作

发表评论

电子邮件地址不会被公开。 必填项已用*标注