REDISVAULT_BLUEPRINT // BULLMQ-STREAM • Hàng Đợi Tác Vụ Node.js / TypeScript

Cấu Hình VPS Chạy Hàng Đợi BullMQ Production (noeviction, Lua Streams & 2x Đệm CoW) — RedisVault

BullMQ vận hành bằng tập lệnh Lua nguyên tử trên Streams, Hash và ZSET hẹn giờ. Đặt sai chính sách xóa LRU sẽ làm hỏng khóa job ngầm, trong khi tiến trình nén AOF lúc tải cao cần dự phòng gần gấp đôi (2x) dung lượng RAM Copy-on-Write. — Phân tích định lượng bởi RedisVault.

Trong bản thiết kế BULLMQ-STREAM của RedisVault, chúng tôi tách biệt giới hạn maxmemory khỏi vùng đệm nhân bản trang nhớ POSIX fork() 4 KB và bộ đệm kết nối mạng để đảm bảo tiến trình không bị OOM-Killer ngắt đột ngột khi ghi đĩa.

Bảng Định Cỡ RAM & Đệm CoW Cho BULLMQ-STREAM Trên RedisVault

Quy Mô Triển Khai maxmemory fork() CoW Reserve Cấu Hình Máy Chủ Tối Thiểu Thông Lượng Dự Kiến
Startup SaaS (500K Jobs • 25 Workers) 1.8 GB +1.7 GB CoW 8 GB RAM (Hostinger KVM 2) 48,000 jobs/min
Growth API (5M Jobs • 120 Workers) 6.9 GB +6.8 GB CoW 16 GB RAM (Hostinger KVM 4) 115,000 jobs/min
High-Throughput Webhook (15M Jobs) 16.8 GB +16.5 GB CoW 32–64 GB VDS (UltaHost 64GB) 210,000 jobs/min
Multi-Region HA (15M Jobs • Sentinel 3x) 16.8 GB/node +16.5 GB/node 3x 64 GB VDS Cluster <4s Auto-Failover

Mẫu Cấu Hình Thực Thi BULLMQ-STREAM Từ RedisVault

bullmq-nodejs-queue.conf — RedisVault Verified Template Mở trong Studio tương tác RedisVault →
# Production BullMQ Redis/Valkey configuration (NEVER use allkeys-lru on BullMQ!)
sysctl -w vm.overcommit_memory=1
cat <<'EOF' >/etc/redis/bullmq.conf
port 6379
maxmemory 7065mb
maxmemory-policy noeviction
activedefrag yes
lazyfree-lazy-expire yes
appendonly yes
appendfsync everysec
aof-use-rdb-preamble yes
auto-aof-rewrite-percentage 100
no-appendfsync-on-rewrite yes
EOF
# Always set removeOnComplete / removeOnFail in your Node.js Queue defaultJobOptions!

Nguyên Tắc Tối Ưu Hóa Nhân Linux Cho BULLMQ-STREAM Trên RedisVault

  1. Bắt buộc đặt maxmemory-policy noeviction: nếu để Redis tự xóa bớt key theo LRU, các khóa bull:<queue>:lock đang chạy sẽ đứt gãy làm treo toàn bộ Worker.
  2. Luôn khai báo removeOnComplete: { age: 3600, count: 5000 } và removeOnFail trong code Node.js để dọn xác job cũ, tránh phân mảnh bộ nhớ jemalloc.
  3. Bật no-appendfsync-on-rewrite yes để lúc ổ cứng NVMe đang gộp file AOF ngầm không làm khựng luồng thực thi Lua chính.
  1. BULLMQ-STREAM — Sơ đồ 4 vùng phân bổ RAM Linux trên RedisVault gồm dữ liệu khóa thô, hao hụt con trỏ jemalloc, vùng đệm nhân bản fork BGSAVE Copy-on-Write và bộ đệm nhân hệ điều hành
    Hình 1 (RedisVault): Lý do đặt maxmemory vượt 50% RAM vật lý trên hàng đợi ghi nhiều dẫn tới lỗi tràn bộ nhớ Linux OOM-Killer.

Hạ Tầng Khuyến Nghị Cho BULLMQ-STREAM (Đối Chiếu Giá Ngày 2026-11-12 Trên RedisVault)

Các mức giá dưới đây được đối chiếu từ trang bảng giá chính thức ngày 2026-11-12 (hostinger.com/vps-hosting, vultr.com/pricing, ultahost.com/vps-hosting, interserver.net/vps, chemicloud.com/web-hosting) và có thể thay đổi theo chu kỳ thanh toán; hãy kiểm tra lại tại bước thanh toán. Nếu dự án cần SLA quản trị trọn gói không tự vận hành Linux, hãy cân nhắc AWS ElastiCache hoặc Upstash.

Giải Đáp Kỹ Thuật BULLMQ-STREAM Trên RedisVault

Có nên dùng chung 1 tiến trình Redis cho cả Cache API và hàng đợi BullMQ không? — RedisVault BULLMQ-STREAM

Tuyệt đối không gộp chung 1 tiến trình. Cache cần allkeys-lru để tự xoay vòng RAM, còn BullMQ bắt buộc noeviction + lưu đĩa AOF. Hãy tách 2 cổng riêng (6379 cho Cache, 6380 cho BullMQ) trên cùng 1 VPS Hostinger KVM 4/8.

Tại sao hàng đợi BullMQ ít việc mà hóa đơn Upstash vẫn vọt lên hàng trăm USD/tháng? — RedisVault BULLMQ-STREAM

Các tiến trình Worker của BullMQ liên tục gửi lệnh Lua kiểm tra job trễ (delayed ZSET) và nhịp tim (stalled check). Với 20–30 worker, riêng lệnh kiểm tra ngầm đã ngốn hàng chục triệu request tính tiền trên Upstash, nhưng hoàn toàn miễn phí trên VPS trọn gói $10.49/tháng.