Як оптимізувати виробничу інфраструктуру Node.js: найкращі практики у 2025

Найкращі практики розгортання Node.js у продакшені з нашої перевіреної інфраструктури, яка щодня обробляє мільйони запитів.

У Forward Email ми роками вдосконалювали наше робоче середовище Node.js. Цей вичерпний посібник розповідає про наші перевірені часом найкращі практики розгортання Node.js у робочому середовищі, зосереджуючись на оптимізації продуктивності, моніторингу та уроках, які ми отримали, масштабуючи Node.js-застосунки для обробки мільйонів щоденних транзакцій.

Наша революція в оптимізації продуктивності одного ядра на 573%

Коли ми перейшли з процесорів Intel на процесори AMD Ryzen, ми досягли Покращення продуктивності на 573% у наших Node.js-додатках. Це була не просто незначна оптимізація — вона фундаментально змінила роботу наших Node.js-додатків у продакшені та демонструє важливість оптимізації продуктивності одного ядра для будь-якого Node.js-додатку.

[!ПОРАДА] Для найкращих практик розгортання Node.js у продакшені вибір обладнання є критично важливим. Ми спеціально обрали хостинг DataPacket через їхню доступність AMD Ryzen, оскільки одноядерна продуктивність є критично важливою для Node.js-застосунків, оскільки виконання JavaScript є однопотоковим.

Чому оптимізація продуктивності одного ядра важлива для Node.js

Результат нашої міграції з Intel на AMD Ryzen:

  • Покращення продуктивності на 573% в обробці запитів (задокументовано в Проблема №1519 на нашій сторінці стану на GitHub)
  • Усунуто затримки обробки до майже миттєвих відповідей (згаданих у Проблема GitHub №298)
  • Краще співвідношення ціни та якості для виробничих середовищ Node.js
  • Покращений час відгуку на всіх кінцевих точках нашої програми

Приріст продуктивності був настільки значним, що тепер ми вважаємо процесори AMD Ryzen необхідними для будь-якого серйозного розгортання Node.js у продакшені, незалежно від того, чи запускаєте ви веб-додатки, API, мікросервіси чи будь-яке інше робоче навантаження Node.js.

Щоб дізнатися більше про наш вибір інфраструктури, перегляньте:

Налаштування робочого середовища Node.js: наш технологічний стек

Наші найкращі практики розгортання Node.js у продакшені включають обдуманий вибір технологій, заснований на багаторічному досвіді роботи. Ось що ми використовуємо та чому цей вибір застосовується до будь-якої програми Node.js:

Менеджер пакетів: pnpm для підвищення ефективності виробництва

Що ми використовуємо: pnpm (закріплена версія)

Ми обрали pnpm замість npm та yarn для нашого середовища Node.js, тому що:

  • Швидше встановлення у конвеєрах CI/CD
  • Ефективність використання дискового простору через жорстке посилання
  • Суворе вирішення залежностей що запобігає фантомним залежностям
  • Краща продуктивність у виробничих розгортаннях

[!ПРИМІТКА] Як частину наших найкращих практик розгортання Node.js у робочому середовищі, ми закріплюємо точні версії критично важливих інструментів, таких як pnpm, щоб забезпечити узгоджену роботу в усіх середовищах та на всіх комп'ютерах членів команди.

Деталі впровадження:

Веб-фреймворк: Koa для сучасного Node.js-продукції

Що ми використовуємо:

Ми обрали Koa замість Express для нашої виробничої інфраструктури Node.js через його сучасну підтримку async/await та чистішу структуру проміжного програмного забезпечення. Наш засновник Нік Бо зробив свій внесок як у Express, так і в Koa, надавши нам глибоке розуміння обох фреймворків для використання в виробничому середовищі.

Ці шаблони застосовуються незалежно від того, чи створюєте ви REST API, сервери GraphQL, веб-застосунки чи мікросервіси.

Наші приклади впровадження:

Обробка фонових завдань: Брі для надійності виробництва

Що ми використовуємо: bree планувальник

Ми створили та підтримуємо Bree, оскільки існуючі планувальники завдань не задовольняли наші потреби в підтримці робочих потоків та сучасних функціях JavaScript у виробничих середовищах Node.js. Це стосується будь-якої програми Node.js, яка потребує фонової обробки, запланованих завдань або робочих потоків.

