目前正在测试中:完成后将开放 GitHub 代码。
用一个 key 就能理清多台服务器、多个进程执行顺序的轻量级高速开源分布式锁服务
Ticketing 是一个分布式锁服务器,专为以最快速度处理流量高峰而生。 它的存在是为了阻止诸如限量商品超卖、同一座位被分配给两个人、 同一张优惠券被同时使用两次这类事故。
与大多数以脚本方式实现的分布式锁不同,Ticketing 用 Rust 编写, 兼顾内存效率与速度。它按字节偏移直接读取定宽二进制协议,无需解析, 甚至在处理请求期间都不进行堆分配。单节点实测中每秒可处理超过 100 万次请求, 内存占用不到 10MB。队列保证顺序,开启 Raft 集群后, 即使节点像云实例重启或滚动维护那样逐个下线,服务也能零停机持续运行。
二进制帧协议
从一开始就采用定宽二进制字段设计,无需解析即可按字节偏移读取,开销极小。
🔑
围栏令牌 (Fencing Token)
每次获取都会签发单调递增的令牌,即使锁服务器在某一瞬间不是完全一致的,也能保证安全。
🔄
无中断集群
基于 Raft 共识的集群。3 个节点即可在节点故障、重启时持续提供服务,即使在网络分区期间互斥性也不会被打破。
🌐
原生支持主流语言 API
为 Java/Kotlin、JavaScript/TypeScript、Python、Go、Rust 等主流语言提供官方客户端 —— 每种语言都配有贴合其生态的惯用 API(异步或阻塞式)。
🚀
服务器部署指南
Docker · Podman · Kubernetes · 二进制文件 —— 立即生成单机/集群运行命令
性能
与最广泛使用的分布式锁系统 Redisson(Redis)的速度对比。
Ticketing 客户端Redis(Redisson RLock)
JavaScript
210.2 ms · 190,295 ops/s
210.2 ms
Rust
225.9 ms · 177,069 ops/s
225.9 ms
Go
228.4 ms · 175,131 ops/s
228.4 ms
C#
286.9 ms · 139,421 ops/s
286.9 ms
Kotlin
443.5 ms · 90,192 ops/s
443.5 ms
Java
457.8 ms · 87,374 ops/s
457.8 ms
C/C++
659.7 ms · 60,634 ops/s
659.7 ms
Python
739.4 ms · 54,098 ops/s
739.4 ms
Ruby
1,682.4 ms · 23,776 ops/s
1,682.4 ms
Redis基准
4,909.1 ms · 8,148 ops/s
4,909.1 ms
柱状长度为整个流程耗费的时间(毫秒),越短越快。
32 contended keys × 1,250 ops · concurrency 64 · mac mini m4 2024 basic (10 core), single local server, acknowledged release, 1s min-work budget
平台支持