Skip to main content

Snowflake ID Generator

Panduan lengkap Snowflake ID Generator untuk distributed unique ID generation di MStore Backend.

🎯 Overview

Snowflake ID adalah algoritma distributed ID generation yang menghasilkan 64-bit unique IDs dengan karakteristik:
  • Globally Unique - Unik di seluruh sistem
  • Time-Ordered - Sortable by creation time
  • High Performance - 4096 IDs per millisecond per worker
  • Decentralized - No coordination needed
Package: pkg/utils/snowflake/snowflake.go

📊 ID Structure

64-bit Breakdown

Components:
  • Sign bit (1 bit): Always 0 (positive number)
  • Timestamp (41 bits): Milliseconds since epoch (2020-01-01)
  • Region ID (5 bits): Data center/region (0-31)
  • Worker ID (5 bits): Machine/worker (0-31)
  • Sequence (12 bits): Counter per millisecond (0-4095)

Capacity

Total Capacity: 1024 workers × 4096 IDs/ms = ~4.2 million IDs/second

🚀 Quick Start

1. Initialize Generator


2. Environment-Based Initialization


📝 Usage Examples

Generate Single ID


Generate Multiple IDs


Concurrent Generation


Parse ID Components


🎨 Use Cases

1. Transaction IDs


2. Order Numbers


3. Distributed Event IDs


4. Idempotency Keys


🔧 Configuration

Region & Worker Assignment

Strategy 1: Environment Variables
Strategy 2: Kubernetes Labels
Strategy 3: Auto-Assignment

Custom Epoch

Default epoch: 2020-01-01 00:00:00 UTC
Why custom epoch?
  • Extends ID lifespan (41 bits = ~69 years from epoch)
  • Smaller IDs if epoch is recent

📊 Performance

Benchmarks

Throughput:
  • Single worker: ~20 million IDs/second
  • 4 workers: ~80 million IDs/second
  • 32 workers: ~640 million IDs/second

Comparison


🎯 Best Practices

1. Singleton Pattern


2. Unique Worker IDs


3. Store as BIGINT


4. Index Strategy


5. JSON Serialization


🔍 Troubleshooting

Clock Skew

Problem: Server clock goes backward Solution: Generator waits until time catches up

Sequence Overflow

Problem: More than 4096 IDs in same millisecond Solution: Wait for next millisecond

Worker ID Collision

Problem: Two instances use same worker ID Detection:
Prevention:
  • Use unique worker IDs per instance
  • Implement worker ID registry
  • Use hostname-based assignment

📚 Advanced Usage

Custom Wait Function


ID Parsing Utility


Migration from Auto-Increment


Transaction Code Generator

Human-readable transaction codes

Database Schema

Database schema & indexes

System Design

Distributed system architecture

Snowflake IDs: Digunakan untuk semua entity utama (transactions, orders, payments) untuk memastikan uniqueness di distributed system.