Bạn có biết?
Node.js chạy một luồng duy nhất (single-threaded) — máy của bạn có 8 CPU core, nhưng ứng dụng Node.js mặc định chỉ dùng một. Lãng phí 87% sức mạnh máy chủ! Cluster Module và PM2 là hai công cụ biến một tiến trình thành nhiều tiến trình song song — tận dụng tối đa CPU, đồng thời có auto-restart và zero-downtime reload.
Vì sao Node.js đơn luồng vẫn nhanh?
Node.js dùng event loop + I/O bất đồng bộ: một luồng duy nhất quản lý hàng ngàn kết nối cùng lúc, vì các thao tác I/O (network, database, file) không chặn luồng. Vấn đề xuất hiện khi có CPU-bound work — tính toán nặng, JSON lớn, mã hóa, xử lý ảnh: lúc đó event loop bị chặn và mọi request khác phải chờ.
Giải pháp: chạy nhiều tiến trình Node.js, mỗi tiến trình một event loop riêng, chia request qua round-robin — đúng cái mà Cluster và PM2 làm.
Cluster Module: đa tiến trình chuẩn
// cluster.js
import cluster from "node:cluster";
import os from "node:os";
import { startServer } from "./app.js";
const numCPUs = os.availableParallelism();
if (cluster.isPrimary) {
console.log(`Primary ${process.pid} đang chạy, spawn ${numCPUs} workers`);
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
// Worker chết → spawn lại ngay (tự phục hồi)
cluster.on("exit", (worker, code, signal) => {
console.();
cluster.();
});
} {
();
}
0 bình luận
Đang tải bình luận...
Để lại bình luận