Какие крупномасштабные проекты реализованы на Node.js?

«Какие крупномасштабные проекты реализованы на Node.js?» — вопрос из категории Node.js Core, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Node.js доказал свою эффективность в высоконагруженных продакшен-системах. Вот несколько известных кейсов:

  1. Netflix — использует Node.js для UI-рендеринга и API-слоя, обрабатывая миллионы запросов в день. Переход позволил сократить время запуска приложения с 40 минут до менее чем 1 минуты.
  2. PayPal — перевел фронтенд с Java на Node.js, что привело к удвоению количества запросов в секунду на сервер и сокращению количества строк кода почти вдвое.
  3. LinkedIn — мобильный бэкенд был переписан с Ruby on Rails на Node.js, что позволило сократить количество серверов с 30 до 3 при обслуживании того же объема трафика.
  4. Uber — использует Node.js для обработки миллионов запросов в реальном времени в своей системе диспетчеризации, ценя его за скорость, единообразие стека и способность к быстрому развертыванию.
  5. Walmart — выбрал Node.js для своего мобильного приложения и сайта, успешно выдержав нагрузку в 6 миллионов RPS (запросов в секунду) в Black Friday 2013.

Эти проекты демонстрируют сильные стороны Node.js: неблокирующий ввод-вывод для высокой конкурентности, единый язык (JavaScript) на клиенте и сервере и эффективное масштабирование. Для горизонтального масштабирования в Node.js часто используется модуль cluster:

const cluster = require('cluster');
const numCPUs = require('os').cpus().length;
const http = require('http');

if (cluster.isPrimary) {
  console.log(`Primary ${process.pid} is running`);
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
} else {
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('Hello from worker ' + process.pid);
  }).listen(8000);
  console.log(`Worker ${process.pid} started`);
}