Назад | Перейти на главную страницу

Software Load Balancer - пересылать или перенаправлять на внутренние серверы?

Я веб-разработчик, недавно возникла потребность в использовании Load Balancer. Я новичок в этой области. Я выбрал, какой LB использовать, это не так важно, HAProxy имеет все необходимые функции, насколько я понял.

Меня беспокоит то, что с программным балансировщиком нагрузки он не «перенаправляет» пользователя на внутренний сервер, балансировщик нагрузки остается посередине, поэтому вся полоса пропускания трафика и TCP-соединения останутся посередине. Я правильно понял?

Если да на предыдущий вопрос, то как я могу решить, чтобы балансировщик нагрузки не оставался посередине с клиентом - внутренним сервером?

Кроме того, мне нужен «исходный» тип lb, потому что webapp использует сеанс, и мне нужно, чтобы пользователи подключались к тем же серверам, которые они использовали.

Заранее спасибо.

Не уверен, в какую сторону идет большая часть вашего трафика, если это client -> server, или server -> client, но если это позже, вам может быть интересно использовать (или, по крайней мере, проверить) Виртуальный сервер Linux (LVS) который

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

(Выдержка с сайта).

Чтобы получать трафик ваших внутренних серверов напрямую, без «чего-то промежуточного», к / вашим клиентам, используйте Прямая маршрутизация. Вы найдете дополнительную информацию по этой ссылке, но, чтобы понять, как это выглядит:

Теперь вы могли бы сказать ... ну, это звучит красиво и модно в теории, но да ладно, на сайте написано «Последние новости прессы ... среда, 8 августа 2012 г.» ... сейчас 2016 год. Да, тогда вы были бы совершенно правы, кроме того LVS проверено и твердо ... я рекомендовал хотя бы взглянуть?

Фонд Викимедиа использует это, как и многие другие, и вот последнее изображение, показывающее установку в 2010 году.

В программном плане - haproxy хорошее, проверенное решение.

У вас есть несколько способов добиться правильной балансировки нагрузки.

Балансировка IP-хэша

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

Я использую эту опцию в проектах, которые не могут использовать JWT.

Разметка файлов cookie

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

Совместное использование файлов cookie на серверах

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

Веб-токены JSON (сеанс в файлах cookie)

Вы вообще не заботитесь о сессиях, поскольку они хранятся в файлах cookie. Поэтому ваши серверы не могут обрабатывать каждый запрос, независимо от того, какой это сервер A или B. На мой взгляд, это лучшее решение для большей части веб-приложений, но! Здесь есть огромное предупреждение, так как вы должны понимать, что делаете.


Если да на предыдущий вопрос, то как я могу решить, чтобы балансировщик нагрузки не оставался посередине с клиентом - внутренним сервером?

Это тоже возможно, вы можете просто использовать поддомены. Если ваш пользователь достигает www, он решает, когда пользователь перенаправляется на s1.domain.tld или s2.domain.tld, ...

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

Вы также можете избавиться от своего балансировщика и использовать ECMP на сетевом уровне, но это немного сложнее настроить. Я бы лично остался с балансировщиком нагрузки.