Atualmente em testes: o código do GitHub será aberto quando concluído.
Um serviço de lock distribuído leve, rápido e de código aberto que ordena múltiplos servidores e processos com uma única chave
Ticketing é um servidor de lock distribuído construído para lidar com seus momentos de maior tráfego da forma mais rápida possível. Ele existe para evitar os acidentes que acontecem quando uma quantidade limitada é vendida além do estoque, o mesmo assento é atribuído a duas pessoas, ou um único cupom é resgatado duas vezes ao mesmo tempo.
Ao contrário da maioria dos locks distribuídos, que são implementados como scripts, o Ticketing é escrito em Rust para obter ao mesmo tempo eficiência de memória e velocidade. Ele lê o protocolo binário de largura fixa por deslocamento, sem parsing, e não aloca no heap nem mesmo ao processar uma requisição. Em benchmarks de nó único, processa mais de 1 milhão de operações por segundo usando menos de 10 MB de memória. Sua fila garante a ordenação e, com o cluster Raft ativado, o serviço continua funcionando sem tempo de inatividade mesmo quando os nós caem um de cada vez — por exemplo, durante reinicializações de instâncias em nuvem ou uma manutenção sequencial.
Protocolo binário de quadros
Projetado desde o início com campos binários de largura fixa, lidos diretamente por deslocamento de bytes, sem etapa de parsing e com sobrecarga mínima.
🔑
Tokens de fencing
Cada aquisição emite um token monotonicamente crescente, mantendo você protegido mesmo nos momentos em que o servidor de lock não está perfeitamente consistente.
🔄
Cluster sem interrupções
Um cluster baseado em consenso Raft. Com 3 nós, o serviço continua funcionando mesmo com falhas e reinícios de nós, e a exclusão mútua nunca é quebrada, mesmo durante uma partição.
🌐
Clientes nativos para as principais linguagens
Clientes oficiais para Java/Kotlin, JavaScript/TypeScript, Python, Go, Rust e mais — cada um com uma API idiomática (assíncrona ou bloqueante) que parece nativa da linguagem.
🚀
Guia de implantação do servidor
Docker · Podman · Kubernetes · binário — gere agora mesmo os comandos de execução single/cluster
Desempenho
Uma comparação de velocidade com o Redisson (Redis), o sistema de lock distribuído mais utilizado.
Clientes TicketingRedis (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
Redisreferência
4,909.1 ms · 8,148 ops/s
4,909.1 ms
O comprimento da barra é o tempo total (ms) da execução — quanto menor, mais rápido.
32 contended keys × 1,250 ops · concurrency 64 · mac mini m4 2024 basic (10 core), single local server, acknowledged release, 1s min-work budget
Suporte de plataformas