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
pkg/utils/snowflake/snowflake.go
📊 ID Structure
64-bit Breakdown
- 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 VariablesCustom Epoch
Default epoch: 2020-01-01 00:00:00 UTC- Extends ID lifespan (41 bits = ~69 years from epoch)
- Smaller IDs if epoch is recent
📊 Performance
Benchmarks
- 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 upSequence Overflow
Problem: More than 4096 IDs in same millisecond Solution: Wait for next millisecondWorker ID Collision
Problem: Two instances use same worker ID Detection:- 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
📚 Related Documentation
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.