現在テスト中です: 完了後にGitHubのコードを公開する予定です。
1つのキーで複数のサーバー・プロセスの順序を整理する、軽量で高速なオープンソースの分散ロックサービス
Ticketingは、トラフィックが最も集中する瞬間をできる限り高速に処理するために作られた分散ロックサーバーです。 在庫数を超えて売れてしまう、同じ座席が2人に割り当てられる、1枚のクーポンが同時に2回使われるといった事故を防ぐためのソリューションです。
スクリプトで実装されることが多い分散ロックとは異なり、メモリ効率と速度を両立できるRustで書かれています。 固定長バイナリプロトコルをパースなしでオフセットのまま読み取り、リクエスト処理中はヒープ確保すら行いません。 単一ノードの実測で毎秒100万件以上を処理しながら、メモリ使用量は10MB未満です。 キューが順序を保証し、Raftクラスタを有効にすれば、クラウドインスタンスの再起動や順次メンテナンスのようにノードが1台ずつ落ちる状況でも無停止でサービスが継続します。
バイナリフレームプロトコル
最初から固定長バイナリフィールドとして設計されており、パース処理なしでバイトオフセットから直接読み取れる、オーバーヘッドの少ない構造です。
🔑
フェンシングトークン
獲得のたびに単調増加するトークンを発行し、ロックサーバーが完全に一貫していない瞬間があっても安全性を保ちます。
🔄
無停止クラスタ
Raftコンセンサスによるクラスタ。3ノード構成なら、ノード障害や再起動をまたいでもサービスが継続し、ネットワーク分断中でも排他制御が崩れません。
🌐
主要言語向けネイティブクライアント
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
バーの長さは全体処理にかかった時間(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
対応プラットフォーム