A Node.js éles infrastruktúra optimalizálása: Bevált gyakorlatok

Előszó

A Forward Emailnél éveket töltöttünk a Node.js éles környezetünk tökéletesítésével. Ez az átfogó útmutató bemutatja a keményen tesztelt Node.js éles környezetben történő telepítés legjobb gyakorlatait, különös tekintettel a teljesítményoptimalizálásra, a monitorozásra és a Node.js alkalmazások napi több millió tranzakció kezelésére való skálázásával kapcsolatos tanulságokra.

Az 573%-os egymagos teljesítményoptimalizálási forradalmunk

Amikor Intelről AMD Ryzen processzorokra váltottunk, 573%-os teljesítményjavulást értünk el a Node.js alkalmazásainkban. Ez nem csupán egy apró optimalizálás volt – alapvetően megváltoztatta a Node.js alkalmazásaink teljesítményét éles környezetben, és jól mutatja az egymagos teljesítményoptimalizálás fontosságát minden Node.js alkalmazás esetében.

Tip

A Node.js éles telepítésének ajánlott gyakorlataihoz a hardverválasztás kritikus fontosságú. Kifejezetten a DataPacket tárhelyet választottuk az AMD Ryzen elérhetősége miatt, mivel 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álás a Node.js esetében

Az Intelről AMD Ryzenre való átállásunk a következőket eredményezte:

A teljesítménynövekedés olyan jelentős volt, hogy most már elengedhetetlennek tartjuk az AMD Ryzen processzorokat minden komoly Node.js éles környezetben, függetlenül attól, hogy webes alkalmazásokat, API-kat, mikroszolgáltatásokat vagy bármilyen más Node.js munkaterhelést futtat.

Infrastruktúra-választásainkkal kapcsolatos további részletekért tekintse meg:

Node.js éles környezet beállítása: Technológiai veremünk

Node.js éles környezetben történő telepítésére vonatkozó legjobb gyakorlataink magukban foglalják a több éves gyártási tapasztalaton alapuló, tudatos technológiai döntéseket. Íme, hogy mit használunk, és miért vonatkoznak ezek a választások minden Node.js alkalmazásra:

Csomagkezelő: pnpm a termelési hatékonysághoz

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

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

  • Gyorsabb telepítési idők CI/CD folyamatokban
  • Lemezterület-hatékonyság hardveres összekapcsolás révén
  • Szigorú függőségfeloldás, amely megakadályozza a fantomfüggőségeket
  • Jobb teljesítmény éles környezetben

Note

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

Megvalósítás részletei:

Webes keretrendszer: Koa modern Node.js éles környezethez

Amit használunk:

A Node.js éles infrastruktúránk kialakításához a Koa-t választottuk az Express helyett, mivel modern aszinkron/await támogatást és letisztultabb köztes rétegrendszert kínál. Alapítónk, Nick Baugh mind az Express, mind a Koa fejlesztésében közreműködött, mélyreható betekintést nyújtva mindkét keretrendszer éles használatába.

Ezek a minták akkor is érvényesek, ha REST API-kat, GraphQL-kiszolgálókat, webalkalmazásokat vagy mikroszolgáltatásokat építesz.

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

Háttérfeladat-feldolgozás: Bree az éles üzem megbízhatóságához

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 munkaszálak támogatására és a modern JavaScript funkciókra vonatkozó igényeinknek az éles Node.js környezetekben. Ez minden olyan Node.js alkalmazásra vonatkozik, amely háttérfeldolgozást, ütemezett feladatokat vagy munkaszálakat igényel.

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

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

Amit használunk: @hapi/boom

A @hapi/boom mintát használjuk a strukturált hibaválaszokhoz a Node.js éles alkalmazásainkban. Ez a minta minden olyan Node.js alkalmazásnál működik, amely konzisztens hibakezelést igényel.

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

Node.js alkalmazások monitorozása éles környezetben

