分布式锁
10 分钟阅读
•
995 字
+
498 词
两大类分布式锁
类cas自旋,询问方式,尝试加锁
event事件通知后续锁变化
分布式事务和分布式锁是分布式系统中两个重要的概念,它们在处理数据一致性和并发控制时发挥着关键作用。以下是对这两个概念的解释,以及在什么情况下应考虑使用它们。
分布式事务
是指在多个数据库或服务之间执行的一组操作,这些操作需要保证原子性、一致性、隔离性和持久性(通常称为 ACID 属性)。在分布式环境中,由于涉及到多个参与者(如不同的数据库或微服务),确保事务的一致性和完整性就变得更加复杂。
分布式锁
是一种控制多个进程或线程对共享资源(如数据库、文件等)访问的机制。它确保在分布式系统中,同一时间只有一个进程或线程可以访问某个资源,从而避免并发冲突和数据不一致性。
什么是分布式事务?
分布式事务的实现方式:
-
两阶段提交协议(2PC)
:这是最常用的分布式事务协议。它分为两个阶段:
- 准备阶段:协调者向所有参与者询问是否准备提交事务。
- 提交阶段:如果所有参与者都回复准备,就会提交事务;否则,事务将被回滚。
- 三阶段提交协议(3PC) :是为了提高 2PC 的可靠性而设计的第三种阶段,增加了一个不确定状态,从而减少了阻塞的可能性。
- 最终一致性 :在某些场景中,可以接受最终一致性,而不是强一致性。这种情况下,可以使用异步的方法来处理事务,比如通过消息队列。
什么是分布式锁?
实现分布式锁的方法:
- 基于 Redis :使用 Redis 的 SETNX 命令(即“如果不存在则设置”)来实现分布式锁。
- Zookeeper :Zookeeper 提供了高可用的分布式锁实现,可以通过临时节点和序列节点来控制锁的获取和释放。
- 数据库悲观锁 :通过数据库的锁机制来实现,但可能会影响性能。
何时考虑分布式事务?
- 需要强一致性的操作 :当操作涉及多个服务或数据库,且需要保证数据在所有参与者中保持一致时,如金融交易、库存管理等。
- 复杂业务场景 :在需要跨多个系统的复杂业务逻辑中,确保操作的原子性和一致性至关重要。
- 数据完整性要求高 :在涉及用户数据、财务数据等敏感信息的场景中,确保准确性和一致性是必须的。
何时考虑使用分布式锁?
- 控制并发访问 :当多个进程或线程需要访问共享资源时,使用分布式锁可以确保同一时间只有一个进程可以访问该资源。
- 避免数据冲突 :在需要对同一数据进行写操作的场景中,分布式锁可以防止由于并发导致的数据不一致。
- 长时间执行的任务 :如果某些操作需要较长时间完成,为了防止其他操作干预,可以使用分布式锁锁定资源。
总结
- 分布式事务 用于确保在多个服务或数据库之间的操作具有一致性和原子性,适合于强一致性的场景。
- 分布式锁 用于控制对共享资源的并发访问,以避免冲突和不一致,适合于高并发和资源争用的场景。