Kuinka Optimoida Node.js Tuotantoinfrastruktuuri: Parhaat Käytännöt

Node.js performance optimization guide

Esipuhe

Forward Emaililla olemme käyttäneet vuosia Node.js-tuotantoympäristön asennuksen hiomiseen. Tämä kattava opas jakaa taisteltuja Node.js-tuotantoon käyttöönoton parhaita käytäntöjä, keskittyen suorituskyvyn optimointiin, valvontaan ja oppeihin, joita olemme saaneet skaalaamalla Node.js-sovelluksia käsittelemään miljoonia päivittäisiä tapahtumia.

Meidän 573 % Ydinsuorituskyvyn Optimointivallankumouksemme

Kun siirryimme Intelistä AMD Ryzen -prosessoreihin, saavutimme 573 % suorituskyvyn parannuksen Node.js-sovelluksissamme. Tämä ei ollut vain pieni optimointi — se muutti perustavanlaatuisesti sitä, miten Node.js-sovelluksemme toimivat tuotannossa, ja osoittaa yksiydinsuorituskyvyn optimoinnin tärkeyden mille tahansa Node.js-sovellukselle.

Tip

Node.js-tuotantoon käyttöönoton parhaiden käytäntöjen kannalta laitteiston valinta on kriittinen. Valitsimme erityisesti DataPacket-hostauksen heidän AMD Ryzen -saatavuutensa vuoksi, koska yksiydinsuorituskyky on ratkaisevan tärkeää Node.js-sovelluksille, sillä JavaScriptin suoritus on yksisäikeistä.

Miksi Ydinsuorituskyvyn Optimointi On Tärkeää Node.js:lle

