Балансировщик нагрузки - как написать один для пользовательского приложения? - PullRequest
7 голосов
/ 25 мая 2010

Я написал простое серверное приложение, которое будет работать на нескольких машинах.

У меня вопрос, как работает балансировщик сетевой нагрузки?

Я слышал о циклическом и других алгоритмах, но я не получил ответа на вопрос, как на самом деле идет процесс? В терминах сокетов.

Клиент подключается к одному из компьютеров балансировщика нагрузки, запрашивает сервер "free-to-connect-to" и просто подключается к нему?
Это самый простой способ, о котором я могу думать.
.. или он использует балансировщик нагрузки в качестве прокси (это означает, что все NB должны быть всегда подключены к серверам приложений, а данные передаются через них)?

Это скорее общий вопрос. Как бы вы это сделали?

Спасибо всем!

1 Ответ

13 голосов
/ 25 мая 2010

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

Microsoft имеет встроенную в Windows систему балансировки нагрузки, основанную на программном обеспечении. Это довольно хорошо и легко настроить.

Однако я расскажу о физическом маршруте.

Здесь есть несколько алгоритмов, но основным является Round Robin с опцией для «липких» сессий. В этом случае залипание означает, что балансировщик нагрузки попытается сохранить историю клиентов и перенаправить запросы от одного и того же клиента на одну и ту же машину. Это означает, что балансировщик нагрузки должен вести список клиентов и куда он направил этих клиентов. В зависимости от размера кэша клиенты могут не попадать в список, а при будущих запросах они могут перенаправляться на другой сервер.

Раунд Робин - довольно простая идея. Для каждого входящего запроса отправляйте его на следующий сервер в списке. Более сложные алгоритмы могут учитывать, сколько запросов поступает на конкретный сервер и сколько времени занимают эти запросы; затем попытайтесь сбалансировать новые запросы в пользу более быстрых серверов. Эта часть сложна, хотя.

...