Score:0

คำขอจะถูกทิ้งเมื่อส่งคำขอไปยัง NodeJS ได้อย่างไร

ธง in

ฉันมี AWS ALB ที่โหลดบาลานซ์ร้องขอการปัดเศษไปยังสี่เซิร์ฟเวอร์

แต่ละเซิร์ฟเวอร์ใช้ pm2 เพื่อปัดเศษคำขอเหล่านั้นไปยัง CPU หกตัว

กระบวนการ NodeJS (react NextJS) กำลังทำงานบน CPU หกตัวซึ่งให้บริการโดย Express.js สิ่งแรกที่พวกเขาทำคือบันทึกคำขอที่เข้ามา (เว็บเซิร์ฟเวอร์ไม่ได้อยู่ข้างหน้าเช่น apache หรือ nginx แต่จะตรงไปที่ Express.js)

โดยปกติแล้ว ทุกคำขอที่เข้าถึง ALB จะได้รับการส่งต่อสำเร็จ และบันทึกโดยกระบวนการ NodeJS อย่างไรก็ตาม ในบางครั้งในช่วงเวลาที่มีทราฟฟิกสูง คำขอบางรายการจะถูกทิ้งและไม่เคยเข้าสู่กระบวนการ NodeJS เห็นได้ชัดว่าบันทึกเซิร์ฟเวอร์ของเราไม่ได้บันทึกความล้มเหลวเหล่านี้ เนื่องจากพวกเขาไม่เคยสร้างข้อผิดพลาดนั้นตั้งแต่แรก เราจะเห็นช่องว่างนี้เมื่อเปรียบเทียบกับจำนวนคำขอ ALB เท่านั้น

ฉันกำลังพยายามทำความเข้าใจกลไกที่อาจนำไปสู่การตกหล่น เป็นไปได้ไหมที่คิวภายใน NodeJS หมดเวลา หรืออาจเป็นเคอร์เนลลินุกซ์? เราเห็นข้อบ่งชี้ว่าในช่วงที่มีทราฟฟิกสูง CPU บางตัวไม่ว่างในขณะที่บางตัวไม่ได้ใช้งาน ซึ่งทำให้นึกถึงความยาวของคิว (สูตรของคิงแมน กฎของลิตเติ้ล ฯลฯ) ฉันสามารถคิดสองสามวิธีในการลดความน่าจะเป็นของเหตุการณ์นี้ ตั้งแต่การเพิ่มความจุของเซิร์ฟเวอร์ ไปจนถึงการลดเวลาตอบสนอง ไปจนถึงการเปลี่ยนกลยุทธ์การจัดสรรภาระงานระดับเซิร์ฟเวอร์ แต่ฉันพยายามทำความเข้าใจมากขึ้นว่าคำขอติดขัดตรงไหน และ อะไรเป็นตัวกำหนดว่ามันจะลดลง/หายไปอย่างไรและอย่างไร - โดยเฉพาะอย่างยิ่งถ้าฉันสามารถบันทึกหรือส่งสัญญาณบางอย่างเมื่อมันเกิดขึ้น

ตัวอย่างของการกำหนดค่า pm2:

โมดูลส่งออก = {
  แอป: [
    {
      ชื่อ: 'ชุมชน',
      สคริปต์: 'dist/server.js',
      ตัวอย่าง: -1,
      exec_mode: 'คลัสเตอร์',
      รีสตาร์ทอัตโนมัติ: จริง,
      ดู: เท็จ,
      log_date_format: 'YYYY-MM-DD HH:mm Z',
      max_memory_restart: '2G',
// ...
// และการกำหนดค่าเฉพาะ env เช่น
      env_production: {
        NODE_ENV: 'การผลิต'
        NODE_OPTIONS: '--max-old-space-size=3584 --max-http-header-size=16380',
        LOG_LEVEL: 'ข้อมูล'
        พอร์ต: 3000,
      },
    },
  ]
  ปรับใช้: {
// ...
  },
};
Michael Hampton avatar
cz flag
คุณช่วยอธิบายรายละเอียดเพิ่มเติมว่า "แต่ละเซิร์ฟเวอร์ใช้ pm2 เพื่อปัดเศษคำขอเหล่านั้นไปยัง CPU หกตัว" ได้อย่างไร เป็นการดีกว่าที่จะแสดงการกำหนดค่าของคุณสำหรับสแต็กทั้งหมด เนื่องจากยังไม่สามารถตัดส่วนใดส่วนหนึ่งของสแต็กออกได้
in flag
pm2 เป็นตัวจัดการกระบวนการโหนดที่ทำหน้าที่เป็นคลัสเตอร์เพื่อฟาร์มงานไปยังซีพียู มันปรับสมดุลการโหลดคำขอเหล่านี้ในแบบวนรอบ แต่คำถามของฉันกว้างกว่านั้น - ในสถานการณ์ที่ทราฟฟิกถูกส่งไปยังเซิร์ฟเวอร์ที่มีกระบวนการ nodejs ที่ให้บริการทราฟฟิก nodejs จะไม่ให้บริการคำขอนั้นภายใต้สถานการณ์ใด ฉันเห็นคำขอในระดับ lb มากกว่าระดับเซิร์ฟเวอร์
Michael Hampton avatar
cz flag
รู้แล้วว่า pm2 คืออะไร ฉันกำลังรอดูการกำหนดค่าของคุณ
in flag
อา ขอบคุณที่ชี้แจง ฉันเพิ่มลงในคำถาม

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา