Как оптимизировать производственную инфраструктуру Node.js: лучшие практики в 2025
Лучшие практики развертывания Node.js в производственной среде на основе нашей проверенной инфраструктуры, которая ежедневно обрабатывает миллионы запросов.
В Forward Email мы потратили годы на совершенствование нашей производственной среды Node.js. Это всеобъемлющее руководство делится нашими проверенными в бою лучшими практиками развертывания Node.js в производстве, уделяя особое внимание оптимизации производительности, мониторингу и урокам, которые мы извлекли из масштабирования приложений Node.js для обработки миллионов ежедневных транзакций.
Наша революция в оптимизации производительности одного ядра на 573%
Когда мы перешли с процессоров Intel на AMD Ryzen, мы добились 573% улучшение производительности в наших приложениях Node.js. Это была не просто незначительная оптимизация — она кардинально изменила то, как наши приложения Node.js работают в производстве, и продемонстрировала важность оптимизации производительности одного ядра для любого приложения Node.js.
[!TIP] Для передовых методов развертывания Node.js в производстве выбор оборудования имеет решающее значение. Мы специально выбрали хостинг DataPacket из-за его доступности AMD Ryzen, поскольку производительность одного ядра имеет решающее значение для приложений Node.js, поскольку выполнение JavaScript является однопоточным.
Почему оптимизация производительности одного ядра имеет значение для Node.js
Результатом нашего перехода с Intel на AMD Ryzen стали:
- 573% улучшение производительности в обработке запроса (задокументировано в GitHub Issue #1519 нашей страницы статуса)
- Устранены задержки обработки к почти мгновенным ответам (упомянутым в Проблема GitHub № 298)
- Лучшее соотношение цены и качества для производственных сред Node.js
- Улучшенное время отклика во всех конечных точках наших приложений
Повышение производительности оказалось настолько значительным, что теперь мы считаем процессоры AMD Ryzen необходимыми для любого серьезного развертывания Node.js в производственной среде, независимо от того, запускаете ли вы веб-приложения, API, микросервисы или любую другую рабочую нагрузку Node.js.
Связанный контент
Более подробную информацию о наших вариантах инфраструктуры можно найти здесь:
- Лучший сервис пересылки электронной почты - Сравнение производительности
- Решение с самостоятельным размещением - Рекомендации по оборудованию
Настройка производственной среды Node.js: наш технологический стек
Наши лучшие практики развертывания Node.js в производстве включают продуманный выбор технологий, основанный на многолетнем опыте производства. Вот что мы используем и почему эти выборы применимы к любому приложению Node.js:
Менеджер пакетов: pnpm для эффективности производства
Что мы используем: pnpm
(закрепленная версия)
Для настройки нашей производственной среды Node.js мы выбрали pnpm вместо npm и yarn по следующим причинам:
- Более быстрое время установки в конвейерах CI/CD
- Эффективность использования дискового пространства через жесткую привязку
- Строгое разрешение зависимостей что предотвращает фантомные зависимости
- Лучшая производительность в производственных развертываниях
[!ПРИМЕЧАНИЕ] В рамках наших лучших практик развертывания Node.js в производстве мы закрепляем точные версии критически важных инструментов, таких как pnpm, чтобы обеспечить единообразное поведение во всех средах и на всех компьютерах членов команды.
Подробности реализации:
Веб-фреймворк: Koa для современного производства Node.js
Что мы используем:
Мы выбрали Koa вместо Express для нашей производственной инфраструктуры Node.js из-за его современной поддержки async/await и более чистой композиции промежуточного ПО. Наш основатель Ник Бо внес вклад как в Express, так и в Koa, дав нам глубокое понимание обоих фреймворков для использования в производстве.
Эти шаблоны применяются независимо от того, создаете ли вы REST API, серверы GraphQL, веб-приложения или микросервисы.
Наши примеры внедрения:
Обработка фоновых заданий: Bree для надежности производства
Что мы используем: bree
планировщик
Мы создали и поддерживаем Bree, поскольку существующие планировщики заданий не удовлетворяли нашим потребностям в поддержке рабочих потоков и современных функциях JavaScript в производственных средах Node.js. Это относится к любому приложению Node.js, которому требуются фоновая обработка, запланированные задачи или рабочие потоки.
Наши примеры внедрения:
- Настройка сервера Bree
- Все наши определения работы
- работа по проверке здоровья PM2
- Реализация задания по очистке
Обработка ошибок: @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% использования диска порог предупреждения
[!WARNING] Эти пороговые значения работают для нашей конкретной конфигурации оборудования. При внедрении мониторинга производства Node.js ознакомьтесь с нашей реализацией monitor-server.js, чтобы понять точную логику и адаптировать значения для вашей настройки.
Мониторинг на уровне приложений для производства Node.js
Наша классификация ошибок: 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, API GraphQL или любые другие приложения 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
Инструменты, которые мы рекомендуем:
v8-profiler-next
- Для создания снимков кучи и профилей ЦПcpupro
- Для анализа профилей ЦП и снимков кучи
[!TIP] Мы используем v8-profiler-next и cpupro вместе, чтобы создать полный рабочий процесс отладки производительности для наших приложений Node.js. Эта комбинация помогает нам выявлять утечки памяти, узкие места производительности и оптимизировать наш производственный код.
Как мы реализуем анализ моментальных снимков кучи
Реализация нашего мониторинга: helpers/monitor-server.js
Наш производственный мониторинг включает автоматическую генерацию моментальных снимков кучи при превышении пороговых значений памяти. Это помогает нам отлаживать проблемы OOM до того, как они приведут к сбоям приложения.
Основные модели реализации:
- Автоматические снимки когда размер кучи превышает порог в 2 ГБ
- Профилирование на основе сигналов для анализа по требованию в производстве
- Политика хранения для управления хранилищем моментальных снимков
- Интеграция с нашими работами по уборке для автоматизированного обслуживания
Рабочий процесс отладки производительности
Изучите нашу фактическую реализацию:
- Реализация сервера мониторинга - Мониторинг кучи и создание моментальных снимков
- Работа по уборке - Сохранение и очистка моментальных снимков
- Интеграция регистратора - Регистрация производительности
Рекомендуемая реализация для вашего приложения Node.js
Для анализа моментального снимка кучи:
- Установить v8-profiler-next для создания моментальных снимков
- Использовать cpupro для анализа созданных снимков
- Внедрить пороговые значения мониторинга похоже на наш monitor-server.js
- Настройте автоматическую очистку для управления хранилищем моментальных снимков
- Создать обработчики сигналов для профилирования по требованию в производстве
Для профилирования ЦП:
- Генерация профилей ЦП в периоды высокой нагрузки
- Анализ с помощью cpupro для выявления узких мест
- Сосредоточьтесь на горячих путях и возможности оптимизации
- Монитор до/после улучшения производительности
[!WARNING] Создание снимков кучи и профилей ЦП может повлиять на производительность. Мы рекомендуем реализовать регулирование и включать профилирование только при расследовании конкретных проблем или во время периодов обслуживания.
Интеграция с нашим производственным мониторингом
Наши инструменты профилирования интегрируются с нашей более широкой стратегией мониторинга:
- Автоматическое срабатывание на основе пороговых значений памяти/ЦП
- Интеграция оповещений при обнаружении проблем с производительностью
- Исторический анализ отслеживать тенденции производительности с течением времени
- Корреляция с метриками приложения для комплексной отладки
Такой подход помог нам выявить и устранить утечки памяти, оптимизировать горячие пути кода и поддерживать стабильную производительность в нашей производственной среде Node.js.
Безопасность производственной инфраструктуры Node.js
Мы реализуем комплексную безопасность для нашей производственной инфраструктуры Node.js с помощью автоматизации Ansible. Эти практики применимы к любому приложению Node.js:
Безопасность на системном уровне для производства Node.js
Наша реализация Ansible: ansible/playbooks/security.yml
Наши основные меры безопасности для производственных сред Node.js:
- Подкачка отключена для предотвращения записи конфиденциальных данных на диск
- Дампы ядра отключены для предотвращения дампов памяти, содержащих конфиденциальную информацию
- USB-накопитель заблокирован для предотвращения несанкционированного доступа к данным
- Настройка параметров ядра для безопасности и производительности
[!WARNING] При внедрении передовых методов развертывания Node.js в производство отключение подкачки может привести к нехватке памяти, если ваше приложение превышает доступный объем ОЗУ. Мы тщательно отслеживаем использование памяти и соответствующим образом устанавливаем размеры наших серверов.
Безопасность приложений Node.js
Редактирование поля нашего журнала: helpers/logger.js
Мы удаляем конфиденциальные поля из журналов, включая пароли, токены, ключи API и личную информацию. Это защищает конфиденциальность пользователей, сохраняя при этом возможности отладки в любой производственной среде Node.js.
Автоматизация безопасности инфраструктуры
Наша полная настройка Ansible для производства Node.js:
Наш контент по безопасности
Узнайте больше о нашем подходе к обеспечению безопасности:
- Лучшие компании по аудиту безопасности
- Электронная почта с квантовым безопасным шифрованием
- Почему безопасность электронной почты с открытым исходным кодом
Архитектура базы данных для приложений Node.js
Мы используем гибридный подход к базе данных, оптимизированный для наших приложений Node.js. Эти шаблоны можно адаптировать для любого приложения Node.js:
Реализация SQLite для производства Node.js
Что мы используем:
Наша конфигурация: ansible/playbooks/sqlite.yml
Мы используем SQLite для пользовательских данных в наших приложениях Node.js, поскольку он обеспечивает:
- Изоляция данных на пользователя/арендатора
- Лучшая производительность для однопользовательских запросов
- Упрощенное резервное копирование и миграция
- Уменьшенная сложность по сравнению с общими базами данных
Этот шаблон хорошо подходит для SaaS-приложений, многопользовательских систем или любых приложений Node.js, которым требуется изоляция данных.
Реализация MongoDB для производства Node.js
Что мы используем:
Реализация нашей установки: helpers/setup-mongoose.js
Наша конфигурация: config/mongoose.js
Мы используем MongoDB для данных приложений в нашей производственной среде Node.js, поскольку она обеспечивает:
- Гибкая схема для развивающихся структур данных
- Лучшая производительность для сложных запросов
- Горизонтальное масштабирование возможности
- Богатый язык запросов
[!ПРИМЕЧАНИЕ] Наш гибридный подход оптимизируется для нашего конкретного варианта использования. Изучите наши фактические шаблоны использования базы данных в кодовой базе, чтобы понять, соответствует ли этот подход потребностям вашего приложения Node.js.
Обработка фоновых заданий производства Node.js
Мы построили нашу архитектуру фоновых заданий вокруг Bree для надежного развертывания Node.js production. Это применимо к любому приложению Node.js, которому требуется фоновая обработка:
Наша настройка сервера Bree для производства
Наша основная реализация: bree.js
Наше развертывание Ansible: ansible/playbooks/bree.yml
Примеры производственных работ
Мониторинг здоровья: jobs/check-pm2.js
Автоматизация очистки: jobs/cleanup-tmp.js
Все наши вакансии: Просмотрите наш полный каталог вакансий
Эти шаблоны применимы к любому приложению Node.js, которому необходимо:
- Запланированные задачи (обработка данных, отчеты, очистка)
- Фоновая обработка (изменение размера изображений, отправка электронной почты, импорт данных)
- Мониторинг и поддержание здоровья
- Использование рабочих потоков для задач, интенсивно использующих ЦП
Наши шаблоны планирования работ для производства Node.js
Изучите наши фактические шаблоны планирования работ в нашем каталоге вакансий, чтобы понять:
- Как мы реализуем планирование по принципу cron в производстве Node.js
- Наша логика обработки ошибок и повторных попыток
- Как мы используем рабочие потоки для задач, интенсивно использующих процессор
Автоматизированное обслуживание производственных приложений Node.js
Мы реализуем упреждающее обслуживание для предотвращения распространенных проблем производства Node.js. Эти шаблоны применимы к любому приложению Node.js:
Наша реализация очистки
Источник: jobs/cleanup-tmp.js
Наши автоматизированные задачи по обслуживанию производственных приложений Node.js:
- Временные файлы старше 24 часов
- Файлы журналов за пределами ограничений по хранению
- Кэш-файлы и временные данные
- Загруженные файлы которые больше не нужны
- Снимки кучи от отладки производительности
Эти шаблоны применимы к любому приложению Node.js, которое генерирует временные файлы, журналы или кэшированные данные.
Управление дисковым пространством для производства Node.js
Наши пороговые значения мониторинга: helpers/monitor-server.js
- Ограничения по очередям для фоновой обработки
- 75% использования диска порог предупреждения
- Автоматическая очистка при превышении пороговых значений
Автоматизация обслуживания инфраструктуры
Наша автоматизация Ansible для производства Node.js:
Руководство по внедрению развертывания Node.js в производство
Изучите наш реальный код для лучших практик производства
Начните с этих ключевых файлов для настройки производственной среды Node.js:
- Конфигурация:
config/index.js
- Мониторинг:
helpers/monitor-server.js
- Обработка ошибок:
helpers/is-code-bug.js
- Ведение журнала:
helpers/logger.js
- Состояние процесса:
jobs/check-pm2.js
Узнайте из наших сообщений в блоге
Наши технические руководства по внедрению для производства Node.js:
- Экосистема пакетов NPM
- Создание платежных систем
- Реализация конфиденциальности электронной почты
- Формы обратной связи JavaScript
- Интеграция электронной почты React
Автоматизация инфраструктуры для производства Node.js
Наши руководства по Ansible для изучения при развертывании Node.js в продакшене:
Наши практические исследования
Наши корпоративные внедрения:
- Пример использования Linux Foundation
- Исследование случая канонического Ubuntu
- Пересылка писем выпускникам
Заключение: лучшие практики развертывания 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
Наши основные файлы внедрения
- Основная конфигурация
- Зависимости пакетов
- Мониторинг сервера
- Классификация ошибок
- Система регистрации
- Проверка здоровья PM2
- Автоматическая очистка
Наши серверные реализации
Наша инфраструктурная автоматизация
Наши технические записи в блоге
- Анализ экосистемы NPM
- Внедрение платежной системы
- Техническое руководство по конфиденциальности электронной почты
- Формы обратной связи JavaScript
- Интеграция электронной почты React
- Руководство по самостоятельному размещению решений