Điểm:0

Làm thế nào một yêu cầu có thể bị loại bỏ khi gửi yêu cầu tới NodeJS?

lá cờ in

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: {
//...
  },
};
Michael Hampton avatar
lá cờ cz
Bạn có thể giải thích chi tiết hơn chính xác cách "Mỗi máy chủ sử dụng pm2 để chuyển các yêu cầu đó tới sáu CPU" không? Sẽ tốt hơn nếu chỉ hiển thị cấu hình của bạn cho toàn bộ ngăn xếp, vì vẫn chưa thể loại trừ bất kỳ phần nào của nó.
lá cờ in
pm2 là trình quản lý quy trình nút hoạt động như một cụm để trang trại công việc cho cpus. Nó cân bằng tải các yêu cầu này theo kiểu vòng tròn. Nhưng câu hỏi của tôi chung chung hơn - trong trường hợp lưu lượng truy cập được gửi đến máy chủ có quy trình nodejs phục vụ lưu lượng truy cập, trong trường hợp nào thì nodejs sẽ không bao giờ phục vụ yêu cầu đó? Tôi thấy nhiều yêu cầu ở cấp độ lb hơn ở cấp độ máy chủ.
Michael Hampton avatar
lá cờ cz
Tôi đã biết pm2 là gì. Tôi đang chờ để xem cấu hình của bạn.
lá cờ in
ah, cảm ơn vì đã làm rõ. Tôi đã thêm nó vào câu hỏi.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.