SpringCloud Gateway Zuul и лента

Spring Cloud

Зуул говорит

Функция персонажа:

Zuul — это сервер шлюза API с открытым исходным кодом от netflix, который по сути является приложением веб-сервлета.

ZuulServletПохоже на: SpringMvcDispatcherServlet, все запросы должны пройтиZuulServletобработка. В качестве пограничного приложения Zuul обеспечивает динамическую маршрутизацию, мониторинг, эластичную нагрузку и функции безопасности. Нижний слой Zuul использует различные фильтры для выполнения следующих функций:

  • Проверка подлинности и безопасность Определите каждый ресурс, для которого требуется проверка подлинности, и отклоните запросы, не соответствующие требованиям.
  • Мониторинг производительности Отслеживайте и подсчитывайте данные по всем службам, чтобы обеспечить точное представление о производстве.
  • Динамическая маршрутизация Динамически направляет запросы к серверным кластерам по мере необходимости.
  • Стресс-тест Постепенно увеличивайте трафик к кластеру, чтобы оценить его производительность.
  • Разгрузка нагрузки Предварительно распределяет ресурсы для каждого типа запросов и автоматически отбрасывает запросы, когда они превышают ресурсы.
  • Статическая обработка ресурсов возвращает некоторые ответы непосредственно на границе.

В основе Зуула лежит серияfilters

Эти фильтры выполняют ряд операций в процессе HTTP-запроса. 

Zuul предоставляет платформу для динамической загрузки, компиляции и запуска фильтров.过滤器之间没有直接的相互通信。他们是通过一个RequestContext的静态类来进行数据传递的。RequestContext类中有ThreadLocal变量来记录每个Request所需要传递的数据。

В Zuul определены четыре стандартных типа фильтров, которые соответствуют типичному жизненному циклу запроса, а именно"ПРЕД", "МАРШРУТИЗАЦИЯ", "ПОСТ", "ОШИБКА", весь жизненный цикл можно представить следующим рисунком.


  • ПРЕД:Этот фильтр вызывается перед маршрутизацией запроса. Мы можем использовать этот фильтр для реализации аутентификации, выбора запрошенных микросервисов в кластере, регистрации отладочной информации и многого другого.
  • МАРШРУТИЗАЦИЯ:Этот фильтр направляет запросы к микросервисам. Этот фильтр используется для структурирования запросов к микросервисам и запроса микросервисов с помощью Apache HttpClient или Netfilx Ribbon.
  • ПОЧТА:Этот фильтр выполняется после маршрутизации в микросервис. Такие фильтры можно использовать для добавления стандартных заголовков HTTP к ответам, сбора статистики и метрик, отправки ответов от микросервисов клиентам и многого другого.
  • ОШИБКА:Этот фильтр выполняется при возникновении ошибок на других этапах. В дополнение к типам фильтров по умолчанию Zuul также позволяет нам создавать собственные типы фильтров. Например, мы можем настроить фильтр типа STATIC, чтобы он генерировал ответ непосредственно в Zuul, не перенаправляя запрос во внутреннюю микрослужбу.

Пользовательский фильтр:

В некоторых сценариях, когда нам нужно настроить фильтр, нам нужно только наследовать ZuulFilter и переписать методы внутри.


На ленте

Реализация балансировки нагрузки:

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

Лента Spring Cloud — этоHttp和TCPСредство балансировки нагрузки на стороне клиента основано на ленте Netflix. Ribbon не нужно развертывать самостоятельно, но он есть в инфраструктуре почти каждого микросервиса. Лента может быть настроена в клиенте с помощьюribbonServerListЧтобы установить список серверов для опроса доступа для достижения роли балансировки нагрузки.

когдаЛента и ЭврикаПри совместном использовании ленточный серверList будет переписан с помощью DiscoveryEnabledNIWSServerList и расширен для получения списка экземпляров службы из реестра Eureka. Он также заменяет IP-адрес на NIWSDiscoveryPing, который делегирует Eureka ответственность за определение работоспособности сервера.

когдаЛента и КонсулПри совместном использовании ленточный серверList будет расширен с помощью ConsulServerList для получения списка экземпляров службы из Consul. При этом ConsulPing используется как реализация интерфейса IPing.

Когда мы используем Spring Cloud Ribbon, независимо от того, сочетается ли он с Eureka или Consul, мы будем загружать вышеупомянутое содержимое конфигурации посредством автоматической настройки при введении зависимостей Spring Cloud Eureka или Spring Cloud Consul, поэтому мы можем быстро в Spring Cloud реализовать балансировку нагрузки звонки между службами.

Ниже мы реализуем пример ленты.

Стратегия голосования:


  • BestAvailableRule:Максимально доступная стратегия, то есть после отсеивания сначала неисправного сервера выбрать тот, у которого наименьшее количество текущих одновременных запросов;
  • AvailabilityFilteringRule:Стратегия фильтрации может использоваться для фильтрации некоторых экземпляров службы, которые неисправны или одновременные запросы которых превышают пороговое значение, а затем выбрать один экземпляр из списка отфильтрованных экземпляров с помощью метода линейного опроса;
  • RoundRobinRule:Стратегия опроса, лента выбирает сервер в режиме опроса, это значение по умолчанию. Таким образом, к двум службам, запущенным в примере, будет осуществляться циклический доступ;
  • RandomRule:Случайный выбор, то есть Ribbon будет случайным образом выбирать один из серверов для доступа;
  • WeightedResponseTimeRule:При взвешенной стратегии опроса время ответа каждого сервера взвешивается, а затем путем опроса получается соответствующий сервер;
  • RetryRule: механизм повторной попытки на устройстве для выбранной стратегии балансировки нагрузки, когда выбор сервера завершается ошибкой в ​​течение периода конфигурации, он всегда будет пытаться выбрать доступный сервер с помощью метода subRule;
  • ZoneAvoidanceRule:Стратегия с учетом региона сначала использует основное условие фильтра (загрузчик региона, выберите оптимальный регион) для фильтрации всех экземпляров и возвращает список отфильтрованных экземпляров, а затем использует условия фильтра в списке условий вторичного фильтра для фильтрации результатов основного условие фильтра.Определите минимальное количество фильтров (по умолчанию 1) и минимальный процент фильтрации (по умолчанию 0) и, наконец, используйте RoundRobinRule (метод опроса), чтобы выбрать экземпляр сервера для серверов, которые соответствуют условиям.