현재 테스트 중입니다: 완료되면 GitHub 코드를 오픈할 예정입니다.
키 하나로 여러 서버·여러 프로세스의 순서를 정리하는 가볍고 빠른 오픈소스 분산 락 서비스
Ticketing은 트래픽이 가장 몰리는 순간을 가장 빠르게 처리하기 위해 만든 분산 락 서버입니다. 한정 수량이 수량보다 더 팔리고, 같은 좌석이 두 명에게 배정되고, 쿠폰 하나가 동시에 두 번 사용되는 사고를 막기 위한 솔루션입니다.
주로 스크립트로 구현되는 분산 락과 달리, 메모리와 속도를 모두 잡을 수 있는 Rust로 작성했습니다. 고정폭 바이너리 필드를 오프셋으로 읽고, 같은 key만 직렬화해 서로 다른 key의 병렬성을 유지합니다. 처리량뿐 아니라 p99 지연, RSS, fairness와 release 지연을 함께 측정하고, 합의·검증·자원 상한을 끄는 성능 옵션은 두지 않습니다. 대기열이 순서를 보장하며, Raft 클러스터는 volume 없이 새 NodeId learner를 먼저 따라잡힌 뒤 old voter를 교체해 한 대씩 내려가는 상황에서 서비스를 이어갑니다.
바이너리 프레임 프로토콜
처음부터 고정폭 바이너리 필드로 설계되어, 파싱 과정 없이 오프셋을 통해 최소 오버헤드로 읽습니다.
🔑
펜싱 토큰
획득마다 단조 증가하는 토큰을 발급하고, DB transaction 안의 high-water 검증으로 stale write를 차단합니다.
🔄
무정지 클러스터
Raft 합의 기반 클러스터. 3대는 한 대씩 새 NodeId learner로 보충하며, 분단 중에도 상호배제를 우선합니다.
🌐
주요 언어 API 직접 지원
Java/Kotlin, JavaScript/TypeScript, Python, Go, Rust 등 주요 언어의 공식 클라이언트를 직접 제공합니다 — 언어마다 자연스러운 관용적 API(async 또는 블로킹)로 바로 쓰면 됩니다.
🚀
서버 배포 가이드
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
막대 길이는 전체 처리에 걸린 시간(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
지원 플랫폼