Авторские права принадлежат автору Для любой формы перепечатки, пожалуйста, свяжитесь с автором для получения разрешения и укажите источник.
Шлюз Zuul и основные сценарии применения
Как развивался API-шлюз?
Посмотрите на картинку ниже:
- Монолитное приложение: браузер инициирует запрос, и запрос отправляется непосредственно на компьютер, на котором расположено монолитное приложение. Приложение запрашивает данные из базы данных и возвращает их в браузер таким же образом. Для монолитного приложения только один, и шлюз не требуется.
- Микросервисы. Приложения микросервисов могут быть развернуты в разных компьютерных залах, в разных регионах и под разными доменными именами. В настоящее время, если клиент (браузер/мобильный телефон/программный инструмент) хочет запросить соответствующую услугу, ему необходимо знать конкретный IP-адрес или URL-адрес доменного имени машины.Когда имеется много экземпляров микросервиса, их трудно запомнить. . В этот момент есть шлюз, и запросы, связанные с клиентом, отправляются напрямую на шлюз, а шлюз определяет IP-адрес конкретного микросервиса в соответствии с анализом идентификатора запроса, а затем перенаправляет запрос экземпляру микросервиса. Все функции памяти выполняются шлюзом.
Основные функции шлюза API
Для чего нужен шлюз? в чем смысл? Для получения информации о функции шлюза см. следующий рисунок:
Сосредоточьтесь на шлюзе Netflix Zuul здесь В основном потому что:- Динамически публикуемый механизм фильтрации
- Он также интегрирован в систему Spring Cloud.
использование zuul на Netflix (2017)
В то же время в Китае есть много отличных примеров применения, таких как:Расширенные сценарии применения шлюза Zuul
Красно-зеленое развертывание
В правой части рисунка есть сервисные кластеры двух цветов, красного и зеленого, из которых видно, что зеленый — это версия v1, а красный — версия v2. Вы можете контролировать, запрашивает ли клиент определенные запросы к красному или зеленому экземпляру службы через шлюз.
тестовая ветка разработчика
Как и в приведенной выше логике, пересылка запросов в тестовую среду через конфигурацию шлюза является экземпляром службы.
Тест погребенной точки
Подобно приведенной выше логике, запрос перенаправляется в экземпляр службы среды со скрытой точкой через конфигурацию шлюза.
испытание давлением
Та же логика, не влияющая на экземпляр рабочей службы, конфигурация шлюза управляет некоторыми клиентскими запросами или экземплярами службы, которые отправляют запросы в среду стресс-тестирования.
маршрут отладки
Клиент имеет множество различных устройств.Благодаря конфигурации шлюза указанный маршрут запроса устройства может быть перенаправлен на экземпляр службы в указанной среде.
Канарский тест
липкая канарейка
Неудачный тест на впрыск
Тест понижения версии
Справочник по связанным концепциям тестированияВ чем разница между канареечным выпуском, скользящим выпуском и сине-зеленым выпуском? Каковы ключевые моменты?Высокая доступность в регионах
Как показано на рисунке: когда запрос попадаетUS-West-2
Машина есть, экземпляр службы на машине завис, но шлюз может нормально работать.Настроив шлюз, когда запрос на экземпляр службы не возвращается, он будет активно пересылать запрос на шлюз на машине, где другие службы расположены для продолжения обработки.Это кластер шлюза zuul для достижения высокой доступности.
Анти-лазанье и анти-атака
Проверки работоспособности и скрининг плохих узлов
Анализ архитектуры шлюза Zuul
Архитектура шлюза Zuul
- Zuul Servlet: контейнер сервлетов Zuul.
- Zuul Filter Runner: процессор, на котором zuul выполняет фильтр.
- Pre-routing Filter: Предварительный фильтр для запросов zuul
- Фильтр маршрутизации: фильтр выпуска маршрутизации для запросов zuul.
- Почтовый фильтр маршрутизации: почтовый фильтр для zuul-запросов
- Контекст запроса: контекст сервлета zuul.
- Загрузчик фильтров: загрузчик фильтров
- Диспетчер файлов фильтров: диспетчер содержимого фильтров
- Каталог фильтров: путь хранения фильтров фильтров
- Издатель фильтров: класс обработки для публикации фильтров.
- Filter Persister: класс обработки для постоянного фильтра
- Фильтр опроса: опрашивает фильтры в Persister и отправляет новые фильтры в каталог фильтров.
жизненный цикл обработки запроса
- http отправить запрос на шлюз zuul
- Шлюз zuul сначала проходит предварительный фильтр;
- После того, как проверка пройдена, он попадает в фильтр маршрутизации, а затем перенаправляет запрос на удаленный сервис.Удаленный сервис возвращает результат после выполнения.Если есть ошибка, выполняется фильтр ошибок;
- Продолжайте выполнять пост-фильтр вниз;
- Наконец, верните ответ http-клиенту.
Ключевые понятия фильтра
- Тип Тип: Определяет этап процесса маршрутизации, на котором применяется фильтр.
- Порядок выполнения: В том же типе определите порядок выполнения фильтров.
- Критерии состояния: Условия, которые должны быть соблюдены для выполнения фильтра
- Действие Действие: Действие в фильтре, которое будет выполнено при выполнении условия
Типы фильтров в zuul
- PRE: фильтр для выполнения до того, как запрос будет направлен на исходный сервер.
- Сертификация
- маршрут
- журнал запросов
- МАРШРУТИЗАЦИЯ: обрабатывает фильтр, который отправляет запрос на исходный сервер.
- POST: фильтр, который должен выполняться, когда ответ возвращается с исходного сервера.
- Добавьте заголовки HTTP в ответ
- Собирать статистику и показатели
- Поток ответа обратно клиенту
- ОШИБКА: в указанном выше фильтре этапа произошла ошибка при выполнении
Образец фильтра Демонстрация
import javax.servlet.http.HttpServletRequest;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
public class PreFilter extends ZuulFilter {
@Override
public String filterType() {
return "pre";
}
@Override
public int filterOrder() {
return 1;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
System.out.println("Request Method : " + request.getMethod() + " Request URL : " + request.getRequestURL().toString());
return null;
}
}
Единый интерфейс управления фильтрами
Поскольку в zuul есть механизм фильтрации, который можно динамически активировать, всеми фильтрами шлюза zuul можно управлять со страницы, что делает возможности настройки и вариативности шлюза более мощными.