Наші приклади впровадження:

Обробка помилок: @hapi/boom для надійності виробництва

Що ми використовуємо: @hapi/boom

Ми використовуємо @hapi/boom для структурованих відповідей на помилки в наших Node.js-програмних продуктах. Цей шаблон працює для будь-якої Node.js-програми, яка потребує послідовної обробки помилок.

Наші приклади впровадження:

Як моніторити Node.js-застосунки у продакшені

Наш підхід до моніторингу Node.js-застосунків у продакшені розвивався протягом років роботи над ними у великих масштабах. Ми впроваджуємо моніторинг на кількох рівнях, щоб забезпечити надійність та продуктивність будь-якого типу Node.js-застосунку.

Моніторинг продакшену Node.js на системному рівні

Наша основна реалізація: helpers/monitor-server.js

Що ми використовуємо: node-os-utils

Наші порогові значення моніторингу виробництва (з нашого фактичного коду виробництва):

  • Обмеження розміру купи 2 ГБ з автоматичними сповіщеннями
  • 25% використання пам'яті поріг попередження
  • 80% використання процесора поріг сповіщення
  • 75% використання диска поріг попередження

[!ПОПЕРЕДЖЕННЯ] Ці порогові значення працюють для нашої конкретної конфігурації обладнання. Під час впровадження моніторингу продакшену Node.js перегляньте нашу реалізацію monitor-server.js, щоб зрозуміти точну логіку та адаптувати значення для вашої конфігурації.

Моніторинг на рівні застосунків для Node.js Production

Наша класифікація помилок: helpers/is-code-bug.js

Цей помічник розрізняє:

  • Фактичні помилки коду що потребують негайної уваги
  • Помилки користувача що є очікуваною поведінкою
  • Збої зовнішніх служб що ми не можемо контролювати

Цей шаблон застосовується до будь-якої програми Node.js – веб-програм, API, мікросервісів або фонових служб.

Наша реалізація логування: helpers/logger.js

Ми впроваджуємо комплексне редагування полів для захисту конфіденційної інформації, зберігаючи при цьому корисні можливості налагодження в нашому робочому середовищі Node.js.

Моніторинг, специфічний для програми

Наші серверні реалізації:

Моніторинг черги: Ми реалізуємо обмеження черги 5 ГБ та 180-секундні тайм-аути для обробки запитів, щоб запобігти вичерпанню ресурсів. Ці шаблони застосовуються до будь-якої програми Node.js з чергами або фоновою обробкою.

Моніторинг продуктивності Node.js за допомогою перевірок справності PM2

Протягом багатьох років досвіду роботи ми вдосконалили налаштування нашого робочого середовища Node.js за допомогою PM2. Наші перевірки справності PM2 є важливими для підтримки надійності будь-якої програми Node.js.

Наша система перевірки стану PM2

Наша основна реалізація: jobs/check-pm2.js

Наш моніторинг продакшену Node.js з перевірками справності PM2 включає:

  • Курсує кожні 20 хвилин через планування cron
  • Потрібно щонайменше 15 хвилин безперебійної роботи перш ніж вважати процес здоровим
  • Перевіряє стан процесу та використання пам'яті
  • Автоматично перезапускає процеси, що завершилися невдачею
  • Запобігає перезапуску циклів через інтелектуальну перевірку стану здоров'я

[!CAUTION] For Node.js production deployment best practices, we require 15+ minutes uptime before considering a process healthy to avoid restart loops. This prevents cascading failures when processes are struggling with memory or other issues.

Наша виробнича конфігурація PM2

Налаштування нашої екосистеми: Вивчіть файли запуску нашого сервера для налаштування робочого середовища Node.js:

Ці шаблони застосовуються незалежно від того, чи використовуєте ви Express-додатки, сервери Koa, GraphQL API чи будь-який інший Node.js-додаток.

Автоматизоване розгортання PM2

Розгортання PM2: ansible/playbooks/node.yml

Ми автоматизуємо всю нашу налаштування PM2 за допомогою Ansible, щоб забезпечити узгоджене розгортання Node.js на всіх наших серверах.