A Node.js alkalmazások éles környezetben történő monitorozásának megközelítésünket az alkalmazások nagymértékű futtatása során fejlesztettük ki. Több rétegű monitorozást valósítunk meg, hogy biztosítsuk bármilyen típusú Node.js alkalmazás megbízhatóságát és teljesítményét.

Rendszerszintű Node.js éles környezet monitorozása

Alap implementációnk: helpers/monitor-server.js

Amit használunk: node-os-utils

Termelési monitorozási küszöbértékeink (a tényleges gyártási kódunkból):

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

Warning

Ezek a küszöbértékek a mi adott hardverkonfigurációnkra vonatkoznak. Node.js éles környezeti monitorozás implementálásakor tekintse át a monitor-server.js implementációnkat, hogy megértse a pontos logikát, és az értékeket a saját beállításához igazítsa.

Alkalmazásszintű monitorozás Node.js éles környezetben

Hibabesorolásunk: helpers/is-code-bug.js

Ez a segédprogram különbséget tesz a következők között:

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

Ez a minta minden Node.js alkalmazásra vonatkozik – webalkalmazásokra, API-kra, mikroszolgáltatásokra vagy háttérszolgáltatásokra.

Naplózási implementációnk: helpers/logger.js

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

Alkalmazásspecifikus monitorozás

Szerver implementációink:

Várólista-figyelés: 5 GB-os várólista-korlátokat és 180 másodperces időtúllépéseket alkalmazunk a kérésfeldolgozáshoz az erőforrások kimerülésének megakadályozása érdekében. Ezek a minták minden olyan Node.js alkalmazásra vonatkoznak, amely várólistákat vagy háttérfeldolgozást használ.

Node.js éles környezet monitorozása PM2 állapotfelméréssel

Több éves gyártási tapasztalatunk során finomítottuk a Node.js éles környezetünket PM2-vel. A PM2 állapotfelméréseink elengedhetetlenek a megbízhatóság fenntartásához bármely Node.js alkalmazásban.

PM2 állapotfelmérő rendszerünk

Alap implementációnk: jobs/check-pm2.js

Node.js éles környezetünk monitorozása PM2 állapotfelméréssel a következőket foglalja magában:

  • 20 percenként lefut cron ütemezéssel
  • Legalább 15 perc üzemidő szükséges a folyamat egészségesnek minősítéséhez
  • Ellenőrzi a folyamat állapotát és a memóriahasználatot
  • Automatikusan újraindítja a sikertelen folyamatokat
  • Megakadályozza az újraindítási ciklusokat intelligens állapotellenőrzéssel

Caution

A Node.js éles telepítési ajánlott gyakorlataihoz legalább 15 perc üzemidő szükséges ahhoz, hogy egy folyamatot egészségesnek tekintsünk, hogy elkerüljük az újraindítási hurkokat. Ez megakadályozza a kaszkádos hibákat, amikor a folyamatok memóriaproblémákkal vagy egyéb problémákkal küzdenek.

A PM2 termelési konfigurációja

Az ökoszisztémánk beállítása: Tanulmányozd a szerverindító fájljainkat a Node.js éles környezet beállításához:

Ezek a minták akkor is érvényesek, ha Express alkalmazásokat, Koa szervereket, GraphQL API-kat vagy bármilyen más Node.js alkalmazást futtatsz.

Automatizált PM2 telepítés

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

A teljes PM2 beállításunkat automatizáljuk az Ansible segítségével, hogy biztosítsuk a Node.js konzisztens éles telepítését minden szerverünkön.

Gyártási hibakezelési és osztályozási rendszer

Az egyik legértékesebb Node.js éles telepítési bevált gyakorlatunk az intelligens hibaosztályozás, amely minden Node.js alkalmazásra vonatkozik:

Az isCodeBug implementációnk éles környezetben

Forrás: IDEIGLENES_HELYTARTOZÓ_0

