多种后端支持
选择最适合你技术栈的存储方案:基于乐观锁的 JDBC/MySQL、基于原子 Lua 脚本和发布/订阅的 Redis,或基于 Apache Curator 的 Zookeeper。
Simba 采用协作式领导者选举协议。每个竞争者争夺一个命名的互斥锁,获胜者在可配置的 TTL 窗口内成为所有者。当 TTL 到期时,进入过渡期,当前所有者可以优先续租。非所有者竞争者使用随机抖动唤醒,以减少冲突。
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 acquiresSimba 提供三个层次的抽象,你可以根据使用场景选择最合适的:
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:#e6edf3graph 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:#e6edf3class MyContender : AbstractMutexContender("my-mutex") {
override fun onAcquired(mutexState: MutexState) {
println("I am the owner!")
}
override fun onReleased(mutexState: MutexState) {
println("Lost leadership.")
}
}