Sobes.tech
Назад к вопросам
Junior — Middle
76

Каким образом можно определить количество оставшихся узлов в распределённой системе на базе Node.js?

Ответ от нейросети

sobes.tech AI

В распределённой системе на базе Node.js для определения количества оставшихся (активных) узлов обычно используют механизмы обнаружения и мониторинга состояния узлов. Основные подходы:

  1. Heartbeat (сигналы жизни) — каждый узел периодически отправляет сигнал (heartbeat) в центральный сервис или в распределённое хранилище. Отсутствие сигнала в течение заданного времени означает, что узел недоступен.

  2. Использование сервисов обнаружения (Service Discovery) — например, Consul, Etcd или Zookeeper, где узлы регистрируются при запуске и снимаются при остановке. Подсчёт зарегистрированных узлов даёт количество активных.

  3. Использование кластерных библиотек для Node.js — например, node-discover или socket.io с механизмами пинга и отключения.

Пример с использованием простого heartbeat:

const nodes = new Map(); // id узла -> timestamp последнего сигнала

// При получении heartbeat от узла
function onHeartbeat(nodeId) {
  nodes.set(nodeId, Date.now());
}

// Функция для подсчёта активных узлов
function countActiveNodes(timeout = 30000) { // 30 секунд
  const now = Date.now();
  let count = 0;
  for (const lastSeen of nodes.values()) {
    if (now - lastSeen < timeout) {
      count++;
    }
  }
  return count;
}

Таким образом, количество активных узлов — это количество узлов, от которых недавно пришёл сигнал жизни.