Мне интересно, будет ли преимущество знать loadavg каждого внутреннего сервера и попросить HAProxy отправить следующий запрос на компьютер с наименьшим loadavg.
Однако я не видел ничего, что предлагало бы такую возможность в HAProxy. Может его нет в наличии?
я нашел эта почта который показывает определение внешнего интерфейса с use_backend
, но я думаю, что карта будет загружена один раз и кэширована на все время выполнения HAProxy. В противном случае динамическое изменение карты с сортировкой элементов по loadavg не имело бы никакого значения ...
frontend ft_items
[...]
use_backend %[path,lower,map(/etc/haproxy/items.map,bk_default)]
Мне неясно, подойдет ли roundrobin для моего приложения, потому что некоторые запросы занимают 50 мс (изображения, CSS и т. Д.), А другие могут занимать хорошие 2 с (большие отчеты). Так что проверка loadavg компьютера кажется более подходящей для этого приложения.
Вам лучше разбить карты HAProxy, чтобы быстрые запросы на статические ресурсы проходили через одну карту циклического перебора, а более медленные запросы - через другую карту RR.
Вы можете использовать одинаковые или разные серверные пулы для запросов, идея состоит в том, что в среднем все серверы обрабатывают одинаковое количество быстрых и медленных запросов. В качестве альтернативы вы можете сопоставить их с различными серверными системами и использовать более мощные системы для ресурсоемкой работы с отчетами.
Алексис,
Это похоже на то, что агент-чек предназначен для использования. Вилли любезно добавил патч, который мы используем для устройства Loadbalancer.org, и мы открыли исходный код для нашего агента сервера на базе Windows. Инструкции, включая базовый пример сервера Linux, находятся здесь:
Агент Windows может отслеживать комбинацию количества подключений ЦП, ОЗУ и TCP (например, для сеансов RDP).
Обратная связь всегда приветствуется. Это напоминает мне - было бы хорошо, если бы кто-то реализовал какой-то алгоритм времени ответа сервера, тогда вам не обязательно нужен агент на основе сервера.