Зуул говорит
Функция персонажа:
Zuul — это сервер шлюза API с открытым исходным кодом от netflix, который по сути является приложением веб-сервлета.
ZuulServlet
Похоже на: SpringMvcDispatcherServlet
, все запросы должны пройтиZuulServlet
обработка. В качестве пограничного приложения Zuul обеспечивает динамическую маршрутизацию, мониторинг, эластичную нагрузку и функции безопасности. Нижний слой Zuul использует различные фильтры для выполнения следующих функций:
- Проверка подлинности и безопасность Определите каждый ресурс, для которого требуется проверка подлинности, и отклоните запросы, не соответствующие требованиям.
- Мониторинг производительности Отслеживайте и подсчитывайте данные по всем службам, чтобы обеспечить точное представление о производстве.
- Динамическая маршрутизация Динамически направляет запросы к серверным кластерам по мере необходимости.
- Стресс-тест Постепенно увеличивайте трафик к кластеру, чтобы оценить его производительность.
- Разгрузка нагрузки Предварительно распределяет ресурсы для каждого типа запросов и автоматически отбрасывает запросы, когда они превышают ресурсы.
- Статическая обработка ресурсов возвращает некоторые ответы непосредственно на границе.
В основе Зуула лежит серияfilters
,
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 (метод опроса), чтобы выбрать экземпляр сервера для серверов, которые соответствуют условиям.