Skip to content

SimbaJVM 分布式互斥锁

为 Kotlin 和 Java 应用提供易于使用的分布式锁服务 -- 支持 JDBC、Redis 和 Zookeeper 后端。

工作原理

Simba 采用协作式领导者选举协议。每个竞争者争夺一个命名的互斥锁,获胜者在可配置的 TTL 窗口内成为所有者。当 TTL 到期时,进入过渡期,当前所有者可以优先续租。非所有者竞争者使用随机抖动唤醒,以减少冲突。

mermaid
stateDiagram-v2
    [*] --> Free
    Free --> Acquired : contender acquires
    Acquired --> Renewing : TTL about to expire
    Renewing --> Acquired : guard succeeds
    Renewing --> Transition : TTL expired
    Transition --> Acquired : owner renews grace
    Transition --> Free : transition expires
    Free --> Acquired : other contender acquires

三种锁 API

Simba 提供三个层次的抽象,你可以根据使用场景选择最合适的:

mermaid
graph TD
    subgraph sg_21 ["API Levels"]
        direction TB
        H["AbstractScheduler<br>Leader-gated periodic jobs"]
        L["SimbaLocker<br>RAII / try-with-resources"]
        M["MutexContender<br>Callback-based"]
    end

    M -->|"wraps"| L
    L -->|"wraps"| H

    style H fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
    style L fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
    style M fill:#2d333b,stroke:#6d5dfc,color:#e6edf3

后端存储

mermaid
graph TD
    subgraph sg_22 ["simba-core"]
        direction TB
        CS["MutexContendService<br>+ MutexContendServiceFactory"]
    end

    subgraph sg_23 ["Backends"]
        direction TB
        J["simba-jdbc<br>JDBC / MySQL"]
        R["simba-spring-redis<br>Redis Lua + Pub/Sub"]
        Z["simba-zookeeper<br>Apache Curator"]
    end

    CS --> J
    CS --> R
    CS --> Z

    style CS fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
    style J fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
    style R fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
    style Z fill:#2d333b,stroke:#6d5dfc,color:#e6edf3

快速示例

kotlin
class MyContender : AbstractMutexContender("my-mutex") {
    override fun onAcquired(mutexState: MutexState) {
        println("I am the owner!")
    }
    override fun onReleased(mutexState: MutexState) {
        println("Lost leadership.")
    }
}

基于 Apache License 2.0 发布。