Каким образом можно определить количество оставшихся узлов в распределённой системе на базе Node.js?
Ответ от нейросети
sobes.tech AI
В распределённой системе на базе Node.js для определения количества оставшихся (активных) узлов обычно используют механизмы обнаружения и мониторинга состояния узлов. Основные подходы:
-
Heartbeat (сигналы жизни) — каждый узел периодически отправляет сигнал (heartbeat) в центральный сервис или в распределённое хранилище. Отсутствие сигнала в течение заданного времени означает, что узел недоступен.
-
Использование сервисов обнаружения (Service Discovery) — например, Consul, Etcd или Zookeeper, где узлы регистрируются при запуске и снимаются при остановке. Подсчёт зарегистрированных узлов даёт количество активных.
-
Использование кластерных библиотек для 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;
}
Таким образом, количество активных узлов — это количество узлов, от которых недавно пришёл сигнал жизни.