Интеграция Zuul и ленты

Мне трудно понять связь между Zuul и Ribbon.

Кажется, я ясно понял Зуула. Это обратный прокси-сервер, с которым я могу связаться, чтобы получить доступ к одному из моих нескольких экземпляров службы. Он выберет правильный сервер, используя алгоритм циклического перебора или что-то еще, что вы настроите. Это традиционный балансировщик нагрузки. Чтобы узнать доступные экземпляры, он может использовать реестр, такой как Eureka.

Но у меня больше проблем с Ribbon. Он продается как балансировщик нагрузки на стороне клиента, но что это значит? Внешний сервер не нужен? Лента встроена в клиент так же, как клиент Eureka? Если да, то как это работает? Нужен ли мне Zuul, когда я использую ленту, и наоборот?

В некоторых статьях я видел, что на самом деле Zuul по умолчанию использует ленту для балансировки нагрузки, и это меня еще больше запутало. Если это правда, что означает «клиентская сторона»? Что делает Zuul, кроме маршрутизации?

Я надеюсь, что вы можете мне помочь.


person VanesBee    schedule 21.04.2017    source источник


Ответы (1)


Клиент и сервер всегда относительны. Zuul — это клиент для ваших экземпляров службы, а ваши экземпляры службы — это серверы для Zuul.

Когда мы используем традиционный балансировщик нагрузки (балансировщик нагрузки на стороне сервера), вызывающая сторона API (клиент) знает только одну конечную точку, которая является балансировщиком нагрузки, а клиент не знает список серверов. Балансировщик нагрузки выбирает сервер из списка.

Когда мы используем балансировщик нагрузки на стороне клиента, такой как Ribbon, вызывающий API (клиент) должен знать список серверов и выбирать один из них из списка. Вот почему мы называем это балансировщиком нагрузки на стороне клиента.

Как вы знаете, Ribbon — это клиентский модуль балансировки нагрузки, интегрированный во многие клиентские http-модули. Например, Feign и RestTemplate с балансировкой нагрузки поддерживают Ribbon. А именно Feign и Load-balanced RestTemplate могут выбирать сервер из заданного списка или списка из eureka при использовании с лентой.

Что касается Zuul, существует RibbonRoutingFilter, который направляет ваш запрос в реальный экземпляр службы. RibbonRoutingFilter использует ленту для выбора сервера из списка, указанного в вашей конфигурации или в Eureka. Поэтому, если вы хотите использовать Zuul в качестве обратного прокси-сервера с балансировкой нагрузки, Zuul нуждается в Ribbon.

person yongsung.yoon    schedule 02.05.2017
comment
Итак, я прав, говоря, что все, что вам нужно сделать, чтобы zuul балансировал нагрузку между запущенными экземплярами службы, зарегистрированными в eureka, — это иметь файл application.properties zuul-server, содержащий свойство eureka.client.serviceUrl.defaultZone? - person xpz; 29.03.2020
comment
то есть вы используете ленту, даже не упоминая об этом, потому что лента упакована внутри zuul? - person xpz; 29.03.2020
comment
@xpz: Да, ты прав. Лента является транзитивной зависимостью, когда у вас есть Zuul в вашем файле pom.xml или gradle.build. Когда вы запустите приведенную ниже команду, вы увидите добавленную ленту Maven: mvn dependency:tree Gradle: зависимости gradle - person Andy; 29.05.2020