Siirtymämme Intelistä AMD Ryzen -prosessoreihin johti:

  • 573 % suorituskyvyn parannukseen pyyntöjen käsittelyssä (dokumentoituna status-sivumme GitHub Issue #1519:ssa)
  • Käsittelyviiveiden poistumiseen lähes välittömiin vastauksiin (mainittu GitHub Issue #298:ssa)
  • Parempaan hinta-suorituskykysuhteeseen Node.js-tuotantoympäristöissä
  • Parantuneisiin vasteaikoihin kaikissa sovelluksemme päätepisteissä

Suorituskyvyn parannus oli niin merkittävä, että pidämme nyt AMD Ryzen -prosessoreita välttämättöminä mille tahansa vakavalle Node.js-tuotantokäyttöönotolle, olipa kyseessä verkkosovellukset, API:t, mikropalvelut tai mikä tahansa muu Node.js-kuormitus.

Lisätietoja infrastruktuurivalinnoistamme löydät:

Node.js-tuotantoympäristön Asennus: Teknologiapinomme

Node.js-tuotantoon käyttöönoton parhaat käytäntömme sisältävät harkittuja teknologisia valintoja vuosien tuotantokokemuksen pohjalta. Tässä mitä käytämme ja miksi nämä valinnat pätevät mihin tahansa Node.js-sovellukseen:

Pakettien Hallinta: pnpm Tuotannon Tehokkuuteen

Mitä käytämme: pnpm (lukittu versio)

Valitsimme pnpm:n npm:n ja yarnin sijaan Node.js-tuotantoympäristömme asennukseen, koska:

  • Nopeammat asennusajat CI/CD-putkissa
  • Levytilan tehokkuus kovien linkkien avulla
  • Tiukka riippuvuuksien ratkaisu joka estää näkymättömät riippuvuudet
  • Parempi suorituskyky tuotantokäyttöönotossa

Note

Osana Node.js-tuotantoon käyttöönoton parhaita käytäntöjä lukitsemme kriittisten työkalujen, kuten pnpm:n, tarkat versiot varmistaaksemme johdonmukaisen toiminnan kaikissa ympäristöissä ja tiimin jäsenten koneilla.

Toteutuksen yksityiskohdat:

Web-kehys: Koa Moderniin Node.js-tuotantoon

Mitä käytämme:

  • @koa/router
  • @koa/multer
  • @ladjs/koa-simple-ratelimit Valitsimme Koa:n Expressin sijaan Node.js -tuotantoinfrastruktuuriimme sen modernin async/await-tuen ja siistimmän middleware-komposition vuoksi. Perustajamme Nick Baugh on osallistunut sekä Expressin että Koan kehitykseen, mikä antaa meille syvällisen näkemyksen molemmista kehyksistä tuotantokäyttöön.

Nämä mallit pätevät, olitpa rakentamassa REST-rajapintoja, GraphQL-palvelimia, web-sovelluksia tai mikropalveluita.

Esimerkkejä toteutuksistamme:

Taustatyöprosessointi: Bree tuotannon luotettavuuteen

Käytössämme: bree ajastin

Loimme ja ylläpidämme Bree:tä, koska olemassa olevat työnajastimet eivät täyttäneet tarpeitamme työntekijäthreadien tuen ja modernien JavaScript-ominaisuuksien osalta tuotannon Node.js -ympäristöissä. Tämä pätee mihin tahansa Node.js -sovellukseen, joka tarvitsee taustaprosessointia, ajoitettuja tehtäviä tai työntekijäthreadit.

Esimerkkejä toteutuksistamme:

Virheenkäsittely: @hapi/boom tuotannon luotettavuuteen

Käytössämme: @hapi/boom

Käytämme @hapi/boom:ia rakenteellisiin virhevastauksiin kaikissa Node.js -tuotantosovelluksissamme. Tämä malli toimii missä tahansa Node.js -sovelluksessa, joka tarvitsee johdonmukaista virheenkäsittelyä.

Esimerkkejä toteutuksistamme:

Kuinka valvoa Node.js -sovelluksia tuotannossa

Lähestymistapamme Node.js -sovellusten valvontaan tuotannossa on kehittynyt vuosien mittaan, kun olemme ajaneet sovelluksia suuressa mittakaavassa. Toteutamme valvonnan useilla tasoilla varmistaaksemme luotettavuuden ja suorituskyvyn kaikentyyppisille Node.js -sovelluksille.

Järjestelmätason Node.js -tuotantovalvonta

Ydin toteutuksemme: helpers/monitor-server.js

Käytössämme: node-os-utils

Tuotantovalvontamme kynnysarvot (todellisesta tuotantokoodistamme):

  • 2GB heap-koko raja automaattisilla hälytyksillä
  • 25% muistin käyttö varoituskynnys
  • 80% CPU:n käyttö hälytyskynnys
  • 75% levyn käyttö varoituskynnys

Warning

Nämä kynnysarvot toimivat meidän laitteistokonfiguraatiollamme. Kun toteutat Node.js -tuotantovalvontaa, tutustu monitor-server.js -toteutukseemme ymmärtääksesi tarkka logiikka ja mukauta arvot omaan ympäristöösi.

Sovellustason valvonta Node.js -tuotannossa

Virheiden luokittelumme: helpers/is-code-bug.js

Tämä apuri erottaa:

  • Todelliset koodivirheet, jotka vaativat välitöntä huomiota
  • Käyttäjävirheet, jotka ovat odotettua käyttäytymistä
  • Ulkoiset palvelun häiriöt, joita emme voi hallita

Tämä malli pätee mihin tahansa Node.js -sovellukseen - web-sovelluksiin, rajapintoihin, mikropalveluihin tai taustapalveluihin. Lokituksemme toteutus: helpers/logger.js

Toteutamme kattavan kenttien sensuroinnin suojataksemme arkaluontoisia tietoja samalla kun säilytämme hyödylliset virheenkorjausmahdollisuudet Node.js-tuotantoympäristössämme.

Sovelluskohtainen valvonta

Palvelintoteutuksemme:

Jonon valvonta: Toteutamme 5GB jonorajat ja 180 sekunnin aikakatkaisut pyyntöjen käsittelyssä resurssien loppumisen estämiseksi. Nämä mallit soveltuvat mihin tahansa Node.js-sovellukseen, jossa on jonoja tai taustaprosessointia.

Node.js-tuotantovalvonta PM2-terveystarkastuksilla

Olemme hioneet Node.js-tuotantoympäristömme asetuksia PM2:n avulla vuosien tuotantokokemuksen perusteella. PM2-terveystarkastuksemme ovat välttämättömiä luotettavuuden ylläpitämiseksi missä tahansa Node.js-sovelluksessa.

PM2-terveystarkastusjärjestelmämme

Ydinimplementaatiomme: jobs/check-pm2.js

Node.js-tuotantovalvontamme PM2-terveystarkastuksilla sisältää:

  • Suoritetaan 20 minuutin välein cron-ajastuksen avulla
  • Vaatii vähintään 15 minuutin käyttöajan ennen prosessin terveeksi katsomista
  • Varmistaa prosessin tilan ja muistin käytön
  • Käynnistää epäonnistuneet prosessit automaattisesti uudelleen
  • Estää uudelleenkäynnistys-silmukat älykkään terveystarkastuksen avulla

Caution

Node.js-tuotantoon liittyvien parhaiden käytäntöjen vuoksi vaadimme 15+ minuutin käyttöajan ennen prosessin terveeksi katsomista uudelleenkäynnistys-silmukoiden välttämiseksi. Tämä estää ketjureaktiovirheet, kun prosessit kamppailevat muistin tai muiden ongelmien kanssa.

PM2-tuotantokonfiguraatiomme

Ekosysteemin asetuksemme: Tutustu palvelimen käynnistystiedostoihimme Node.js-tuotantoympäristön asetuksissa:

Nämä mallit soveltuvat riippumatta siitä, käytätkö Express-sovelluksia, Koa-palvelimia, GraphQL-rajapintoja tai muita Node.js-sovelluksia.

Automaattinen PM2-julkaisu

PM2-julkaisu: ansible/playbooks/node.yml

Automatisoimme koko PM2-asetuksemme Ansiblella varmistaaksemme yhdenmukaiset Node.js-tuotantojulkaisut kaikilla palvelimillamme.

Tuotantovirheiden käsittely- ja luokitusjärjestelmä

Yksi arvokkaimmista Node.js-tuotantojulkaisuun liittyvistä parhaista käytännöistämme on älykäs virheiden luokittelu, joka soveltuu mihin tahansa Node.js-sovellukseen:

isCodeBug-toteutuksemme tuotantoon

Lähde: helpers/is-code-bug.js

Tämä apuväline tarjoaa älykkään virheiden luokittelun Node.js-sovelluksille tuotannossa, jotta:

  • Todelliset virheet priorisoidaan käyttäjävirheiden yli
  • Parannamme häiriötilanteiden hallintaa keskittymällä todellisiin ongelmiin
  • Vähennämme hälytysväsymystä odotetuista käyttäjävirheistä
  • Ymmärrämme paremmin sovelluksen ja käyttäjän aiheuttamat ongelmat

Tämä malli toimii missä tahansa Node.js-sovelluksessa – olipa kyseessä verkkokaupat, SaaS-alustat, rajapinnat tai mikropalvelut.

Integraatio tuotantolokitukseemme

Lokitusintegraatiomme: helpers/logger.js Our logger käyttää isCodeBug-arvoa hälytystasojen ja kenttien peittämisen määrittämiseen, varmistaen, että saamme ilmoituksia todellisista ongelmista samalla kun suodatamme pois melua Node.js-tuotantoympäristössämme.

Lue lisää virheenkäsittelymalleistamme:

Edistynyt suorituskyvyn virheenkorjaus v8-profiler-nextillä ja cpuprolla

Käytämme edistyneitä profilointityökaluja kasamuistikuvausten analysointiin ja OOM (muistin loppuminen) -ongelmien, suorituskykypullonkaulojen sekä Node.js-muistiongelmien virheenkorjaukseen tuotantoympäristössämme. Nämä työkalut ovat välttämättömiä kaikille Node.js-sovelluksille, jotka kokevat muistivuotoja tai suorituskykyongelmia.

Profilointilähestymistapamme Node.js-tuotantoon

Suosittelemamme työkalut:

  • v8-profiler-next - Kasamuistikuvausten ja CPU-profiilien luomiseen
  • cpupro - CPU-profiilien ja kasamuistikuvausten analysointiin

Tip

Käytämme v8-profiler-nextiä ja cpuproa yhdessä luodaksemme täydellisen suorituskyvyn virheenkorjausprosessin Node.js-sovelluksillemme. Tämä yhdistelmä auttaa tunnistamaan muistivuodot, suorituskykypullonkaulat ja optimoimaan tuotantokoodimme.

Kuinka toteutamme kasamuistikuvausanalyysin

Valvontatoteutuksemme: helpers/monitor-server.js

Tuotantovalvontamme sisältää automaattisen kasamuistikuvausten luomisen, kun muistirajat ylittyvät. Tämä auttaa meitä virheenkorjaamaan OOM-ongelmia ennen kuin ne aiheuttavat sovelluksen kaatumisia.

Keskeiset toteutusmallit:

  • Automaattiset kuvaukset kun kasamuistin koko ylittää 2GB-rajan
  • Signaalipohjainen profilointi pyynnöstä tuotannossa
  • Säilytyskäytännöt kuvauksien tallennuksen hallintaan
  • Integraatio siivoustöihimme automaattista ylläpitoa varten

Suorituskyvyn virheenkorjausprosessi

Tutustu toteutukseemme:

Kasamuistikuvausanalyysiin:

  1. Asenna v8-profiler-next kuvauksien luontiin
  2. Käytä cpuproa luotujen kuvausten analysointiin
  3. Toteuta valvontarajat vastaavasti kuin monitor-server.js:ssä
  4. Ota käyttöön automaattinen siivous kuvauksien tallennuksen hallintaan
  5. Luo signaalinkäsittelijät pyynnöstä tehtävään profilointiin tuotannossa

CPU-profilointiin:

  1. Luo CPU-profiileja kuormitushuippujen aikana
  2. Analysoi cpuprolla pullonkaulojen tunnistamiseksi
  3. Keskity kuumiin polkuihin ja optimointimahdollisuuksiin
  4. Valvo ennen/jälkeen suorituskyvyn parannuksia

Warning

Kasamuistikuvausten ja CPU-profiilien luominen voi vaikuttaa suorituskykyyn. Suosittelemme rajoittamaan profilointia ja ottamaan sen käyttöön vain tiettyjen ongelmien tutkimiseen tai ylläpitokatkojen aikana.

Integraatio tuotantovalvontamme kanssa

Profilointityökalumme integroituvat laajempaan valvontastrategiaamme:

  • Automaattinen käynnistys muisti-/CPU-rajojen perusteella
  • Hälytysintegratio suorituskykyongelmien havaitsemiseksi
  • Historiallinen analyysi suorituskykytrendejä seuraamaan
  • Sovellusmittareiden korrelaatio kattavaan virheenkorjaukseen Tämä lähestymistapa on auttanut meitä tunnistamaan ja korjaamaan muistivuotoja, optimoimaan kuumia koodipolkuja ja ylläpitämään vakaata suorituskykyä Node.js-tuotantoympäristössämme.

Node.js-tuotantoinfrastruktuurin turvallisuus

Toteutamme kattavan turvallisuuden Node.js-tuotantoinfrastruktuurillemme Ansible-automaatioiden avulla. Nämä käytännöt koskevat mitä tahansa Node.js-sovellusta:

Järjestelmätason turvallisuus Node.js-tuotannossa

Ansible-toteutuksemme: ansible/playbooks/security.yml

Keskeiset turvallisuustoimenpiteemme Node.js-tuotantoympäristöissä:

  • Swap pois käytöstä estämään arkaluontoisten tietojen kirjoittaminen levylle
  • Core dumpit pois käytöstä estämään muistidumppien sisältämät arkaluontoiset tiedot
  • USB-tallennustilan esto estämään luvaton tiedonsaanti
  • Kernel-parametrien säätö sekä turvallisuuden että suorituskyvyn parantamiseksi

Warning

Node.js-tuotantokäyttöönoton parhaiden käytäntöjen toteuttamisessa swapin poistaminen käytöstä voi aiheuttaa muistin loppumiseen liittyviä prosessien tappamisia, jos sovelluksesi ylittää käytettävissä olevan RAM-muistin. Seuraamme muistinkäyttöä tarkasti ja mitoittamme palvelimemme asianmukaisesti.

Sovellusturvallisuus Node.js-sovelluksille

Lokikenttien sensurointimme: helpers/logger.js

Sensuroimme lokitiedoista arkaluontoiset kentät, kuten salasanat, tokenit, API-avaimet ja henkilötiedot. Tämä suojaa käyttäjien yksityisyyttä samalla kun säilyttää virheenkorjausmahdollisuudet missä tahansa Node.js-tuotantoympäristössä.

Infrastruktuurin turvallisuusautomaatio

Täydellinen Ansible-asetuksemme Node.js-tuotantoon:

Turvallisuussisältömme

Lisätietoja turvallisuuslähestymistavastamme:

Tietokanta-arkkitehtuuri Node.js-sovelluksille

Käytämme hybridi-tietokantaratkaisua, joka on optimoitu Node.js-sovelluksillemme. Näitä malleja voidaan soveltaa mihin tahansa Node.js-sovellukseen:

SQLite-toteutus Node.js-tuotantoon

Käyttämämme:

Konfiguraatiomme: ansible/playbooks/sqlite.yml

Käytämme SQLitea käyttäjäkohtaisiin tietoihin Node.js-sovelluksissamme, koska se tarjoaa:

  • Tietojen eristämisen käyttäjä-/vuokralaiskohtaisesti
  • Parempi suorituskyky yksittäiskäyttäjän kyselyissä
  • Yksinkertaistetun varmuuskopioinnin ja migraation
  • Vähemmän monimutkaisuutta verrattuna jaettuihin tietokantoihin

Tämä malli toimii hyvin SaaS-sovelluksissa, monivuokralaisjärjestelmissä tai missä tahansa Node.js-sovelluksessa, joka tarvitsee tietojen eristämistä.

MongoDB-toteutus Node.js-tuotantoon

Käyttämämme:

Meidän konfiguraatiomme: config/mongoose.js

Käytämme MongoDB:tä sovellustietojen tallentamiseen Node.js -tuotantoympäristössämme, koska se tarjoaa:

  • Joustavan skeeman kehittyville tietorakenteille
  • Parempaa suorituskykyä monimutkaisissa kyselyissä
  • Vaakasuoran skaalaamisen mahdollisuudet
  • Rikkaan kyselykielen

Note

Hybridimenetelmämme on optimoitu meidän erityiseen käyttötapaukseemme. Tutki todellisia tietokannan käyttömallejamme koodipohjassa ymmärtääksesi, sopiiko tämä lähestymistapa sinun Node.js -sovelluksesi tarpeisiin.

Node.js -tuotannon taustatehtävien käsittely

Rakensimme taustatehtäväarkkitehtuurimme Bree:n ympärille luotettavaa Node.js -tuotantokäyttöä varten. Tämä koskee mitä tahansa Node.js -sovellusta, joka tarvitsee taustaprosessointia:

Meidän Bree-palvelinasetuksemme tuotantoon

Meidän pääasiallinen toteutuksemme: bree.js

Meidän Ansible-julkaisu: ansible/playbooks/bree.yml

Tuotannon tehtäväesimerkit

Terveystarkkailu: jobs/check-pm2.js

Siivousautomaatio: jobs/cleanup-tmp.js

Kaikki tehtävämme: Selaa täydellistä tehtäväkansiotamme

Nämä mallit koskevat mitä tahansa Node.js -sovellusta, joka tarvitsee:

  • Aikataulutettuja tehtäviä (tietojenkäsittely, raportit, siivous)
  • Taustaprosessointia (kuvien koon muuttaminen, sähköpostien lähetys, tietojen tuonti)
  • Terveystarkkailua ja ylläpitoa
  • Työntekijäketjujen hyödyntämistä CPU-intensiivisiin tehtäviin

Meidän tehtävien aikataulutusmallimme Node.js -tuotantoon

Tutki todellisia tehtävien aikataulutusmallejamme tehtäväkansiossamme ymmärtääksesi:

  • Kuinka toteutamme cron-tyyppisen aikataulutuksen Node.js -tuotannossa
  • Virheenkäsittely- ja uudelleenyrityslogiikkamme
  • Kuinka käytämme työntekijäketjuja CPU-intensiivisiin tehtäviin

Automaattinen ylläpito Node.js -tuotantosovelluksille

Toteutamme ennakoivaa ylläpitoa estääksemme yleisiä Node.js -tuotanto-ongelmia. Nämä mallit koskevat mitä tahansa Node.js -sovellusta:

Meidän siivoustoteutuksemme

Lähde: jobs/cleanup-tmp.js

Automaattinen ylläpitomme Node.js -tuotantosovelluksille kohdistuu:

  • Väliaikaisiin tiedostoihin, jotka ovat yli 24 tuntia vanhoja
  • Lokitiedostoihin, jotka ylittävät säilytysrajat
  • Välimuistitiedostoihin ja väliaikaiseen dataan
  • Ladattuihin tiedostoihin, joita ei enää tarvita
  • Heap-snapshoteihin suorituskyvyn virheenkorjauksesta

Nämä mallit koskevat mitä tahansa Node.js -sovellusta, joka tuottaa väliaikaisia tiedostoja, lokeja tai välimuistitietoja.

Levyn tilan hallinta Node.js -tuotannossa

Meidän valvontakynnyksemme: helpers/monitor-server.js

  • Jonorajat taustaprosessointiin
  • 75 % levynkäyttö varoituskynnys
  • Automaattinen siivous kun kynnysarvot ylittyvät

Infrastruktuurin ylläpidon automaatio

Meidän Ansible-automaatio Node.js -tuotantoon:

Node.js -tuotannon käyttöönoton toteutusopas

Tutki Todellista Koodiamme Tuotantokäytäntöjen Parhaiden Käytäntöjen Osalta

Aloita näistä keskeisistä tiedostoista Node.js-tuotantoympäristön asetuksissa:

  1. Konfigurointi: config/index.js
  2. Valvonta: helpers/monitor-server.js
  3. Virheenkäsittely: helpers/is-code-bug.js
  4. Lokitus: helpers/logger.js
  5. Prosessin terveystarkastukset: jobs/check-pm2.js

Opi Blogikirjoituksistamme

Tekniset toteutusoppaamme Node.js-tuotantoon:

Infrastruktuurin automaatio Node.js-tuotantoon

Ansible-playbookimme Node.js-tuotantoon käyttöönoton opetteluun:

Case-esimerkkimme

Yritysratkaisumme:

Yhteenveto: Node.js-tuotantokäyttöönoton parhaat käytännöt

Node.js-tuotantoinfrastruktuurimme osoittaa, että Node.js-sovellukset voivat saavuttaa yritystason luotettavuuden seuraavilla keinoilla:

  • Todistetut laitteistovalinnat (AMD Ryzen 573 %:n yksiydinsuorituskyvyn optimointiin)
  • Käytännössä testattu Node.js-tuotantovalvonta tarkkoine kynnysarvoineen ja automaattisine vasteineen
  • Älykäs virheiden luokittelu parantamaan häiriötilanteiden hallintaa tuotantoympäristöissä
  • Edistynyt suorituskyvyn virheenkorjaus v8-profiler-nextillä ja cpuprolla OOM-tilanteiden estämiseksi
  • Kattava turvallisuuden koventaminen Ansible-automaatioiden avulla
  • Hybriditietokanta-arkkitehtuuri sovelluksen tarpeisiin optimoituna
  • Automaattinen ylläpito yleisten Node.js-tuotanto-ongelmien ehkäisemiseksi

Keskeinen opetus: Tutki todellisia toteutustiedostojamme ja blogikirjoituksiamme sen sijaan, että seuraisit geneerisiä parhaita käytäntöjä. Koodipohjamme tarjoaa käytännön malleja Node.js-tuotantokäyttöönottoon, joita voi soveltaa mihin tahansa Node.js-sovellukseen – verkkosovelluksiin, API:hin, mikropalveluihin tai taustapalveluihin.

Täydellinen resurssilista Node.js-tuotantoon

Keskeiset toteutustiedostomme

Palvelinratkaisumme

Infrastruktuuriemme automaatio

Teknisiä blogikirjoituksiamme

Yritysasiakastapauksemme