Подтвердить что ты не робот

Протоколы/Алгоритмы или лучшие практики

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

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

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

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

ИЗМЕНИТЬ

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

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

Спасибо всем за ваше время ~

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

Эти коммутаторы продаются в диапазоне $3-10K, хотя мой бизнес-партнер выбрал один на eBay около 300 долларов год назад. Если вы можете себе это позволить, они представляют собой проверенное аппаратное решение вопроса о том, как обеспечить прозрачность распространения службы на нескольких серверах. Redhat включает встроенную конфигурацию портов, чтобы вы могли реализовать свой собственный коммутатор Cisco, используя дешевый блок RedHat. Google для "виртуального ip-адреса" и "маршрутизатора контента cisco" для получения дополнительной информации.

Ответ 5

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