Балансировка по URL - PullRequest
       28

Балансировка по URL

1 голос
/ 24 января 2012

Мой вопрос состоит из двух частей, касающихся haproxy.

Вопрос 1:

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

- запрос -> www.domain.com -> работник (1 или 2) .domain.com

www.domain.com является статическимконтент-сервер, а также где хапрокси будет находиться.Все запросы будут изначально приходить сюда.Статический контент (html, изображения и т. Д.) Должен быть предоставлен nginx на www.domain.com.

Однако запросы с конкретными URL-адресами, такими как www.domain.com/[upload]/[id1] или www.domain.com/[download]/[id1], должны обслуживаться самими работниками.Дополнительный улов здесь заключается в том, что пересылка должна быть привязанной на основе URL.

Например:

Предположим, файл XML был загружен на www.domain.com/upload/123.haproxy увидит, что URL содержит загрузку, и направит запрос либо на worker1.domain.com, либо worker2.domain.com.Позже, когда будет сделан запрос GET на www.domain.com/download/123, мне понадобится haproxy, чтобы направить его работнику, который первоначально обслуживал запрос на загрузку с тем же идентификатором (123).По сути, я не могу получить запрос на загрузку для данного идентификатора перейти на worker1, а затем запрос на загрузку для того же идентификатора перейти на worker2.Будет ли что-то подобное возможно с использованием haproxy?

Вопрос 2:

Учитывая, что я загружаю файл на www.domain.com/upload, и haproxy направляет его на worker1.domain.com, весь файл пройдет через haproxy?То есть, пока файл worker1.domain.com получит файл, будет ли haproxy также получать тот же удар по пропускной способности, что и при пересылке?

Большое спасибо!

1 Ответ

0 голосов
/ 31 января 2012
  1. Для этого решения потребуется один бэкэнд на одного работника плюс бэкэнд балансировки нагрузки:
    • haproxy отправляет все обычные запросы в общий бэкэнд
    • рабочие установили cookie на клиенте
    • последующие запросы отправляются рабочим бэкэндам путем проверки файла cookie (с помощью hdr_sub (Cookie)), что-то вроде `` use_backend worker1 if {hdr_sub (Cookie) SRV = 1}
  2. Да, весь файл проходит через haproxy. Вы можете разрешить работникам перенаправлять клиентов непосредственно работнику, в этом случае клиент продолжит использовать работника. Однако, если работник выходит из строя, у клиента не будет возможности найти другого работника. В зависимости от вашего варианта использования наличие прокси-сервера haproxy для всего файла не является проблемой, но оно очень производительно.

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

...