分布式锁概述
分布式锁应用程序接口构件概述
介绍
锁用于提供对资源的互斥访问。 例如,您可以使用锁来
- 提供对数据库行、表或整个数据库的独占访问权限
- 锁定从队列中按顺序读取信息
任何发生更新的共享资源都可能成为锁的目标。 锁通常用于改变状态的操作,而不是读取操作。
每个锁都有一个名字。 应用程序决定命名锁访问的资源。 通常情况下,同一应用程序的多个实例都会使用这个命名锁来专门访问资源和执行更新。
例如,在竞争消费者模式中,应用程序的多个实例访问一个队列。 您可以决定在应用程序运行业务逻辑时锁定队列。
在下图中,同一应用程序的两个实例 App1
,使用Redis锁组件对共享资源进行加锁。
- 第一个应用程序实例会获取指定的锁,并获得独占访问权。
- 第二个应用程序实例无法获取锁,因此在释放锁之前也无法访问资源:
- 由应用程序通过解锁应用程序接口明示,或
- 一段时间后,由于租约超时。
*此 API 目前处于 Alpha
状态。
特性
相互独占资源
在任何时刻,只有一个应用程序实例可以持有命名锁。 锁的作用域是 Dapr 应用程序标识。
利用租约消除僵局
Dapr 分布式锁使用基于租赁的锁定机制。 如果应用程序获取了一个锁,遇到异常并无法释放该锁,该锁会在一段时间后通过租约自动释放。 这样就能在应用程序发生故障时防止资源死锁。
例子
下一步
关注以下指南: