Bỏ qua, đến nội dung

@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ăngMô tả
1Lease-based allocationCấp phát bằng Redis key + TTL, tự giải phóng khi crash
2Auto-renewalGia hạn lease mỗi 60 giây bằng Lua script atomic
3Safe releaseXóa key bằng Lua script kiểm tra identifier trước khi xóa
4FallbackNếu không kết nối Redis, dùng random ID (0-31)
5Container-awareTự nhận biết Docker, Kubernetes (dùng POD_IP)

Cấu hình

Tham sốGiá trịMô tả
maxWorkerId31Worker ID tối đa (5-bit, 0-31)
renewInterval60sTần suất gia hạn lease
leaseSeconds120sThời gian lease — nếu không gia hạn, key tự hết hạn
Key prefixsnowflake:worker:{appName}:Prefix cho Redis keys

Dependencies

PackageVai trò
@digiforce-nc/serverServer framework — WorkerIdAllocatorAdapter interface
Redis connectionQua 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

Mục lục chi tiết