Hogyan optimalizáljuk a Node.js termelési infrastruktúrát: Legjobb gyakorlatok

Node.js teljesítményoptimalizálási útmutató

Előszó

A Forward Email-nél évekig tökéletesítettük Node.js éles környezetünk beállítását. Ez az átfogó útmutató megosztja velünk a harcedzett Node.js éles telepítési legjobb gyakorlatokat, különös tekintettel a teljesítményoptimalizálásra, a monitorozásra és azokra a tanulságokra, amelyeket a Node.js alkalmazások napi milliós tranzakciók kezelésére való skálázása során szereztünk.

A 573%-os Egymagos Teljesítményoptimalizációs Forradalmunk

Amikor Intelről AMD Ryzen processzorokra váltottunk, 573%-os teljesítménynövekedést értünk el Node.js alkalmazásainkban. Ez nem csupán egy apró optimalizáció volt – alapjaiban változtatta meg, hogyan teljesítenek Node.js alkalmazásaink éles környezetben, és jól mutatja az egymagos teljesítményoptimalizáció fontosságát bármely Node.js alkalmazás esetén.

Tip

A Node.js éles telepítési legjobb gyakorlatok esetén a hardverválasztás kritikus. Kifejezetten a DataPacket szolgáltatást választottuk AMD Ryzen elérhetőségük miatt, mert az egymagos teljesítmény kulcsfontosságú a Node.js alkalmazások számára, mivel a JavaScript végrehajtása egyszálú.

Miért Fontos az Egymagos Teljesítményoptimalizáció a Node.js Számára