Система обробки та класифікації виробничих помилок

Одним з наших найцінніших найкращих практик розгортання Node.js у продакшені є інтелектуальна класифікація помилок, яка застосовується до будь-якої програми Node.js:

Наша реалізація isCodeBug для продакшену

Джерело: helpers/is-code-bug.js

Цей помічник забезпечує інтелектуальну класифікацію помилок для Node.js-застосунків у продакшені для:

  • Пріоритетність реальних помилок через помилки користувачів
  • Покращення нашого реагування на інциденти зосереджуючись на реальних проблемах
  • Зменшення втоми від пильності від очікуваних помилок користувача
  • Краще зрозуміти проблеми, створені додатками, проти проблем, створених користувачами

Цей шаблон працює для будь-якої програми Node.js — незалежно від того, чи створюєте ви сайти електронної комерції, SaaS-платформи, API чи мікросервіси.

Інтеграція з нашими виробничими журналами

Інтеграція нашого логера: helpers/logger.js

Наш лігувальник використовує isCodeBug щоб визначити рівні сповіщень та редагування полів, гарантуючи отримання сповіщень про реальні проблеми, одночасно фільтруючи шум у нашому робочому середовищі Node.js.

Дізнайтеся більше про наші шаблони обробки помилок:

Розширене налагодження продуктивності за допомогою v8-profiler-next та cpupro

Ми використовуємо розширені інструменти профілювання для аналізу знімків купи даних та налагодження проблем OOM (недостатньо пам'яті), вузьких місць у продуктивності та проблем із пам'яттю Node.js у нашому робочому середовищі. Ці інструменти є важливими для будь-якої програми Node.js, яка має витоки пам'яті або проблеми з продуктивністю.

Наш підхід до профілювання для Node.js Production

Інструменти, які ми рекомендуємо:

  • v8-profiler-next - Для створення знімків купи даних та профілів процесора
  • cpupro - Для аналізу профілів процесора та знімків купи даних

[!ПОРАДА] Ми використовуємо v8-profiler-next та cpupro разом для створення повноцінного робочого процесу налагодження продуктивності для наших Node.js-застосунків. Це поєднання допомагає нам виявляти витоки пам'яті, вузькі місця в продуктивності та оптимізувати наш продакшн-код.

Як ми реалізуємо аналіз знімків купи

Наша реалізація моніторингу: helpers/monitor-server.js

Наш моніторинг виробництва включає автоматичне створення знімків купи пам'яті (snapshot) у разі перевищення порогових значень пам'яті. Це допомагає нам налагоджувати проблеми OOM, перш ніж вони спричинять збої програми.

Ключові моделі впровадження:

  • Автоматичні знімки коли розмір купи перевищує поріг 2 ГБ
  • Профілювання на основі сигналів для аналізу на вимогу у виробництві
  • Політики зберігання для керування сховищем знімків
  • Інтеграція з нашими завданнями з прибирання для автоматизованого обслуговування

Робочий процес налагодження продуктивності

Вивчіть наше фактичне впровадження:

Для аналізу знімків купи даних:

  1. Встановлення v8-profiler-next для створення знімків
  2. Використовуйте процесор Pro для аналізу згенерованих знімків
  3. Впроваджуйте порогові значення моніторингу схожий на наш monitor-server.js
  4. Налаштуйте автоматичне очищення керувати сховищем знімків
  5. Створення обробників сигналів для профілювання на вимогу у виробництві

Для профілювання процесора:

  1. Генерація профілів процесора під час періодів високого навантаження
  2. Аналізуйте за допомогою cpupro виявити вузькі місця
  3. Зосередьтеся на гарячих шляхах та можливості оптимізації
  4. Монітор до/після покращення продуктивності

[!ПОПЕРЕДЖЕННЯ] Створення знімків купи та профілів процесора може вплинути на продуктивність. Ми рекомендуємо впроваджувати дроселювання та вмикати профілювання лише під час дослідження певних проблем або під час періодів обслуговування.

Інтеграція з нашим моніторингом виробництва

Наші інструменти профілювання інтегруються з нашою ширшою стратегією моніторингу:

  • Автоматичне спрацьовування на основі порогів пам'яті/процесора
  • Інтеграція сповіщень коли виявлено проблеми з продуктивністю
  • Історичний аналіз відстежувати тенденції ефективності з плином часу
  • Кореляція з метриками програми для комплексного налагодження

Такий підхід допоміг нам виявити та виправити витоки пам'яті, оптимізувати шляхи гарячого коду та підтримувати стабільну продуктивність у нашому робочому середовищі Node.js.

Безпека виробничої інфраструктури Node.js

Ми впроваджуємо комплексну безпеку для нашої виробничої інфраструктури Node.js за допомогою автоматизації Ansible. Ці методи застосовуються до будь-якої програми Node.js:

Безпека на системному рівні для Node.js Production

Наша реалізація Ansible: ansible/playbooks/security.yml

Наші ключові заходи безпеки для виробничих середовищ Node.js:

  • Обмін вимкнено щоб запобігти запису конфіденційних даних на диск
  • Дампи основних даних вимкнено щоб запобігти створенню дампів пам'яті, що містять конфіденційну інформацію
  • USB-накопичувач заблоковано щоб запобігти несанкціонованому доступу до даних
  • Налаштування параметрів ядра як для безпеки, так і для продуктивності

[!ПОПЕРЕДЖЕННЯ] Під час впровадження найкращих практик розгортання Node.js у продакшені, вимкнення swap може призвести до завершення роботи через нестачу пам'яті, якщо ваша програма перевищує обсяг доступної оперативної пам'яті. Ми ретельно контролюємо використання пам'яті та відповідно підбираємо розмір наших серверів.

Безпека застосунків для Node.js

Редагування полів журналу: helpers/logger.js

Ми видаляємо конфіденційні поля з журналів, включаючи паролі, токени, ключі API та особисту інформацію. Це захищає конфіденційність користувачів, зберігаючи при цьому можливості налагодження в будь-якому робочому середовищі Node.js.

Автоматизація безпеки інфраструктури

Наше повне налаштування Ansible для продакшену Node.js:

Наш контент щодо безпеки

Дізнайтеся більше про наш підхід до безпеки:

Архітектура бази даних для Node.js-застосунків

Ми використовуємо гібридний підхід до баз даних, оптимізований для наших Node.js-додатків. Ці шаблони можна адаптувати для будь-якого Node.js-додатку:

Реалізація SQLite для Node.js Production

Що ми використовуємо:

Наша конфігурація: ansible/playbooks/sqlite.yml

Ми використовуємо SQLite для даних, специфічних для користувача, у наших Node.js-додатках, оскільки він надає:

  • Ізоляція даних на користувача/орендаря
  • Краща продуктивність для запитів одного користувача
  • Спрощене резервне копіювання та міграція
  • Зменшена складність порівняно зі спільними базами даних

Цей шаблон добре працює для SaaS-застосунків, багатокористувацьких систем або будь-якого Node.js-застосунку, який потребує ізоляції даних.

Реалізація MongoDB для Node.js Production

Що ми використовуємо:

Наша реалізація налаштування: helpers/setup-mongoose.js

Наша конфігурація: config/mongoose.js

Ми використовуємо MongoDB для даних додатків у нашому робочому середовищі Node.js, оскільки вона забезпечує:

  • Гнучка схема для структур даних, що розвиваються
  • Краща продуктивність для складних запитів
  • Горизонтальне масштабування можливості
  • Багата мова запитів

[!ПРИМІТКА] Наш гібридний підхід оптимізовано для нашого конкретного випадку використання. Вивчіть наші фактичні моделі використання бази даних у кодовій базі, щоб зрозуміти, чи відповідає цей підхід потребам вашої програми Node.js.

Обробка фонових завдань у Node.js Production

Ми побудували нашу архітектуру фонових завдань навколо Bree для надійного розгортання Node.js у продакшені. Це стосується будь-якої програми Node.js, яка потребує фонової обробки:

Наша конфігурація сервера Bree для виробництва

Наша основна реалізація: bree.js

Наше розгортання Ansible: ansible/playbooks/bree.yml

Приклади виробничих вакансій

Моніторинг здоров'я: jobs/check-pm2.js

Автоматизація очищення: jobs/cleanup-tmp.js

Всі наші вакансії: Перегляньте наш повний каталог вакансій

Ці шаблони застосовуються до будь-якої програми Node.js, якій потрібно:

  • Заплановані завдання (обробка даних, звіти, очищення)
  • Фонова обробка (зміна розміру зображення, надсилання електронної пошти, імпорт даних)
  • Моніторинг та підтримка здоров'я
  • Використання робочого потоку для завдань, що ресурсомісткі для процесора

Наші шаблони планування завдань для Node.js Production

Вивчіть наші фактичні схеми планування робіт у нашому каталозі вакансій, щоб зрозуміти:

  • Як ми реалізуємо планування, подібне до cron, у продакшені Node.js
  • Наша логіка обробки помилок та повторних спроб
  • Як ми використовуємо робочі потоки для завдань, що ресурсомісткі для процесора

Автоматизоване обслуговування для продакшн-застосунків Node.js

Ми впроваджуємо проактивне обслуговування, щоб запобігти поширеним проблемам у продакшені Node.js. Ці шаблони застосовуються до будь-якої програми Node.js:

Наше впровадження очищення

Джерело: jobs/cleanup-tmp.js

Наша автоматизована підтримка для продакшн-застосунків Node.js спрямована на:

  • Тимчасові файли старше 24 годин
  • Файли журналів за межами лімітів зберігання
  • Файли кешу та тимчасові дані
  • Завантажені файли які більше не потрібні
  • Знімки купи даних від налагодження продуктивності

Ці шаблони застосовуються до будь-якої програми Node.js, яка генерує тимчасові файли, журнали або кешовані дані.

Керування дисковим простором для Node.js Production

Наші пороги моніторингу: helpers/monitor-server.js

  • Обмеження черги для фонової обробки
  • 75% використання диска поріг попередження
  • Автоматичне очищення коли перевищено порогові значення

Автоматизація обслуговування інфраструктури

Наша автоматизація Ansible для Node.js продакшену:

Посібник з впровадження розгортання Node.js у продакшені

Вивчіть наш фактичний код для найкращих практик виробництва

Почніть з цих ключових файлів для налаштування робочого середовища Node.js:

  1. Конфігурація: config/index.js
  2. Моніторинг: helpers/monitor-server.js
  3. Обробка помилок: helpers/is-code-bug.js
  4. Ведення журналу: helpers/logger.js
  5. Стан процесу: jobs/check-pm2.js

Дізнайтеся з наших публікацій у блозі

Наші посібники з технічної реалізації для Node.js production:

Автоматизація інфраструктури для Node.js Production

Наші посібники з Ansible для вивчення при розгортанні Node.js у продакшені:

Наші тематичні дослідження

Наші впровадження на підприємствах:

Висновок: Найкращі практики розгортання Node.js у продакшені

Наша виробнича інфраструктура Node.js демонструє, що Node.js-додатки можуть досягти надійності корпоративного рівня завдяки:

  • Перевірений вибір обладнання (AMD Ryzen для оптимізації продуктивності одного ядра на 573%)
  • Перевірений у боях моніторинг продакшену Node.js з певними порогами та автоматичними відповідями
  • Розумна класифікація помилок покращити реагування на інциденти у виробничому середовищі
  • Розширене налагодження продуктивності з v8-profiler-next та cpupro для запобігання OOM
  • Комплексне посилення безпеки через автоматизацію Ansible
  • Гібридна архітектура бази даних оптимізовано для потреб застосування
  • Автоматизоване технічне обслуговування щоб запобігти поширеним проблемам у продакшені Node.js

Ключовий висновок: Вивчайте наші файли фактичної реалізації та дописи в блозі, а не дотримуйтесь загальних рекомендацій. Наша кодова база надає реальні шаблони для розгортання Node.js у продакшені, які можна адаптувати для будь-якої програми Node.js – веб-додатків, API, мікросервісів або фонових сервісів.

Повний список ресурсів для Node.js Production

Наші основні файли впровадження

Наші серверні реалізації

Автоматизація нашої інфраструктури

Наші технічні дописи в блозі

Наші приклади діяльності з підприємств