Лёгкий, быстрый распределённый сервис блокировок с открытым исходным кодом, упорядочивающий работу нескольких серверов и процессов с помощью одного ключа
Ticketing — это сервер распределённых блокировок, созданный для максимально быстрой обработки моментов пиковой нагрузки. Он существует, чтобы предотвратить сбои, которые случаются, когда ограниченного товара продано больше, чем есть в наличии, одно и то же место назначено двум людям, или один и тот же купон используется дважды одновременно.
В отличие от большинства распределённых блокировок, которые реализуются скриптами, Ticketing написан на Rust ради одновременной эффективности памяти и скорости. Он читает бинарный протокол фиксированной ширины по смещению без разбора и не выполняет выделение памяти в куче даже во время обработки запроса. В однонодовых тестах он обрабатывает более 1 миллиона операций в секунду, используя менее 10 МБ памяти. Его очередь гарантирует порядок, а при включённом кластере Raft сервис продолжает работать без простоя, даже когда узлы отключаются один за другим — например, при перезагрузке облачных инстансов или последовательном обслуживании.
Бинарный протокол кадров
Спроектирован с нуля на бинарных полях фиксированной ширины и читается прямо по смещениям байтов — без разбора и с минимальными накладными расходами.
Fencing-токены
Каждый захват выдаёт монотонно возрастающий токен, защищая вас даже в те моменты, когда сервер блокировок не идеально согласован.
Непрерывный кластер
Кластер на основе консенсуса Raft. При 3 узлах сервис продолжает работать при отказах и перезапусках узлов, а взаимное исключение не нарушается даже во время разделения сети.
Нативные клиенты для основных языков
Официальные клиенты для Java/Kotlin, JavaScript/TypeScript, Python, Go, Rust и других — с идиоматичным API (async или блокирующим), естественным для каждого языка.
Руководство по развёртыванию сервера
Docker · Podman · Kubernetes · бинарный файл — сгенерируйте команды запуска для одиночного узла или кластера прямо сейчас
→
Производительность
Сравнение скорости с Redisson (Redis) — самой распространённой системой распределённых блокировок.
Клиенты TicketingRedis (Redisson RLock)
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
Поддержка платформ