Tôi có AWS ALB yêu cầu cân bằng tải luân chuyển đến bốn máy chủ.
Mỗi máy chủ sử dụng pm2 để luân chuyển các yêu cầu đó tới sáu CPU.
Các quy trình NodeJS (react NextJS) đang chạy trên mỗi trong số sáu CPU đó, được phục vụ bởi Express.js. Một trong những điều đầu tiên họ làm là ghi nhật ký yêu cầu đến. (Chúng không nằm trước một máy chủ web như apache hoặc nginx, nó đi thẳng đến Express.js.)
Thông thường, mọi yêu cầu đơn lẻ chạm vào ALB đều được chuyển tiếp thành công và được ghi lại bởi quy trình NodeJS. Tuy nhiên, đôi khi vào thời điểm lưu lượng truy cập cao, một số yêu cầu bị loại bỏ và không bao giờ được đưa vào quy trình NodeJS. Rõ ràng nhật ký máy chủ của chúng tôi không ghi lại những lỗi này vì chúng không bao giờ xuất hiện ở đó ngay từ đầu; chúng tôi chỉ thấy khoảng cách này bằng cách so sánh với số lượng yêu cầu ALB.
Tôi đang cố gắng hiểu cơ chế có thể khiến chúng bị loại bỏ. Có thể nào hàng đợi nội bộ của NodeJS hết thời gian không? Hoặc nó có thể là một thứ kernel linux? Chúng tôi đang thấy các dấu hiệu cho thấy rằng trong thời gian lưu lượng truy cập cao hơn, một số CPU đang bận trong khi những CPU khác không hoạt động, điều này khiến tôi nghĩ đến độ dài hàng đợi (công thức kingmans, định luật nhỏ, v.v.). Tôi có thể nghĩ ra một số cách để giảm xác suất xảy ra điều này, từ việc tăng dung lượng máy chủ, giảm thời gian phản hồi, thay đổi chiến lược cân bằng tải cấp máy chủ, nhưng tôi đang cố gắng tìm hiểu xem yêu cầu thực sự bị kẹt ở đâu và điều gì quyết định liệu nó có giảm/biến mất hay không và bằng cách nào - đặc biệt là nếu tôi có thể ghi lại nó hoặc gửi một số loại tín hiệu khi nó xảy ra.
Đoạn trích cấu hình pm2:
module.exports = {
ứng dụng: [
{
tên: 'cộng đồng',
tập lệnh: 'dist/server.js',
trường hợp: -1,
exec_mode: 'cụm',
tự động khởi động lại: đúng,
xem: sai,
log_date_format: 'YYYY-MM-DD HH:mm Z',
max_memory_restart: '2G',
//...
// và các cấu hình dành riêng cho env, chẳng hạn như
env_product: {
NODE_ENV: 'sản xuất',
NODE_OPTIONS: '--max-old-space-size=3584 --max-http-header-size=16380',
LOG_LEVEL: 'THÔNG TIN',
CẢNG: 3000,
},
},
],
triển khai: {
//...
},
};