Вопрос

Недавно я добавил некоторые возможности балансировки нагрузки в написанное мной программное обеспечение.Это сетевое приложение, которое выполняет некоторую обработку данных на основе входных данных, поступающих из базы данных SQL.Поскольку обработка может быть довольно интенсивной, я добавил возможность запускать несколько экземпляров этого приложения на разных серверах, чтобы разделить нагрузку, но в настоящее время балансировка нагрузки выполняется вручную.Пользователь должен указать, какие экземпляры какую часть входного домена занимают.

Я хотел бы перейти на следующий уровень и запрограммировать экземпляры на автоматическое согласование погружения входных данных и распознавание, если один из них «исчезает» (получил сбой или выключился), чтобы оставшиеся экземпляры могли принять от рабочей нагрузки отказавшего экземпляра.

Чтобы реализовать это, я рассматриваю возможность использования простого протокола пульса между экземплярами, чтобы определить, кто в сети, а кто нет, и хотя это не так уж сложно, я хотел бы знать, существуют ли какие-либо установленные сетевые протоколы пульса (на основе UDP, TCP или оба).

Очевидно, что это часто происходит в сетевом мире с технологиями кластеризации, отказоустойчивости и высокой доступности, поэтому я думаю, в конце концов, мне хотелось бы знать, возможно, существуют ли какие-либо устоявшиеся протоколы или алгоритмы, о которых мне следует знать или реализовать.

РЕДАКТИРОВАТЬ

Судя по ответам, кажется, что либо не существует хорошо установленных протоколов сердцебиения, либо о них никто не знает (что означает, что они в конце концов не так хорошо известны), и в этом случае я просто собираюсь начать мой собственный.

Хотя ни один из ответов не дал того, что я искал конкретно, я собираюсь проголосовать за Ответ Мэтта Дэвиса так как это было самое близкое и он указал на хорошую идею использовать многоадресную рассылку.

Спасибо всем за уделенное время~

Это было полезно?

Решение

Распределенное интерактивное моделирование (DIS), который определен в IEEE Стандарт 1278 использует контрольный сигнал по умолчанию в 5 секунд через широковещательную рассылку UDP.Контрольный сигнал DIS по существу представляет собой PDU состояния объекта, который полностью определяет состояние, включая положение, данного объекта.Благодаря своему применению в сообществе моделирования, DIS также использует концепцию, называемую счислением пути, для обеспечения более высокой частоты пульса, когда фактическое положение, например, находится за пределами заданного порога его прогнозируемого положения.

В вашем случае PDU состояния объекта DIS будет излишним.Я упоминаю об этом только для того, чтобы отметить тот факт, что частота сердцебиений может меняться в зависимости от обстоятельств.Я не знаю, понадобится ли вам что-то подобное для описанного вами приложения, но кто знает.

Для пульса используйте UDP, а не TCP.Heartbeat по своей природе является изобретением без установления соединения, поэтому получается, что UDP (без установления соединения) здесь более уместен, чем TCP (ориентированный на соединение).

При широковещательной передаче UDP следует помнить, что широковещательное сообщение ограничивается широковещательный домен.Короче говоря, если у вас есть компьютеры, разделенные устройством уровня 3, например маршрутизатором, широковещательная рассылка не будет работать, поскольку маршрутизатор не будет передавать широковещательные сообщения из одного широковещательного домена в другой.В этом случае я бы рекомендовал использовать многоадресную рассылку, поскольку она будет охватывать широковещательные домены, при условии, что значение времени жизни (TTL) установлено достаточно высоким.Это также более автоматизированный подход, чем направленная одноадресная рассылка, при которой отправителю потребуется знать IP-адрес получателя для отправки сообщения.

Другие советы

Передача контрольного сигнала каждые t с использованием UDP;если вы не слышали от машины более k*t, то она считается отключенной.Будьте осторожны, чтобы совокупная используемая пропускная способность не приводила к истощению ресурсов.Вы можете использовать широковещательные IP-адреса или вести список конкретных IP-адресов, с которыми вы работаете.

Убедитесь, что контрольный сигнал включает в себя «счетчик перезагрузок», а также «идентификатор компьютера», чтобы вы знали, что предыдущего состояния сервера нет.

Я бы рекомендовал использовать Уменьшение карты если оно подходит.Это сэкономило бы много работы.

Я не уверен, что это ответит на вопрос, но вас может заинтересовать то, как работает кластеризация Weblogic Server.Из книги Освоение сервера BEA WebLogic:

[...] Кластеризация WebLogic Server обеспечивает слабую связь серверов в кластере.Каждый сервер в кластере независим и не зависит от какого-либо другого сервера для каких-либо фундаментальных операций.Даже если связь со всеми остальными серверами будет потеряна, каждый сервер продолжит работать и сможет обрабатывать полученные запросы.Каждый сервер в кластере поддерживает свой собственный список других серверов в кластере посредством периодических сообщений тактового сигнала.Каждые 10 секунд каждый сервер отправляет контрольное сообщение другим серверам в кластере, чтобы сообщить им, что он все еще жив.Сообщения Heartbeat отправляются с использованием технологии многоадресной IP-адресации, встроенной в JVM, что делает этот механизм эффективным и масштабируемым по мере увеличения количества серверов в кластере.Каждый сервер получает эти периодические сообщения от других серверов и использует их для поддержания текущего списка участников кластера.Если сервер не получает три контрольных сообщения подряд от любого другого сервера, он исключает этот сервер из своего списка участников до тех пор, пока он не получит еще одно контрольное сообщение от этого сервера.Эта технология Heartbeat позволяет динамически добавлять и удалять серверы из кластера, не влияя на конфигурации существующих серверов.

Коммутаторы контента Cisco являются аппаратным решением этой проблемы.Они реализуют виртуальный IP-адрес в качестве внешнего интерфейса для нескольких реальных серверов, чьи реальные IP-адреса известны коммутатору.Коммутатор периодически отправляет HTTP-запросы HEAD на веб-серверы, чтобы убедиться, что они все еще работают (что программное обеспечение коммутатора называет «поддержкой активности», хотя это не поддерживает работоспособность самого сервера).Коммутатор Cisco принимает трафик по виртуальному IP-адресу и перенаправляет его на реальные веб-серверы, используя настраиваемую балансировку нагрузки, например циклический перебор или определяемую пользователем балансировку нагрузки.

Розничная цена этих переключателей составляет от 3 до 10 тысяч долларов, хотя год назад мой деловой партнер купил один на eBay примерно за 300 долларов.Если вы можете себе это позволить, они представляют собой проверенное аппаратное решение вопроса о том, как прозрачно распределить услугу по нескольким серверам.Redhat включает в себя встроенную конфигурацию портов, поэтому вы можете реализовать свой собственный коммутатор Cisco, используя дешевый блок RedHat.Для получения дополнительной информации введите в Google «виртуальный IP-адрес» и «маршрутизатор контента Cisco».

Помимо аппаратных балансировщиков нагрузки, вы также можете попробовать бесплатное программное обеспечение для балансировки нагрузки с открытым исходным кодом, такое как HAProxy, доступный для Linux и BSD.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top