Az Intelről AMD Ryzenre való váltásunk eredményei:

  • 573%-os teljesítménynövekedés a kérések feldolgozásában (dokumentálva a státusz oldalunk GitHub Issue #1519 bejegyzésében)
  • Feldolgozási késések megszüntetése majdnem azonnali válaszidőkre (említve a GitHub Issue #298 bejegyzésben)
  • Jobb ár-teljesítmény arány Node.js éles környezetekhez
  • Javított válaszidők az összes alkalmazásunk végpontján

A teljesítménynövekedés olyan jelentős volt, hogy ma már az AMD Ryzen processzorokat elengedhetetlennek tartjuk bármilyen komoly Node.js éles telepítéshez, legyen szó webalkalmazásokról, API-król, mikroszolgáltatásokról vagy bármilyen más Node.js munkaterhelésről.

Részletesebb információkért infrastruktúra választásainkról, tekintsd meg:

Node.js Éles Környezet Beállítása: Technológiai Stackszerkezetünk

Node.js éles telepítési legjobb gyakorlataiként tudatos technológiai választásokat alkalmazunk, amelyek évek tapasztalatán alapulnak. Íme, mit használunk, és miért alkalmazhatók ezek a választások bármely Node.js alkalmazásra:

Csomagkezelő: pnpm a Hatékony Éles Használathoz

Amit használunk: pnpm (rögzített verzió)

A pnpm-et választottuk az npm és a yarn helyett Node.js éles környezetünk beállításához, mert:

  • Gyorsabb telepítési idők CI/CD folyamatokban
  • Lemezterület-hatékonyság hard linkeléssel
  • Szigorú függőségfeloldás, amely megakadályozza a fantom függőségeket
  • Jobb teljesítmény éles telepítések során

Note

A Node.js éles telepítési legjobb gyakorlataink részeként rögzítjük a kritikus eszközök, például a pnpm pontos verzióját, hogy biztosítsuk a következetes viselkedést minden környezetben és a csapat tagjainak gépein.

Megvalósítás részletei:

Webkeretrendszer: Koa a Modern Node.js Éles Környezethez

Amit használunk:

  • @koa/router
  • @koa/multer
  • @ladjs/koa-simple-ratelimit A Node.js termelési infrastruktúránkhoz a Koa-t választottuk az Express helyett a modern async/await támogatása és a tisztább middleware összetétel miatt. Alapítónk, Nick Baugh mind az Expresshez, mind a Koához hozzájárult, így mély betekintést nyertünk mindkét keretrendszer termelési használatába.

Ezek a minták alkalmazhatók REST API-k, GraphQL szerverek, webalkalmazások vagy mikroszolgáltatások építésekor.

Megvalósítási példáink:

Háttérfeladat-feldolgozás: Bree a termelési megbízhatóságért

Amit használunk: bree ütemező

A Bree-t azért hoztuk létre és tartjuk karban, mert a meglévő feladatütemezők nem feleltek meg a munkamenet szál támogatás és a modern JavaScript funkciók termelési Node.js környezetben támasztott igényeinek. Ez bármely Node.js alkalmazásra vonatkozik, amely háttérfeldolgozást, ütemezett feladatokat vagy munkamenet szálakat igényel.

Megvalósítási példáink:

Hibakezelés: @hapi/boom a termelési megbízhatóságért

Amit használunk: @hapi/boom

Az @hapi/boom-ot használjuk strukturált hibaválaszokhoz Node.js termelési alkalmazásainkban. Ez a minta bármely Node.js alkalmazásra alkalmazható, amelynek következetes hibakezelésre van szüksége.

Megvalósítási példáink:

Hogyan figyeljük a Node.js alkalmazásokat termelésben

A Node.js alkalmazások termelési megfigyeléséhez való megközelítésünk évek során alakult ki, miközben nagy léptékben futtattunk alkalmazásokat. Több rétegben valósítjuk meg a megfigyelést, hogy bármilyen típusú Node.js alkalmazás megbízhatóságát és teljesítményét biztosítsuk.

Rendszerszintű Node.js termelési megfigyelés

Alap megvalósításunk: helpers/monitor-server.js

Amit használunk: node-os-utils

Termelési megfigyelési küszöbértékeink (a tényleges termelési kódunkból):

  • 2GB heap méret korlát automatikus riasztásokkal
  • 25% memóriahasználat figyelmeztetési küszöb
  • 80% CPU használat riasztási küszöb
  • 75% lemezhasználat figyelmeztetési küszöb

Warning

Ezek a küszöbértékek a mi konkrét hardverkonfigurációnkra vonatkoznak. Node.js termelési megfigyelés bevezetésekor tekintsd át a monitor-server.js megvalósításunkat, hogy megértsd a pontos logikát, és igazítsd az értékeket a saját környezetedhez.

Alkalmazásszintű megfigyelés Node.js termeléshez

Hibakategorizálásunk: helpers/is-code-bug.js

Ez a segéd megkülönbözteti:

  • Valódi kódhibákat, amelyek azonnali figyelmet igényelnek
  • Felhasználói hibákat, amelyek elvárt viselkedésnek számítanak
  • Külső szolgáltatás hibákat, amelyeket nem tudunk befolyásolni

Ez a minta bármely Node.js alkalmazásra érvényes – webalkalmazásokra, API-kra, mikroszolgáltatásokra vagy háttérszolgáltatásokra. Naplózás megvalósításunk: helpers/logger.js

Átfogó mezőelrejtést valósítunk meg az érzékeny információk védelme érdekében, miközben hasznos hibakeresési képességeket tartunk fenn Node.js éles környezetünkben.

Alkalmazás-specifikus megfigyelés

Szerver megvalósításaink:

Sorfigyelés: 5 GB-os sor korlátokat és 180 másodperces időkorlátokat alkalmazunk a kérésfeldolgozásnál az erőforrás-kimerülés megelőzésére. Ezek a minták bármely Node.js alkalmazásra érvényesek, amely sorokat vagy háttérfeldolgozást használ.

Node.js éles környezet megfigyelése PM2 egészségellenőrzésekkel

Évek éles környezetben szerzett tapasztalatával finomítottuk Node.js éles környezetünk beállítását PM2-vel. PM2 egészségellenőrzéseink elengedhetetlenek a megbízhatóság fenntartásához bármely Node.js alkalmazásban.

PM2 egészségellenőrző rendszerünk

Alap megvalósításunk: jobs/check-pm2.js

Node.js éles környezet megfigyelésünk PM2 egészségellenőrzésekkel tartalmazza:

  • 20 percenként fut cron ütemezéssel
  • Minimum 15 perc üzemidőt igényel a folyamat egészségesnek tekintéséhez
  • Ellenőrzi a folyamat állapotát és memóriahasználatát
  • Automatikusan újraindítja a hibás folyamatokat
  • Megakadályozza az újraindítási ciklusokat intelligens egészségellenőrzéssel

Caution

Node.js éles környezetbe való telepítés legjobb gyakorlataihoz 15+ perc üzemidőt követelünk meg a folyamat egészségesnek tekintéséhez, hogy elkerüljük az újraindítási ciklusokat. Ez megakadályozza a láncreakciós hibákat, amikor a folyamatok memória- vagy egyéb problémákkal küzdenek.

PM2 éles környezet konfigurációnk

Ökoszisztéma beállításunk: Tanulmányozd szerver indító fájljainkat Node.js éles környezet beállításához:

Ezek a minták alkalmazhatók Express alkalmazások, Koa szerverek, GraphQL API-k vagy bármely más Node.js alkalmazás futtatásakor.

Automatikus PM2 telepítés

PM2 telepítés: ansible/playbooks/node.yml

Teljes PM2 beállításunkat Ansible segítségével automatizáljuk, hogy következetes Node.js éles környezet telepítéseket biztosítsunk minden szerverünkön.

Éles környezet hibakezelési és osztályozási rendszer

Az egyik legértékesebb Node.js éles környezetbe való telepítési legjobb gyakorlatunk az intelligens hibakategorizálás, amely bármely Node.js alkalmazásra alkalmazható:

isCodeBug megvalósításunk éles környezethez

Forrás: helpers/is-code-bug.js

Ez a segédfunkció intelligens hibakategorizálást biztosít Node.js alkalmazások számára éles környezetben, hogy:

  • Az igazi hibákat helyezze előtérbe a felhasználói hibákkal szemben
  • Javítsa az incidens válaszadást az igazi problémákra fókuszálva
  • Csökkentse az értesítési fáradtságot a várt felhasználói hibák miatt
  • Jobban megértse az alkalmazás- és felhasználó által generált problémákat

Ez a minta bármely Node.js alkalmazásra működik – legyen szó e-kereskedelmi oldalakról, SaaS platformokról, API-król vagy mikroszolgáltatásokról.

Integráció éles környezetbeli naplózásunkkal

Naplózó integrációnk: helpers/logger.js A naplónk az isCodeBug értéket használja az értesítési szintek és a mezők elrejtésének meghatározására, biztosítva, hogy valódi problémákról kapjunk értesítést, miközben kiszűrjük a zajt a Node.js éles környezetünkben.

Ismerje meg jobban a hibakezelési mintáinkat:

Fejlett teljesítményhibakeresés v8-profiler-next és cpupro segítségével

Fejlett profilozó eszközöket használunk a heap pillanatképek elemzésére és az OOM (memóriahiány) problémák, teljesítménybeli szűk keresztmetszetek, valamint Node.js memória problémák hibakeresésére az éles környezetünkben. Ezek az eszközök elengedhetetlenek bármely Node.js alkalmazás számára, amely memória szivárgást vagy teljesítményproblémákat tapasztal.

Profilozási megközelítésünk Node.js éles környezethez

Ajánlott eszközeink:

  • v8-profiler-next - Heap pillanatképek és CPU profilok generálásához
  • cpupro - CPU profilok és heap pillanatképek elemzéséhez

Tip

A v8-profiler-next és a cpupro együttes használatával teljes körű teljesítményhibakeresési munkafolyamatot hozunk létre Node.js alkalmazásaink számára. Ez a kombináció segít azonosítani a memória szivárgásokat, a teljesítménybeli szűk keresztmetszeteket, és optimalizálni az éles kódunkat.

Hogyan valósítjuk meg a heap pillanatkép elemzést

Monitorozási megvalósításunk: helpers/monitor-server.js

Az éles környezetbeli monitorozásunk automatikus heap pillanatkép generálást tartalmaz, ha a memória küszöbértékeket túllépik. Ez segít az OOM problémák hibakeresésében, mielőtt azok alkalmazás összeomláshoz vezetnének.

Fő megvalósítási minták:

  • Automatikus pillanatképek készítése, ha a heap mérete meghaladja a 2GB küszöböt
  • Jel alapú profilozás az igény szerinti elemzéshez éles környezetben
  • Megőrzési szabályzatok a pillanatképek tárolásának kezelésére
  • Integráció a takarító feladatainkkal az automatizált karbantartás érdekében

Teljesítményhibakeresési munkafolyamat

Tanulmányozza tényleges megvalósításunkat:

Heap pillanatkép elemzéshez:

  1. Telepítse a v8-profiler-next-et a pillanatképek generálásához
  2. Használja a cpupro-t a generált pillanatképek elemzéséhez
  3. Valósítson meg monitorozási küszöbértékeket hasonlóan a monitor-server.js-hez
  4. Állítson be automatizált takarítást a pillanatképek tárolásának kezelésére
  5. Hozzon létre jelkezelőket az igény szerinti profilozáshoz éles környezetben

CPU profilozáshoz:

  1. Generáljon CPU profilokat magas terhelés idején
  2. Elemezze cpupro-val a szűk keresztmetszetek azonosításához
  3. Fókuszáljon a forró útvonalakra és az optimalizálási lehetőségekre
  4. Figyelje a teljesítményt a javítások előtt és után

Warning

A heap pillanatképek és CPU profilok generálása befolyásolhatja a teljesítményt. Ajánljuk a korlátozás bevezetését, és a profilozás csak konkrét problémák vizsgálata vagy karbantartási időszakok alatt történő engedélyezését.

Integráció az éles környezetbeli monitorozásunkkal

Profilozó eszközeink integrálódnak a szélesebb körű monitorozási stratégiánkba:

  • Automatikus indítás memória/CPU küszöbértékek alapján
  • Értesítési integráció teljesítményproblémák észlelésekor
  • Történeti elemzés a teljesítmény trendek nyomon követéséhez időben
  • Alkalmazás metrikákkal való korreláció a teljes körű hibakeresés érdekében Ez a megközelítés segített azonosítani és megoldani a memória szivárgásokat, optimalizálni a forró kódrészleteket, és fenntartani a stabil teljesítményt Node.js éles környezetünkben.

Node.js Éles Infrastruktúra Biztonság

Átfogó biztonságot valósítunk meg Node.js éles infrastruktúránk számára Ansible automatizálás segítségével. Ezek a gyakorlatok bármely Node.js alkalmazásra érvényesek:

Rendszerszintű Biztonság Node.js Éles Környezethez

Ansible megvalósításunk: ansible/playbooks/security.yml

Fő biztonsági intézkedéseink Node.js éles környezetekhez:

  • Swap letiltva annak érdekében, hogy érzékeny adatok ne kerüljenek lemezre
  • Core dumpok letiltva hogy megakadályozzuk az érzékeny információkat tartalmazó memória dumpokat
  • USB tároló blokkolva az illetéktelen adat-hozzáférés megakadályozására
  • Kernel paraméterek hangolása mind biztonsági, mind teljesítménybeli okokból

Warning

Node.js éles telepítési legjobb gyakorlatok bevezetésekor a swap letiltása okozhat memóriahiány miatti folyamatleállítást, ha az alkalmazás meghaladja a rendelkezésre álló RAM-ot. Gondosan figyeljük a memóriahasználatot és megfelelően méretezzük szervereinket.

Alkalmazásbiztonság Node.js Alkalmazásokhoz

Naplómező elrejtésünk: helpers/logger.js

Érzékeny mezőket rejtünk el a naplókban, beleértve jelszavakat, tokeneket, API kulcsokat és személyes adatokat. Ez védi a felhasználók magánéletét, miközben megőrzi a hibakeresési lehetőségeket bármely Node.js éles környezetben.

Infrastruktúra Biztonsági Automatizálás

Teljes Ansible beállításunk Node.js éles környezethez:

Biztonsági Tartalmunk

Tudjon meg többet biztonsági megközelítésünkről:

Adatbázis Architektúra Node.js Alkalmazásokhoz

Hibrid adatbázis megközelítést használunk, amely optimalizált Node.js alkalmazásainkhoz. Ezek a minták bármely Node.js alkalmazásra adaptálhatók:

SQLite Megvalósítás Node.js Éles Környezethez

Amit használunk:

Konfigurációnk: ansible/playbooks/sqlite.yml

SQLite-t használunk felhasználóspecifikus adatokhoz Node.js alkalmazásainkban, mert:

  • Adatszigetelés felhasználónként/bérlőnként
  • Jobb teljesítmény egyszemélyes lekérdezésekhez
  • Egyszerűsített biztonsági mentés és migráció
  • Csökkentett komplexitás megosztott adatbázisokhoz képest

Ez a minta jól működik SaaS alkalmazásokhoz, többbérlős rendszerekhez vagy bármely Node.js alkalmazáshoz, amely adat izolációt igényel.

MongoDB Megvalósítás Node.js Éles Környezethez

Amit használunk:

Konfigurációnk: config/mongoose.js

A Node.js éles környezetünkben az alkalmazás adatainak tárolására a MongoDB-t használjuk, mert az biztosítja:

  • Rugalmas sémát az alakuló adatstruktúrákhoz
  • Jobb teljesítményt összetett lekérdezések esetén
  • Horizontális skálázási képességeket
  • Gazdag lekérdező nyelvet

Note

Hibrid megközelítésünk az adott felhasználási esetünkre optimalizált. Tanulmányozd a tényleges adatbázis-használati mintáinkat a kódbázisban, hogy megértsd, ez a megközelítés megfelel-e a Node.js alkalmazásod igényeinek.

Node.js éles háttérfeladat-feldolgozás

A háttérfeladat-architektúránkat a Bree köré építettük a megbízható Node.js éles telepítés érdekében. Ez bármely olyan Node.js alkalmazásra vonatkozik, amely háttérfeldolgozást igényel:

Bree szerver beállításunk éles környezethez

Fő megvalósításunk: bree.js

Ansible telepítésünk: ansible/playbooks/bree.yml

Éles feladatpéldák

Állapotfigyelés: jobs/check-pm2.js

Takarítás automatizálása: jobs/cleanup-tmp.js

Minden feladatunk: Böngészd a teljes feladatkönyvtárunkat

Ezek a minták bármely olyan Node.js alkalmazásra vonatkoznak, amely:

  • Ütemezett feladatokat igényel (adatfeldolgozás, jelentések, takarítás)
  • Háttérfeldolgozást végez (képátméretezés, e-mail küldés, adatimportok)
  • Állapotfigyelést és karbantartást igényel
  • Munkameneteket használ CPU-intenzív feladatokhoz

Ütemezési mintáink Node.js éles környezethez

Tanulmányozd a tényleges ütemezési mintáinkat a feladatkönyvtárunkban, hogy megértsd:

  • Hogyan valósítjuk meg a cron-szerű ütemezést Node.js éles környezetben
  • Hibakezelési és újrapróbálkozási logikánkat
  • Hogyan használjuk a munkameneteket CPU-intenzív feladatokhoz

Automatizált karbantartás Node.js éles alkalmazásokhoz

Proaktív karbantartást valósítunk meg a gyakori Node.js éles problémák megelőzésére. Ezek a minták bármely Node.js alkalmazásra vonatkoznak:

Takarítási megvalósításunk

Forrás: jobs/cleanup-tmp.js

Automatizált karbantartásunk a Node.js éles alkalmazásokhoz az alábbiakat célozza:

  • 24 óránál régebbi ideiglenes fájlok
  • Megőrzési időn túli naplófájlok
  • Gyorsítótár fájlok és ideiglenes adatok
  • Feltöltött fájlok, amelyekre már nincs szükség
  • Heap snapshotok a teljesítményhibakereséshez

Ezek a minták bármely olyan Node.js alkalmazásra vonatkoznak, amely ideiglenes fájlokat, naplókat vagy gyorsítótárazott adatokat generál.

Lemezterület-kezelés Node.js éles környezetben

Figyelési küszöbértékeink: helpers/monitor-server.js

  • Sor korlátok a háttérfeldolgozáshoz
  • 75%-os lemezhasználat figyelmeztetési küszöb
  • Automatikus takarítás a küszöbértékek túllépésekor

Infrastruktúra karbantartás automatizálása

Ansible automatizációnk Node.js éles környezethez:

Node.js éles telepítési megvalósítási útmutató

Tanulmányozza valós kódunkat a termelési legjobb gyakorlatokért

Kezdje ezekkel a kulcsfontosságú fájlokkal a Node.js termelési környezet beállításához:

  1. Konfiguráció: config/index.js
  2. Monitorozás: helpers/monitor-server.js
  3. Hibakezelés: helpers/is-code-bug.js
  4. Naplózás: helpers/logger.js
  5. Folyamat egészség: jobs/check-pm2.js

Tanuljon blogbejegyzéseinkből

Műszaki megvalósítási útmutatóink Node.js termeléshez:

Infrastruktúra automatizálás Node.js termeléshez

Ansible playbookjaink tanulmányozásra Node.js termelési telepítéshez:

Esettanulmányaink

Vállalati megvalósításaink:

Következtetés: Node.js termelési telepítés legjobb gyakorlatai

Node.js termelési infrastruktúránk bizonyítja, hogy a Node.js alkalmazások vállalati szintű megbízhatóságot érhetnek el a következőkkel:

  • Bevált hardverválasztások (AMD Ryzen a 573%-os egymagos teljesítményoptimalizálásért)
  • Bevált Node.js termelési monitorozás specifikus küszöbértékekkel és automatizált válaszokkal
  • Okos hibabesorolás a termelési környezetekben történő incidensválasz javítására
  • Fejlett teljesítményhibakeresés v8-profiler-next és cpupro segítségével az OOM megelőzésére
  • Átfogó biztonsági megerősítés Ansible automatizálással
  • Hibrid adatbázis-architektúra az alkalmazás igényeihez optimalizálva
  • Automatizált karbantartás a gyakori Node.js termelési problémák megelőzésére

Fő tanulság: Tanulmányozza valós megvalósítási fájljainkat és blogbejegyzéseinket ahelyett, hogy általános legjobb gyakorlatokat követne. Kódalapunk valós mintákat kínál Node.js termelési telepítéshez, amely bármilyen Node.js alkalmazásra adaptálható – webalkalmazásokra, API-kra, mikroszolgáltatásokra vagy háttérszolgáltatásokra.

Teljes erőforráslista Node.js termeléshez

Alapvető megvalósítási fájljaink

Szerver Implementációink

Infrastruktúra Automatizációnk

Műszaki Blogbejegyzéseink

Vállalati Esettanulmányaink