Puncte:0

Cum ar putea fi abandonată o solicitare atunci când se trimite o solicitare către NodeJS?

drapel in

Am un AWS ALB care echilibrează sarcina cererilor round-robin la patru servere.

Fiecare server folosește pm2 pentru a combina acele cereri la șase procesoare.

Procesele NodeJS (react NextJS) rulează pe fiecare dintre aceste șase procesoare, deservite de Express.js. Unul dintre primele lucruri pe care le fac este să înregistreze cererea primită. (Nu au un server web precum apache sau nginx, ci merge direct la Express.js.)

De obicei, fiecare cerere care atinge ALB este redirecționată cu succes și înregistrată de procesul NodeJS. Cu toate acestea, uneori, la orele de trafic ridicat, unele solicitări sunt abandonate și nu ajung niciodată la procesul NodeJS. Evident, jurnalele serverului nostru nu înregistrează aceste erori, deoarece nu ajung niciodată acolo; vedem acest decalaj doar prin compararea cu numărul de cereri ALB.

Încerc să înțeleg mecanismul care ar putea duce la abandonarea lor. Este posibil ca o coadă internă NodeJS să expire? Sau ar putea fi o chestie cu nucleul linux? Observăm indicii că, în perioadele de trafic mai mare, unele dintre procesoare sunt ocupate, în timp ce altele sunt inactive, ceea ce mă face să mă gândesc la lungimea cozii (formula Kingmans, legea lui Little, etc). Mă gândesc la câteva modalități de a reduce probabilitatea ca acest lucru să se întâmple, de la creșterea capacității serverului, la reducerea timpului de răspuns, la schimbarea strategiei de echilibrare a sarcinii la nivel de server, dar încerc mai mult să înțeleg unde cererea se blochează de fapt și ceea ce determină dacă și cum scade/dispare - mai ales dacă aș putea să-l înregistrez sau să trimit un fel de semnal atunci când se întâmplă.

Fragmente din configurația pm2:

module.exports = {
  aplicații: [
    {
      nume: „comunitate”,
      script: „dist/server.js”,
      cazuri: -1,
      exec_mode: „cluster”,
      pornire automată: adevărat,
      ceas: fals,
      log_date_format: „AAAA-LL-ZZ HH:mm Z”,
      max_memory_restart: „2G”,
// ...
// și configurații specifice env, cum ar fi
      env_production: {
        NODE_ENV: „producție”,
        NODE_OPTIONS: '--max-old-space-size=3584 --max-http-header-size=16380',
        LOG_LEVEL: „INFO”,
        PORT: 3000,
      },
    },
  ],
  implementează: {
// ...
  },
};
Michael Hampton avatar
drapel cz
Puteți explica mai detaliat exact cum „Fiecare server folosește pm2 pentru a combina acele cereri la șase procesoare”? Ar fi de preferat să vă afișați configurația pentru întreaga stivă, deoarece nu este încă posibil să excludeți nicio parte a acesteia.
drapel in
pm2 este un manager de proces de noduri care acționează ca un cluster pentru a lucra în fermă la CPU. Echilibrează aceste solicitări într-un mod round-robin. Dar întrebarea mea este mai generală - într-un scenariu în care traficul este trimis către un server care are un proces nodejs care deservește traficul, în ce circumstanțe nodejs nu ar servi niciodată această solicitare? Văd mai multe solicitări la nivel lb decât la nivel de server.
Michael Hampton avatar
drapel cz
Știu deja ce este pm2. Astept sa vad configuratia ta.
drapel in
ah, multumesc pentru clarificare. L-am adăugat la întrebare.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.