Giao diện
@digiforce-nc/plugin-workerid-allocator-redis
Plugin cấp phát Worker ID qua Redis — đảm bảo mỗi instance trong cluster có worker ID duy nhất, phục vụ thuật toán sinh Snowflake ID phân tán.
Plugin này làm gì?
Snowflake ID cần mỗi worker node có ID duy nhất (0-31) để sinh ID không trùng lặp. Khi chạy nhiều instance, plugin sử dụng Redis để tự động cấp phát worker ID — mỗi instance nhận một ID khác nhau, tự động release khi shutdown hoặc khi lease hết hạn.
Cơ chế hoạt động
Tính năng chính
| # | Tính năng | Mô tả |
|---|---|---|
| 1 | Lease-based allocation | Cấp phát bằng Redis key + TTL, tự giải phóng khi crash |
| 2 | Auto-renewal | Gia hạn lease mỗi 60 giây bằng Lua script atomic |
| 3 | Safe release | Xóa key bằng Lua script kiểm tra identifier trước khi xóa |
| 4 | Fallback | Nếu không kết nối Redis, dùng random ID (0-31) |
| 5 | Container-aware | Tự nhận biết Docker, Kubernetes (dùng POD_IP) |
Cấu hình
| Tham số | Giá trị | Mô tả |
|---|---|---|
maxWorkerId | 31 | Worker ID tối đa (5-bit, 0-31) |
renewInterval | 60s | Tần suất gia hạn lease |
leaseSeconds | 120s | Thời gian lease — nếu không gia hạn, key tự hết hạn |
| Key prefix | snowflake:worker:{appName}: | Prefix cho Redis keys |
Dependencies
| Package | Vai trò |
|---|---|
@digiforce-nc/server | Server framework — WorkerIdAllocatorAdapter interface |
| Redis connection | Qua app.redisConnectionManager (không cần ioredis riêng) |
Lưu ý triển khai
- Plugin giới hạn 32 instance (ID 0-31) — đủ cho hầu hết triển khai
- Instance crash sẽ giải phóng ID sau 120 giây (lease TTL)
- Redis cần accessible từ tất cả instance trong cluster