Предопределение собственной стратегии балансировки нагрузки с помощью приложения Zuul in Spring - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь поэкспериментировать с весенним облачным стеком, в основном с Eureka и Zuul от Netflix. Через некоторое время мне удалось создать Eureka Server вместе с двумя отдельными клиентами с некоторым API-интерфейсом отдыха, который регистрируется на этом сервере, и другим, который я использую в качестве балансировщика нагрузки сервера для прокси-запросов к этим двум экземплярам.

ПРОБЛЕМА

Я бы хотел определить свою собственную стратегию балансировки нагрузки, поскольку я прочитал, что Zuul по умолчанию использует Round Robin. Есть ли какое-то конкретное соглашение об именах для этого в Зууле, так как мне не повезло искать его ни в документах, ни в руководствах.

1 Ответ

0 голосов
/ 16 января 2019

Циклическая балансировка нагрузки Zuul работает только так, как объявлено в рамках обновления клиента обнаружения, которое по умолчанию происходит каждые несколько секунд.

Когда Zuul обновляет свой клиент обнаружения, список экземпляров сервера случайным образом перемешивается кодом в com.netflix.discovery.shared.Applications и не может быть настроен. Это перемешивание нарушает логику с состоянием в com.netflix.loadbalancer.RoundRobinRule, которая поддерживает «последнюю позицию» в списке серверов, поэтому она может выполнять свою циклическую логику.

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

Чтобы реализовать свое собственное правило, вам просто нужно предоставить компонент, который реализует com.netflix.loadbalancer.IRule. Мы продлили абстрактный класс com.netflix.loadbalancer.AbstractLoadBalancerRule. В методе choose() вы выполняете свою работу.

...