Недавно я добавил некоторые возможности балансировки нагрузки к программному обеспечению, которое я написал. Это сетевое приложение, которое обрабатывает некоторые данные на основе входных данных из базы данных SQL. Поскольку хруст может быть довольно интенсивным, я добавил возможность запускать несколько экземпляров этого приложения на разных серверах для разделения нагрузки, но в настоящее время балансировка нагрузки выполняется вручную. Пользователь должен указать, какие экземпляры занимают какую часть входного домена.
Я хотел бы перенести это на следующий уровень и запрограммировать экземпляры для автоматического согласования погружения входных данных и распознавания, если один из них «исчезает» (произошел сбой или был выключен), чтобы оставшиеся экземпляры могут взять на себя нагрузку сбойного экземпляра.
Чтобы реализовать это, я рассматриваю возможность использования простого протокола сердцебиения между экземплярами, чтобы определить, кто в сети, а кто нет, и хотя это не очень сложно, я хотел бы знать, существуют ли какие-либо установленные протоколы сети сердцебиения (на основе UDP, TCP или обоих).
Очевидно, что это часто случается в сетевом мире с технологиями кластеризации, отработки отказа и высокой доступности, так что я думаю, в конце я хотел бы знать, если, возможно, существуют какие-либо установленные протоколы или алгоритмы, о которых мне следует знать или реализовать.
EDIT
Судя по ответам, похоже, что либо нет хорошо установленных протоколов сердцебиения, либо о них никто не знает (что может означать, что они не так хорошо установлены в конце концов), и в этом случае я просто собираюсь накатить свой.
Хотя ни один из ответов не дал того, что я искал конкретно, я собираюсь проголосовать за ответ Мэтта Дэвиса , поскольку он был самым близким, и он указал на хорошую идею использовать многоадресную рассылку.
Спасибо всем за потраченное время ~