Ez a segítő intelligens hibaosztályozást biztosít a Node.js alkalmazásokhoz éles környezetben a következőkhöz:

  • A tényleges hibákat helyezzük előtérbe a felhasználói hibákkal szemben.* Javítsuk az incidensekre adott válaszainkat a valós problémákra összpontosítva.* Csökkentsük a várható felhasználói hibák miatti riasztási fáradtságot.* Jobban értsük meg az alkalmazás és a felhasználók által generált problémákat.

Ez a minta bármilyen Node.js alkalmazásnál működik – akár e-kereskedelmi webhelyeket, SaaS platformokat, API-kat vagy mikroszolgáltatásokat építesz.

Integráció az éles naplózással

Naplózó integrációnk: helpers/logger.js

A naplózónk a isCodeBug függvényt használja a riasztási szintek és a mezőkihagyások meghatározásához, biztosítva, hogy értesítést kapjunk a valódi problémákról, miközben kiszűrjük a zajt a Node.js éles környezetünkben.

Tudjon meg többet a hibakezelési mintáinkról:

Speciális teljesítmény-hibakeresés a v8-profiler-next és a cpupro segítségével

Fejlett profilkészítő eszközöket használunk a halom pillanatképek elemzésére, valamint az OOM (Out of Memory) problémák, a teljesítménybeli szűk keresztmetszetek és a Node.js memóriaproblémák hibakeresésére éles környezetünkben. Ezek az eszközök elengedhetetlenek minden olyan Node.js alkalmazás számára, amely memóriaszivárgással vagy teljesítményproblémákkal küzd.

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

Az általunk ajánlott eszközök:

  • 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 hozunk létre egy teljes teljesítmény-hibakeresési munkafolyamatot a Node.js alkalmazásainkhoz. Ez a kombináció segít azonosítani a memóriaszivárgásokat, a teljesítménybeli szűk keresztmetszeteket és optimalizálni az éles kódunkat.

Hogyan implementáljuk a halom pillanatkép-elemzését

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

Éles környezeti monitorozásunk magában foglalja az automatikus memória-pillanatkép-generálást a memória-küszöbértékek túllépése esetén. Ez segít nekünk a környezeti problémák hibakeresésében, mielőtt azok alkalmazásösszeomlásokat okoznának.

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

  • Automatikus pillanatképek, ha a halom mérete meghaladja a 2 GB-os küszöbértéket
  • Jel alapú profilalkotás igény szerinti elemzéshez éles környezetben
  • Megőrzési szabályzatok a pillanatképek tárolásának kezeléséhez
  • Integráció a takarítási feladatainkkal az automatizált karbantartáshoz

Teljesítmény-hibakeresési munkafolyamat

Tanulmányozd a tényleges megvalósításunkat:

A halom pillanatképének elemzéséhez:

  1. Telepítse a v8-profiler-next csomagot pillanatképek generálásához.Használja a cpupro csomagot a létrehozott pillanatképek elemzéséhez.Implementáljon monitorozási küszöbértékeket, hasonlóan a monitor-server.js fájlunkhoz.Állítson be automatikus tisztítást a pillanatképek tárolásának kezeléséhez.Hozzon létre jelkezelőket az igény szerinti profilalkotáshoz éles környezetben.

CPU profilalkotáshoz:

  1. CPU profilok generálása nagy terhelésű időszakokban
  2. Elemzés a cpupro segítségével a szűk keresztmetszetek azonosítása érdekében
  3. A forró útvonalakra és az optimalizálási lehetőségekre összpontosítva
  4. Teljesítményjavulás figyelése előtte/utána

Warning

A halom pillanatképek és CPU-profilok generálása befolyásolhatja a teljesítményt. Javasoljuk a szabályozás bevezetését, és a profilalkotás engedélyezését csak konkrét problémák vizsgálatakor vagy karbantartási időszakokban.

Integráció a termelési monitorozásunkkal

Profilozó eszközeink integrálódnak tágabb monitorozási stratégiánkba:

  • Automatikus aktiválás memória/CPU küszöbértékek alapján
  • Riasztások integrációja teljesítményproblémák észlelésekor
  • Előzmények elemzése a teljesítménytrendek időbeli nyomon követéséhez
  • Korreláció az alkalmazásmetrikákkal az átfogó hibakereséshez

Ez a megközelítés segített azonosítani és megoldani a memóriaszivárgásokat, optimalizálni a gyorskód-útvonalakat, és stabil teljesítményt fenntartani Node.js éles környezetünkben.

Node.js éles infrastruktúra biztonsága

Átfogó biztonságot valósítunk meg Node.js termelési infrastruktúránkhoz az Ansible automatizáláson keresztül. Ezek a gyakorlatok minden Node.js alkalmazásra vonatkoznak:

Rendszerszintű biztonság Node.js éles környezetben

Ansible implementációnk: ansible/playbooks/security.yml

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

  • A swap letiltva a bizalmas adatok lemezre írásának megakadályozása érdekében. A memória-memória dump-jai letiltva a bizalmas információkat tartalmazó memória-dump-ok megakadályozása érdekében. Az USB-tároló blokkolva a jogosulatlan adathozzáférés megakadályozása érdekében.* A kernel paramétereinek finomhangolása a biztonság és a teljesítmény érdekében.

Warning

A Node.js éles telepítési ajánlott gyakorlatainak megvalósításakor a swap letiltása memóriahiány miatti leállásokat okozhat, ha az alkalmazás meghaladja a rendelkezésre álló RAM-ot. Gondosan figyelemmel kísérjük a memóriahasználatot, és ennek megfelelően méretezzük a szervereinket.

Alkalmazásbiztonság Node.js alkalmazásokhoz

Naplómező-kihagyásunk: helpers/logger.js

A naplókból eltávolítjuk az érzékeny mezőket, beleértve a jelszavakat, tokeneket, API-kulcsokat és személyes adatokat. Ez védi a felhasználók adatait, miközben fenntartja 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 tartalmaink

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

Adatbázis-architektúra Node.js alkalmazásokhoz

Egy hibrid adatbázis-megközelítést használunk, amelyet a Node.js alkalmazásainkhoz optimalizáltunk. Ezek a minták bármely Node.js alkalmazáshoz adaptálhatók:

SQLite implementáció Node.js éles környezetben

Amit használunk:

A konfigurációnk: ansible/playbooks/sqlite.yml

A Node.js alkalmazásainkban az SQLite-ot használjuk felhasználóspecifikus adatokhoz, mert a következőket biztosítja:

  • Adat elkülönítés felhasználónként/bérlőnként
  • Jobb teljesítmény egyfelhasználós lekérdezések esetén
  • Egyszerűsített biztonsági mentés és migráció
  • Kevesebb bonyolultság a megosztott adatbázisokhoz képest

Ez a minta jól működik SaaS-alkalmazások, több-bérlős rendszerek vagy bármely olyan Node.js alkalmazás esetében, amely adatizolációt igényel.

MongoDB implementáció Node.js éles környezetben

Amit használunk:

A beállításunk implementációja: helpers/setup-mongoose.js

A konfigurációnk: config/mongoose.js

A Node.js éles környezetünkben a MongoDB-t használjuk az alkalmazásadatokhoz, mert a következőket biztosítja:

  • Rugalmas séma a fejlődő adatstruktúrákhoz
  • Jobb teljesítmény összetett lekérdezésekhez
  • Vízszintes skálázási képességek
  • Gazdag lekérdezőnyelv

Note

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

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

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

Bree szerverünk beállítása éles környezethez

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

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

Éles Feladat Példák

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

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

Összes állásajánlatunk: Böngésszen teljes állásajánlat-katalógusunkban

Ezek a minták minden olyan Node.js alkalmazásra vonatkoznak, amelyre szükség van:

  • Ütemezett feladatok (adatfeldolgozás, jelentések, tisztítás)
  • Háttérfeldolgozás (képek átméretezése, e-mail küldése, adatimportálás)
  • Állapotfigyelés és karbantartás
  • Munkaszálak kihasználtsága CPU-igényes feladatokhoz

A Node.js éles környezetében alkalmazott feladatütemezési mintáink

Tanulmányozd a tényleges munkabeosztási mintáinkat az álláskeresőnkben, hogy megértsd:

  • Hogyan implementálunk cron-szerű ütemezést Node.js éles környezetben
  • Hibakezelési és újrapróbálkozási logikánk
  • Hogyan használjuk a munkaszálakat CPU-igényes feladatokhoz

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

Proaktív karbantartást alkalmazunk a gyakori Node.js éles környezetben jelentkező problémák megelőzése érdekében. Ezek a minták minden Node.js alkalmazásra vonatkoznak:

A mi takarítási implementációnk

Forrás: IDEIGLENES_HELYTARTOZÓ_0

A Node.js éles alkalmazások automatizált karbantartása a következőket célozza meg:

  • 24 óránál régebbi ideiglenes fájlok
  • Naplófájlok a megőrzési korláton túl
  • Gyorsítótárfájlok és ideiglenes adatok
  • Feltöltött fájlok, amelyekre már nincs szükség
  • Halmok pillanatképei teljesítményhiba-keresésből

Ezek a minták minden 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

Figyelemmel kísért küszöbértékeink: helpers/monitor-server.js

  • Várólista-korlátok a háttérben történő feldolgozáshoz
  • 75%-os lemezhasználat figyelmeztetési küszöbérték
  • Automatikus tisztítás küszöbértékek túllépése esetén

Infrastruktúra-karbantartási automatizálás

Ansible automatizálásunk Node.js éles környezetben:

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

Tanulmányozd a kódunkat az éles környezetben ajánlott gyakorlatokért

A Node.js éles környezet beállításához először ezekkel a kulcsfájlokkal kell kezdeni:

  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 állapota: jobs/check-pm2.js

Tanuljon blogbejegyzéseinkből

Technikai megvalósítási útmutatóink Node.js éles környezethez:

Infrastruktúra-automatizálás Node.js éles környezetben

Ansible forgatókönyveink, amelyeket érdemes tanulmányozni a Node.js éles telepítéséhez:

Esettanulmányaink

Vállalati megvalósításaink:

Következtetés: Node.js éles környezetben történő telepítés ajánlott gyakorlatai

Node.js éles infrastruktúránk bizonyítja, hogy a Node.js alkalmazások vállalati szintű megbízhatóságot érhetnek el az alábbiak révén:

  • Bizonyított hardverválaszték (AMD Ryzen az 573%-os egymagos teljesítményoptimalizáláshoz)
  • Harcban tesztelt Node.js éles környezet monitorozása specifikus küszöbértékekkel és automatizált válaszokkal
  • Intelligens hibabesorolás az incidensekre adott válaszok javítása érdekében éles környezetekben
  • Fejlett teljesítmény-hibakeresés a v8-profiler-next és a cpupro segítségével az OOM megelőzésére
  • Átfogó biztonsági megerősítés az Ansible automatizáláson keresztül
  • Hibrid adatbázis-architektúra, az alkalmazásigényekhez optimalizálva
  • Automatizált karbantartás a gyakori Node.js éles környezeti problémák megelőzésére

Főbb tanulság: Ahelyett, hogy általános bevált gyakorlatokat követnél, tanulmányozd a tényleges implementációs fájljainkat és blogbejegyzéseinket. Kódbázisunk valós mintákat biztosít a Node.js éles környezetben történő telepítéséhez, amelyek bármilyen Node.js alkalmazáshoz adaptálhatók – webalkalmazásokhoz, API-khoz, mikroszolgáltatásokhoz vagy háttérszolgáltatásokhoz.

Teljes erőforráslista a Node.js éles környezetéhez

Alapvető implementációs fájljaink

Szerveres megvalósításaink

Infrastruktúra-automatizálásunk

Műszaki blogbejegyzéseink

Vállalati esettanulmányaink