# baidu/uid-generator

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/baidu-uid-generator).**

5,572 stars · 1,552 forks · Java · Apache-2.0

## Links

- GitHub: https://github.com/baidu/uid-generator
- awesome-repositories: https://awesome-repositories.com/repository/baidu-uid-generator.md

## Description

This project is a distributed unique ID generator designed to produce 64-bit globally unique and sortable identifiers across multiple nodes. It implements a Snowflake-compatible algorithm that prevents collisions by combining timestamps, worker identifiers, and sequence numbers into a single integer.

The system includes a worker ID orchestrator to allocate and maintain unique machine identities during instance startup and migration using database-backed strategies. To increase request throughput and reduce latency, it utilizes a ring-buffer caching layer that pre-generates identifiers and employs a threshold-based refill mechanism.

The software provides capabilities for managing distributed database keys, coordinating system nodes, and configuring bit distribution to balance concurrency needs against system lifespan. It also includes utilities for parsing generated identifiers back into their original components.

## Tags

### Data & Databases

- [Unique Identifier Generators](https://awesome-repositories.com/f/data-databases/data-management/unique-identifier-generators.md) — Provides a system for generating globally unique, sortable identifiers to prevent collisions across distributed server nodes.
- [Distributed Identifier Generators](https://awesome-repositories.com/f/data-databases/data-management/unique-identifier-generators/distributed-identifier-generators.md) — Generates unique primary keys across distributed nodes without requiring a central coordination round-trip for every ID.
- [Distributed Primary Key Generation](https://awesome-repositories.com/f/data-databases/entity-modeling/primary-keys/distributed-primary-key-generation.md) — Generates time-ordered unique identifiers specifically designed for use as primary keys in distributed databases.
- [Batch ID Caches](https://awesome-repositories.com/f/data-databases/in-memory-caches/batch-id-caches.md) — Utilizes a batch ID cache to store pre-produced identifiers, significantly reducing concurrency bottlenecks.
- [Segment Caching Refills](https://awesome-repositories.com/f/data-databases/in-memory-caches/batch-id-caches/segment-caching-refills.md) — Implements a threshold-based refill mechanism to replenish the ID cache from the database before it is depleted.

### Networking & Communication

- [Snowflake ID Generators](https://awesome-repositories.com/f/networking-communication/distributed-systems-p2p/distributed-computing/distributed-id-generators/snowflake-id-generators.md) — Produces 64-bit unique identifiers using the Snowflake algorithm to ensure global uniqueness in distributed environments. ([source](https://github.com/baidu/uid-generator/blob/master/README.md))
- [ZooKeeper Worker Assignments](https://awesome-repositories.com/f/networking-communication/distributed-systems-p2p/distributed-computing/distributed-id-generators/snowflake-id-generators/zookeeper-worker-assignments.md) — Allocates unique worker identities during startup to ensure that each node generates a unique set of Snowflake IDs. ([source](https://github.com/baidu/uid-generator/blob/master/README.zh_cn.md))
- [High-Throughput ID Generators](https://awesome-repositories.com/f/networking-communication/distributed-systems-p2p/distributed-computing/distributed-id-generators/high-throughput-id-generators.md) — Achieves high throughput by pre-generating and caching identifiers in a ring buffer to reduce request latency.

### Software Engineering & Architecture

- [Concurrent Ring Buffering](https://awesome-repositories.com/f/software-engineering-architecture/concurrent-ring-buffering.md) — Utilizes concurrent ring buffers to decouple the production of unique IDs from their consumption by requests.
- [Distributed Coordination Systems](https://awesome-repositories.com/f/software-engineering-architecture/distributed-coordination-systems.md) — Coordinates unique worker identities across a cluster to ensure distinct node identities in a distributed system.
- [Worker Identity Assignments](https://awesome-repositories.com/f/software-engineering-architecture/distributed-coordination-systems/task-coordinations/master-worker-coordination/worker-identity-assignments.md) — Provides a mechanism to assign unique worker identities during startup via a database to prevent ID collisions.
- [Identifier Bit-Packing](https://awesome-repositories.com/f/software-engineering-architecture/memory-layout-optimizations/bit-packed-storage/identifier-bit-packing.md) — Implements bit-packing of timestamps, worker IDs, and sequences to construct a unique 64-bit identifier.
- [Cache-Line Padding](https://awesome-repositories.com/f/software-engineering-architecture/shared-memory-management/memory-access-profilers/cache-aware-memory-access/simd-buffer-padding/cache-line-padding.md) — Employs cache-line padding between buffer elements to eliminate false sharing and increase hardware throughput.
