分布式锁概述

分布式锁 API 构建块概述

简介

锁用于提供对资源的互斥访问。例如,您可以使用锁来:

  • 提供对数据库行、表或整个数据库的独占访问
  • 以顺序方式锁定从队列读取消息

任何发生更新的共享资源都可以成为锁的目标。锁通常用于改变状态的操作,而不是读取操作。

每个锁都有一个名称。应用程序决定命名锁访问的资源。通常,同一应用程序的多个实例使用此命名锁来独占访问资源并执行更新。

例如,在竞争消费者模式中,应用程序的多个实例访问一个队列。您可以决定在应用程序运行其业务逻辑时锁定队列。

在下图中,同一应用程序 App1 的两个实例使用 Redis 锁组件 对共享资源进行加锁。

  • 第一个应用实例获取命名锁并获得独占访问权限。
  • 第二个应用实例无法获取锁,因此不允许访问资源,直到锁被释放,要么:
    • 通过 unlock API 由应用程序显式释放,或
    • 由于租约超时,在一段时间后自动释放。

*此 API 目前处于 Alpha 状态。

功能

对资源的互斥访问

在任何给定时刻,只有一个应用程序实例可以持有命名锁。锁的作用域限定为 Dapr app-id。

使用租约避免死锁

Dapr 分布式锁使用基于租约的锁定机制。如果应用程序获取锁后遇到异常而无法释放锁,则锁会在一段时间后通过租约自动释放。这可以防止应用程序失败时的资源死锁。

演示

观看此视频了解分布式锁 API 的概述

后续步骤

遵循以下指南: