Jak optimalizovat produkční infrastrukturu Node.js: Nejlepší postupy v 2025
Nejlepší postupy pro nasazení Node.js v produkčním prostředí z naší osvědčené infrastruktury, která denně zpracovává miliony požadavků.
Ve Forward Email jsme strávili roky zdokonalováním našeho produkčního prostředí Node.js. Tato komplexní příručka sdílí naše osvědčené postupy pro nasazení produkčního prostředí Node.js se zaměřením na optimalizaci výkonu, monitorování a poznatky, které jsme získali při škálování aplikací Node.js pro zpracování milionů denních transakcí.
Naše revoluce v optimalizaci výkonu jednoho jádra s 573% výkonem
Když jsme migrovali z procesorů Intel na procesory AMD Ryzen, dosáhli jsme 573% zlepšení výkonu v našich Node.js aplikacích. Nejednalo se jen o drobnou optimalizaci – zásadně to změnilo výkon našich Node.js aplikací v produkčním prostředí a demonstruje to důležitost optimalizace výkonu jednoho jádra pro jakoukoli Node.js aplikaci.
[!TIP] Pro osvědčené postupy nasazení Node.js v produkčním prostředí je výběr hardwaru klíčový. Zvolili jsme hosting DataPacket konkrétně kvůli dostupnosti procesorů AMD Ryzen, protože výkon jednoho jádra je pro aplikace Node.js klíčový, jelikož spouštění JavaScriptu je jednovláknové.
Proč je optimalizace výkonu jednoho jádra důležitá pro Node.js
Naše migrace z Intelu na AMD Ryzen přinesla:
- 573% zlepšení výkonu při zpracování požadavků (dokumentováno v Problém č. 1519 naší stránky se stavem na GitHubu)
- Eliminované zpoždění zpracování k téměř okamžitým reakcím (zmíněným v Problém GitHubu č. 298)
- Lepší poměr ceny a výkonu pro produkční prostředí Node.js
- Zlepšené doby odezvy napříč všemi koncovými body našich aplikací
Zvýšení výkonu bylo tak významné, že nyní považujeme procesory AMD Ryzen za nezbytné pro jakékoli seriózní nasazení Node.js v produkčním prostředí, ať už provozujete webové aplikace, API, mikroslužby nebo jakoukoli jinou Node.js úlohu.
Související obsah
Pro více informací o našich možnostech infrastruktury se podívejte na:
- Nejlepší služba pro přeposílání e-mailů - Porovnání výkonu
- Řešení s vlastním hostováním - Doporučení k hardwaru
Nastavení produkčního prostředí Node.js: Náš technologický stack
Naše osvědčené postupy pro nasazení Node.js v produkčním prostředí zahrnují promyšlenou volbu technologií založenou na dlouholetých zkušenostech s produkčním prostředím. Zde je seznam toho, co používáme a proč se tyto volby vztahují na jakoukoli aplikaci Node.js:
Správce balíčků: pnpm pro efektivitu produkce
Co používáme: pnpm
(připnutá verze)
Pro naše produkční prostředí Node.js jsme zvolili pnpm před npm a yarn, protože:
- Rychlejší instalace v CI/CD potrubích
- Efektivita diskového prostoru prostřednictvím pevného propojení
- Přísné rozlišení závislostí který zabraňuje fantomovým závislostem
- Lepší výkon v produkčních nasazeních
[!NOTE] V rámci našich osvědčených postupů pro nasazení Node.js v produkčním prostředí používáme přesné verze klíčových nástrojů, jako je pnpm, abychom zajistili konzistentní chování ve všech prostředích a na všech počítačích členů týmu.
Detaily implementace:
Webový framework: Koa pro moderní produkci Node.js
Co používáme:
Pro naši produkční infrastrukturu Node.js jsme zvolili Koa před Expressem kvůli jeho moderní podpoře async/await a čistšímu složení middlewaru. Náš zakladatel Nick Baugh přispěl k Expressu i Koa a poskytl nám hluboký vhled do obou frameworků pro produkční použití.
Tyto vzory platí pro všechny typy aplikací, ať už vytváříte REST API, servery GraphQL, webové aplikace nebo mikroslužby.
Naše příklady implementace:
Zpracování úloh na pozadí: Bree pro spolehlivost produkce
Co používáme: bree
plánovač
Vytvořili jsme a udržujeme Bree, protože stávající plánovače úloh nesplňovaly naše potřeby na podporu pracovních vláken a moderní funkce JavaScriptu v produkčním prostředí Node.js. To platí pro všechny aplikace Node.js, které potřebují zpracování na pozadí, plánované úlohy nebo pracovní vlákna.
Naše příklady implementace:
- Nastavení serveru Bree
- Všechny naše definice pracovních pozic
- Úloha kontroly stavu PM2
- Implementace úklidové úlohy
Ošetření chyb: @hapi/boom pro spolehlivost produkce
Co používáme: @hapi/boom
Pro strukturované odpovědi na chyby v našich produkčních aplikacích Node.js používáme @hapi/boom. Tento vzor funguje pro jakoukoli aplikaci Node.js, která vyžaduje konzistentní zpracování chyb.
Naše příklady implementace:
Jak monitorovat aplikace Node.js v produkčním prostředí
Náš přístup k monitorování Node.js aplikací v produkčním prostředí se vyvíjel v průběhu let provozování aplikací ve velkém měřítku. Monitorování implementujeme na více vrstvách, abychom zajistili spolehlivost a výkon pro jakýkoli typ Node.js aplikace.
Monitorování produkce Node.js na úrovni systému
Naše základní implementace: helpers/monitor-server.js
Co používáme: node-os-utils
Naše prahové hodnoty pro monitorování produkce (z našeho skutečného produkčního kódu):
- Limit velikosti haldy 2 GB s automatickými upozorněními
- 25% využití paměti varovný práh
- 80% využití CPU prahová hodnota výstrahy
- 75% využití disku varovný práh
[!VAROVÁNÍ] Tyto prahové hodnoty fungují pro naši specifickou hardwarovou konfiguraci. Při implementaci monitorování produkčního prostředí Node.js si projděte naši implementaci monitor-server.js, abyste pochopili přesnou logiku a upravili hodnoty pro vaši konfiguraci.
Monitorování na úrovni aplikací pro produkční prostředí Node.js
Naše klasifikace chyb: helpers/is-code-bug.js
Tento pomocník rozlišuje mezi:
- Skutečné chyby v kódu které vyžadují okamžitou pozornost
- Chyby uživatelů které jsou očekávaným chováním
- Selhání externích služeb které nemůžeme ovládat
Tento vzor platí pro jakoukoli aplikaci Node.js – webové aplikace, API, mikroslužby nebo služby na pozadí.
Naše implementace protokolování: helpers/logger.js
Implementujeme komplexní redakci polí, abychom chránili citlivé informace a zároveň zachovali užitečné ladicí funkce v našem produkčním prostředí Node.js.
Monitorování specifické pro aplikaci
Naše implementace serverů:
Monitorování fronty: Implementujeme limity front 5 GB a časové limity 180 sekund pro zpracování požadavků, abychom zabránili vyčerpání zdrojů. Tyto vzorce platí pro jakoukoli aplikaci Node.js s frontami nebo zpracováním na pozadí.
Monitorování produkce Node.js pomocí kontrol stavu PM2
Během let zkušeností s produkčním prostředím Node.js jsme vylepšili nastavení našeho produkčního prostředí Node.js pomocí PM2. Naše kontroly stavu PM2 jsou nezbytné pro udržení spolehlivosti v jakékoli aplikaci Node.js.
Náš systém kontroly stavu PM2
Naše základní implementace: jobs/check-pm2.js
Naše monitorování produkce Node.js s kontrolami stavu PM2 zahrnuje:
- Jezdí každých 20 minut přes plánování cronu
- Vyžaduje minimálně 15 minut provozuschopnosti než proces považujete za zdravý
- Ověřuje stav procesů a využití paměti
- Automaticky restartuje neúspěšné procesy
- Zabraňuje restartovacím smyčkám prostřednictvím inteligentní kontroly stavu
[!KRITICKÉ] V rámci osvědčených postupů pro nasazení Node.js v produkčním prostředí požadujeme alespoň 15 minut provozuschopnosti, než proces považujeme za v pořádku, abychom se vyhnuli smyčkám restartování. Tím se zabrání kaskádovým selháním, když procesy mají potíže s pamětí nebo jiné problémy.
Naše konfigurace výroby PM2
Nastavení našeho ekosystému: Prostudujte si naše spouštěcí soubory serveru pro nastavení produkčního prostředí Node.js:
Tyto vzory platí bez ohledu na to, zda používáte aplikace Express, servery Koa, rozhraní GraphQL API nebo jakoukoli jinou aplikaci Node.js.
Automatizované nasazení PM2
Nasazení PM2: ansible/playbooks/node.yml
Celé nastavení PM2 automatizujeme prostřednictvím Ansible, abychom zajistili konzistentní nasazení Node.js v produkčním prostředí na všech našich serverech.
Systém pro zpracování a klasifikaci výrobních chyb
Jedním z našich nejcennějších osvědčených postupů pro nasazení Node.js v produkčním prostředí je inteligentní klasifikace chyb, která se vztahuje na jakoukoli aplikaci Node.js:
Naše implementace isCodeBug pro produkční prostředí
Zdroj: helpers/is-code-bug.js
Tento pomocník poskytuje inteligentní klasifikaci chyb pro aplikace Node.js v produkčním prostředí pro:
- Upřednostněte skutečné chyby kvůli chybám uživatelů
- Zlepšit naši reakci na incidenty zaměřením se na skutečné problémy
- Snižte únavu z bdělosti z očekávaných uživatelských chyb
- Lepší pochopení problémy generované aplikací vs. problémy generované uživatelem
Tento vzor funguje pro jakoukoli aplikaci Node.js – ať už vytváříte e-commerce weby, SaaS platformy, API nebo mikroslužby.
Integrace s naším systémem logování produkce
Integrace našich loggerů: helpers/logger.js
Náš logger používá isCodeBug
k určení úrovní upozornění a redigování polí, čímž zajistíme, že budeme upozorněni na skutečné problémy a zároveň odfiltrujeme šum v našem produkčním prostředí Node.js.
Související obsah
Zjistěte více o našich vzorcích pro zpracování chyb:
- Budování spolehlivého platebního systému - Vzory pro zpracování chyb
- Ochrana soukromí e-mailů - Ošetření bezpečnostních chyb
Pokročilé ladění výkonu s v8-profiler-next a cpupro
V našem produkčním prostředí používáme pokročilé nástroje pro profilování k analýze snapshotů haldy a ladění problémů s OOM (Out of Memory), úzkých míst s výkonem a problémů s pamětí Node.js. Tyto nástroje jsou nezbytné pro jakoukoli aplikaci Node.js, která má problémy s úniky paměti nebo výkonem.
Náš přístup k profilování pro produkční prostředí Node.js
Nástroje, které doporučujeme:
v8-profiler-next
- Pro generování snímků paměti a profilů CPUcpupro
- Pro analýzu profilů CPU a snapshotů haldy
[!TIP] K vytvoření kompletního pracovního postupu pro ladění výkonu našich aplikací Node.js používáme v8-profiler-next a cpupro. Tato kombinace nám pomáhá identifikovat úniky paměti, úzká místa ve výkonu a optimalizovat náš produkční kód.
Jak implementujeme analýzu snímků haldy
Naše implementace monitorování: helpers/monitor-server.js
Náš produkční monitoring zahrnuje automatické generování snapshotů haldy při překročení prahových hodnot paměti. To nám pomáhá ladit problémy s OOM dříve, než způsobí pády aplikace.
Klíčové implementační vzorce:
- Automatické snímky když velikost haldy překročí prahovou hodnotu 2 GB
- Profilování na základě signálů pro analýzu na vyžádání v produkčním prostředí
- Zásady uchovávání dat pro správu úložiště snímků
- Integrace s našimi úklidovými pracemi pro automatizovanou údržbu
Pracovní postup ladění výkonu
Prostudujte si naši skutečnou implementaci:
- Monitorování implementace serveru - Monitorování haldy a generování snímků
- Úklidová práce - Uchovávání a čištění snímků
- Integrace loggeru - Protokolování výkonu
Doporučená implementace pro vaši aplikaci Node.js
Pro analýzu snímků haldy:
- Instalace v8-profiler-next pro generování snímků
- Použijte cpupro pro analýzu vygenerovaných snímků
- Implementujte monitorovací prahy podobné našemu monitor-server.js
- Nastavení automatického čištění správa úložiště snímků
- Vytvořit obslužné rutiny signálů pro profilování na vyžádání v produkčním prostředí
Pro profilování CPU:
- Generování profilů CPU během období vysokého zatížení
- Analyzujte pomocí cpupro identifikovat úzká hrdla
- Zaměřte se na horké stezky a optimalizační příležitosti
- Monitor před/po vylepšení výkonu
[!VAROVÁNÍ] Generování snímků haldy a profilů CPU může ovlivnit výkon. Doporučujeme implementovat omezení a profilování povolit pouze při zkoumání konkrétních problémů nebo během intervalů údržby.
Integrace s naším monitorováním výroby
Naše nástroje pro profilování se integrují s naší širší strategií monitorování:
- Automatické spouštění na základě prahových hodnot paměti/CPU
- Integrace upozornění když jsou zjištěny problémy s výkonem
- Historická analýza sledovat trendy výkonnosti v čase
- Korelace s metrikami aplikace pro komplexní ladění
Tento přístup nám pomohl identifikovat a vyřešit úniky paměti, optimalizovat cesty k aktivnímu kódu a udržovat stabilní výkon v našem produkčním prostředí Node.js.
Zabezpečení produkční infrastruktury Node.js
Pro naši produkční infrastrukturu Node.js implementujeme komplexní zabezpečení prostřednictvím automatizace Ansible. Tyto postupy platí pro všechny aplikace Node.js:
Zabezpečení na úrovni systému pro produkční prostředí Node.js
Naše implementace v Ansible: ansible/playbooks/security.yml
Naše klíčová bezpečnostní opatření pro produkční prostředí Node.js:
- Výměna zakázána aby se zabránilo zápisu citlivých dat na disk
- Výpisy jádra zakázány aby se zabránilo výpisům paměti obsahujícím citlivé informace
- Úložiště USB zablokováno aby se zabránilo neoprávněnému přístupu k datům
- Ladění parametrů jádra pro bezpečnost i výkon
[!VAROVÁNÍ] Při implementaci osvědčených postupů pro nasazení Node.js v produkčním prostředí může zakázání swapu způsobit ukončení z důvodu nedostatku paměti, pokud vaše aplikace překročí dostupnou paměť RAM. Využití paměti pečlivě monitorujeme a naše servery dimenzujeme odpovídajícím způsobem.
Zabezpečení aplikací pro Node.js
Redakce našich polí protokolu: helpers/logger.js
Z protokolů odstraňujeme citlivá pole, včetně hesel, tokenů, klíčů API a osobních údajů. To chrání soukromí uživatelů a zároveň zachovává možnosti ladění v jakémkoli produkčním prostředí Node.js.
Automatizace zabezpečení infrastruktury
Naše kompletní nastavení Ansible pro produkci Node.js:
Náš bezpečnostní obsah
Zjistěte více o našem bezpečnostním přístupu:
- Nejlepší společnosti provádějící bezpečnostní audit
- Quantum Safe šifrovaný e-mail
- Proč zabezpečení e-mailů s otevřeným zdrojovým kódem
Architektura databáze pro aplikace Node.js
Používáme hybridní databázový přístup optimalizovaný pro naše Node.js aplikace. Tyto vzory lze přizpůsobit pro jakoukoli Node.js aplikaci:
Implementace SQLite pro produkční prostředí Node.js
Co používáme:
Naše konfigurace: ansible/playbooks/sqlite.yml
V našich Node.js aplikacích používáme SQLite pro uživatelsky specifická data, protože poskytuje:
- Izolace dat na uživatele/nájemce
- Lepší výkon pro dotazy jednoho uživatele
- Zjednodušené zálohování a migrace
- Snížená složitost ve srovnání se sdílenými databázemi
Tento vzor funguje dobře pro SaaS aplikace, multi-tenant systémy nebo jakoukoli aplikaci Node.js, která vyžaduje izolaci dat.
Implementace MongoDB pro produkční prostředí Node.js
Co používáme:
Naše implementace nastavení: helpers/setup-mongoose.js
Naše konfigurace: config/mongoose.js
V našem produkčním prostředí Node.js používáme MongoDB pro aplikační data, protože poskytuje:
- Flexibilní schéma pro vyvíjející se datové struktury
- Lepší výkon pro složité dotazy
- Horizontální škálování schopnosti
- Bohatý dotazovací jazyk
[!NOTE] Náš hybridní přístup optimalizuje náš specifický případ použití. Prostudujte si skutečné vzorce využití databáze v kódové základně, abyste zjistili, zda tento přístup vyhovuje potřebám vaší aplikace Node.js.
Zpracování úloh na pozadí produkčního prostředí Node.js
Naši architekturu úloh na pozadí jsme postavili kolem Bree pro spolehlivé nasazení Node.js v produkčním prostředí. To platí pro jakoukoli aplikaci Node.js, která vyžaduje zpracování na pozadí:
Nastavení našeho serveru Bree pro produkční účely
Naše hlavní implementace: bree.js
Naše nasazení Ansible: ansible/playbooks/bree.yml
Příklady produkčních prací
Monitorování zdraví: jobs/check-pm2.js
Automatizace čištění: jobs/cleanup-tmp.js
Všechny naše práce: Prohlédněte si náš kompletní adresář pracovních nabídek
Tyto vzory platí pro jakoukoli aplikaci Node.js, která potřebuje:
- Naplánované úlohy (zpracování dat, reporty, čištění)
- Zpracování na pozadí (změna velikosti obrázků, odesílání e-mailů, import dat)
- Monitorování a údržba zdraví
- Využití pracovních vláken pro úlohy náročné na CPU
Naše vzory plánování úloh pro produkční prostředí Node.js
Prostudujte si naše skutečné vzorce plánování úloh v našem adresáři pracovních nabídek, abyste pochopili:
- Jak implementujeme plánování podobné cronu v produkčním prostředí Node.js
- Naše logika pro zpracování chyb a opakování pokusů
- Jak používáme pracovní vlákna pro úlohy náročné na CPU
Automatizovaná údržba produkčních aplikací Node.js
Pro prevenci běžných problémů s produkčním prostředím Node.js implementujeme proaktivní údržbu. Tyto postupy platí pro jakoukoli aplikaci Node.js:
Naše implementace úklidu
Zdroj: jobs/cleanup-tmp.js
Naše automatizovaná údržba produkčních aplikací Node.js se zaměřuje na:
- Dočasné soubory starší než 24 hodin
- Soubory protokolu nad rámec limitů uchovávání
- Soubory mezipaměti a dočasná data
- Nahrané soubory které již nejsou potřeba
- Snímky haldy z ladění výkonu
Tyto vzory platí pro jakoukoli aplikaci Node.js, která generuje dočasné soubory, protokoly nebo data v mezipaměti.
Správa diskového prostoru pro produkční prostředí Node.js
Naše monitorovací prahové hodnoty: helpers/monitor-server.js
- Limity front pro zpracování na pozadí
- 75% využití disku varovný práh
- Automatické čištění když jsou překročeny prahové hodnoty
Automatizace údržby infrastruktury
Naše automatizace Ansible pro produkci Node.js:
Průvodce implementací produkčního nasazení Node.js
Prostudujte si náš skutečný kód pro osvědčené postupy v produkčním prostředí
Začněte s těmito klíčovými soubory pro nastavení produkčního prostředí Node.js:
- Konfigurace:
config/index.js
- Monitorování:
helpers/monitor-server.js
- Ošetření chyb:
helpers/is-code-bug.js
- Protokolování:
helpers/logger.js
- Stav procesu:
jobs/check-pm2.js
Učte se z našich blogových příspěvků
Naše technické implementační průvodce pro produkční prostředí Node.js:
- Ekosystém balíčků NPM
- Budování platebních systémů
- Implementace ochrany osobních údajů v e-mailu
- Kontaktní formuláře v JavaScriptu
- Integrace e-mailů s React
Automatizace infrastruktury pro produkční prostředí Node.js
Naše playbooky Ansible k nastudování pro produkční nasazení Node.js:
Naše případové studie
Naše implementace v podniku:
- Případová studie Linux Foundation
- Případová studie kanonického Ubuntu
- Přeposílání e-mailů absolventům
Závěr: Nejlepší postupy pro nasazení Node.js v produkčním prostředí
Naše produkční infrastruktura Node.js ukazuje, že aplikace Node.js mohou dosáhnout spolehlivosti podnikové úrovně prostřednictvím:
- Osvědčené možnosti hardwaru (AMD Ryzen pro optimalizaci výkonu jednoho jádra na 573 %)
- Ověřený monitoring produkce Node.js se specifickými prahovými hodnotami a automatizovanými odpověďmi
- Inteligentní klasifikace chyb pro zlepšení reakce na incidenty v produkčním prostředí
- Pokročilé ladění výkonu s v8-profiler-next a cpupro pro prevenci OOM
- Komplexní posílení zabezpečení prostřednictvím automatizace Ansible
- Hybridní databázová architektura optimalizováno pro potřeby aplikace
- Automatizovaná údržba aby se předešlo běžným problémům s produkcí Node.js
Klíčové ponaučení: Místo obecných osvědčených postupů si prostudujte naše implementační soubory a příspěvky na blogu. Naše kódová základna poskytuje reálné vzory pro produkční nasazení Node.js, které lze přizpůsobit pro jakoukoli aplikaci Node.js – webové aplikace, API, mikroslužby nebo služby na pozadí.
Kompletní seznam zdrojů pro produkční prostředí Node.js
Naše základní implementační soubory
- Hlavní konfigurace
- Závislosti balíčků
- Monitorování serveru
- Klasifikace chyb
- Systém protokolování
- Kontroly stavu PM2
- Automatizované čištění
Naše implementace serverů
Automatizace naší infrastruktury
Naše technické příspěvky na blogu
- Analýza ekosystému NPM
- Implementace platebního systému
- Technická příručka k ochraně osobních údajů v e-mailu
- Kontaktní formuláře v JavaScriptu
- Integrace e-mailů s React
- Průvodce řešením s vlastním hostováním