Понимание Spring Cloud Zuul и Gateway в одной статье
Понимание Spring Cloud Zuul и Gateway в одной статье
Spring Cloud Zuul весна Важный компонент облачной экосистемы — это платформа на базе Netflix. API-шлюз Служить реализован Zuul. В архитектуре микро-Служить Zuul действует как прокси-сервер и обратный прокси-сервер, обеспечивая единую точку входа для общей архитектуры системы, и отвечает за маршрутизацию, пересылку, обработку фильтров, балансировку. нагрузка, контроль безопасности, мониторинг и другие функции. Ниже весны Cloud Основные функции Зуула и его принцип работы:

Введение в функцию

1. Маршрутизация

— Zuul может пересылать полученные HTTP-запросы соответствующему экземпляру микросервиса в соответствии с предопределенными правилами маршрутизации. Например, он может маршрутизировать запросы `/api/users` к микросервису с именем `users-service`.

2. Фильтры

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

3. Балансировка нагрузки

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

4. Периферийные сервисы

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

Принцип работы

— Когда клиент инициирует запрос к Zuul, запрос сначала перехватывается ZuulServlet.

- ZuulServlet создаст ZuulRunner и в процессе инициализирует RequestContext, который представляет собой глобальный контейнер данных области запроса, используемый для передачи контекстной информации в течение жизненного цикла запроса.

- Запросы попадают в цепочку фильтров, и в настроенном порядке выполняется ряд предварительных фильтров, фильтров маршрутизации и постфильтров.

— Фильтр маршрутизации отвечает за поиск целевого микросервиса и пересылку запроса соответствующему целевому сервису.

- Последующие фильтры могут продолжать обрабатывать запросы или ответы, такие как аутентификация, статистика, ведение журнала и т. д.

- В конечном итоге ответ возвращается клиенту через цепочку фильтров.

Архитектурный дизайн

- Zuul сам по себе является приложением веб-сервлетов, которое можно развернуть в любом совместимом контейнере сервлетов.

- Он использует преимущества Spring Boot и Spring Cloud, что позволяет легко интегрироваться в общую архитектуру Spring Cloud и беспрепятственно работать с другими компонентами, такими как Eureka, Ribbon, Hystrix и т. д.

Пример сценария

- Использование Zuul может скрыть конкретные сетевые детали внутренних микросервисов. Внешним клиентам необходимо взаимодействовать только со шлюзом Zuul, что упрощает взаимодействие между клиентом и сервером.

— Фильтр безопасности может единообразно обрабатывать проверку безопасности всех служб, избегая повторной реализации одной и той же логики проверки в каждой микрослужбе.

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

Пример кода Spring Cloud Zuul

Ниже приведена простая базовая конфигурация Spring Cloud Zuul и пример кода фильтра, показывающий, как настроить маршрутизацию и реализовать простой фильтр:

1. Добавьте зависимости

Добавьте зависимость Spring Cloud Zuul в pom.xml проекта Maven:

<dependency> <groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-netflix-zuul</artifactId>

<version>номер версии</version> <!-- По словам Весны Обновление облачной версии -->

</dependency>

2. Настройте прокси Zuul

Настройте правила маршрутизации Zuul в файле application.yml или application.properties:

zuul:

routes:

userservice:

path: /api/users/**

url: http://localhost:8081 # Предположим, что это реальный адрес userservice

3. Создайте класс конфигурации Zuul.

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@SpringBootApplication

@EnableZuulProxy // Включить функцию прокси Zuul

public class ZuulGatewayApplication {

public static void main(String[] args) {

SpringApplication.run(ZuulGatewayApplication.class, args);

}

}

4. Реализуйте простой фильтр

Создайте собственный класс фильтра, унаследованный от ZuulFilter:

import com.netflix.zuul.ZuulFilter;

import com.netflix.zuul.context.RequestContext;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

public class MyPreFilter extends ZuulFilter {

private static final Logger log = LoggerFactory.getLogger(MyPreFilter.class);

@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();

log.info("MyPreFilter is running, URI: {}", request.getRequestURI());

// Здесь вы можете добавить свою логику предварительной обработки, такую ​​как ведение журнала, запросы на проверку и т. д.

return null;

}

}

5. Регистрация фильтров

Чтобы Zuul распознавал и использовал пользовательский фильтр, его необходимо добавить в контейнер Spring:

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

public class FilterConfig {

@Bean

public MyPreFilter myPreFilter() {

return new MyPreFilter();

}

}

Теперь, когда вы запускаете приложение Zuul Gateway, все запросы с путем `/api/users/**` будут направляться к указанному экземпляру службы, и прежде чем запрос достигнет целевой службы, фильтр `MyPreFilter` сначала выполнит свою задачу. `Логика в методе run()`.

Spring Cloud Zuul повышает гибкость, безопасность и общую управляемость микросервисной архитектуры, выступая в качестве шлюза API.

Spring Cloud Gateway

Spring Cloud Gateway — это высокопроизводительный сервис API-шлюза в экосистеме Spring Cloud. Это решение для микросервисного шлюза нового поколения, разработанное командой Spring Cloud на основе Spring 5.0, Project Reactor и Spring Boot 2.0. По сравнению с предыдущим Spring Cloud Zuul, Spring Cloud Gateway обеспечивает более мощные и гибкие функции маршрутизации и фильтрации, а также в полной мере использует высокопроизводительную неблокирующую модель ввода-вывода Reactor Netty для улучшения возможностей одновременной обработки системы и скорости ответа.

Введение в функцию

1. Маршрутизация:

Spring Cloud Gateway поддерживает расширенные правила сопоставления маршрутизации. Он может принимать решения о маршрутизации на основе пути, метода, имени хоста, заголовка, параметров запроса и других атрибутов HTTP-запроса и пересылать запрос соответствующему микросервису.

2. Фильтр:

Фабрика GatewayFilter предназначена для облегчения предварительной и постобработки запросов и ответов. Фильтры делятся на два типа: глобальные фильтры и фильтры уровня маршрута, которые можно использовать для реализации таких функций, как аутентификация, ограничение тока, автоматический выключатель, ведение журнала и преобразование запросов.

3. Плагин-дизайн:

Позволяет пользователям настраивать фабрики фильтров, легко расширять функции шлюза и реализовывать индивидуальную логику обработки.

4. Обнаружение сервисов и балансировка нагрузки:

Его можно легко интегрировать с компонентами обнаружения сервисов, такими как Eureka и Consul, для автоматического обнаружения серверных сервисов и выполнения балансировки нагрузки.

5. Автоматические выключатели и отказоустойчивость:

Сотрудничая с такими компонентами, как Spring Cloud Hystrix или Spring Cloud LoadBalancer, можно обеспечить отказоустойчивую обработку, такую ​​как ухудшение качества обслуживания и автоматический выключатель.

Принцип анализа

Основной рабочий процесс Spring Cloud Gateway в основном включает в себя следующие ссылки:

1. Получите запрос:

Клиент инициирует HTTP-запрос к Spring Cloud Gateway.

2. Сопоставление маршрутов:

Шлюз сопоставляет запросы на основе предопределенных правил маршрутизации. Правила маршрутизации описываются RouteDefinition, включая уникальный идентификатор, целевой URI, серию утверждений, предикат и набор фильтров.

3. Построение и исполнение цепочки фильтров:

Если запрос соответствует правилу маршрутизации, шлюз создает для запроса цепочку фильтров, и фильтры в цепочке выполняются в определенном порядке. Фильтры могут изменять запросы, ответы или другую контекстную информацию, например аутентификацию, добавление или удаление заголовков запросов, изменение путей запросов и т. д.

4. Отправьте запрос:

Запросы, обрабатываемые цепочкой фильтров, перенаправляются в определенные серверные микрослужбы через встроенный механизм обнаружения служб в соответствии с целевым URI, определенным маршрутом.

5. Обработка и возврат ответа:

После того как микросервис обработает запрос и сгенерирует ответ, ответ выполняет логику постобработки в обратном порядке по цепочке фильтров и, наконец, возвращается клиенту.

Техническая реализация

Spring Cloud Gateway основан на платформе Spring WebFlux и использует неблокирующий ввод-вывод, позволяя обрабатывать несколько запросов в одном потоке, повышая пропускную способность системы и скорость ответа. В то же время его высокая производительность выигрывает от управляемых событиями характеристик Reactor Netty, которые могут лучше справляться со сценариями с высоким уровнем параллелизма.

Spring Cloud Gateway играет жизненно важную роль в архитектуре микросервисов. Он не только служит входом трафика, но также берет на себя ряд важных обязанностей, таких как защита безопасности, контроль трафика, оркестровка API и агрегация сервисов, что значительно упрощает взаимодействие между ними. сложность микросервисов и повышает стабильность и масштабируемость всей архитектуры.

Использование Spring Cloud Gateway

Настройка и использование Spring Cloud Gateway обычно включает в себя две основные части: настройку маршрутизации (Маршруты) и настройку фильтров (Фильтры). Ниже приведены несколько основных примеров кода, иллюстрирующих, как настроить и использовать Spring Cloud Gateway.

Пример конфигурации маршрутизации

В приложениях Spring Boot правила маршрутизации можно настроить через файлы application.yml или application.properties, например:

yaml

spring:

cloud:

gateway:

routes:

- id: user-service-route # Идентификатор маршрута, используемый для идентификации

uri: lb://user-service #LB (обнаружение службы) адрес целевой службы

predicates: # Предикаты, используемые для определения того, какие запросы будут направлены к этой цели.

- Path=/users/**

фильтры: # Список фильтров, применяемых к запросам или ответам.

- StripPrefix=1 # Удалите префикс «/users», чтобы путь запроса правильно сопоставлялся с серверной службой.

Пример настройки фильтра

Определите собственный фильтр в классе конфигурации Java, например простой фильтр журнала:

import org.springframework.cloud.gateway.filter.GatewayFilter;

import org.springframework.cloud.gateway.filter.factory.rewrite.AbstractRewriteResponseHeaderGatewayFilterFactory;

import org.springframework.http.HttpHeaders;

import org.springframework.stereotype.Component;

@Component

public class LoggingFilter implements GatewayFilter {

@Override

public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

log.info("Request incoming: {}", exchange.getRequest().getPath());

return chain.filter(exchange).then(Mono.fromRunnable(() -> {

log.info("Request completed: {}", exchange.getRequest().getPath());

}));

}

}

//Применяем пользовательский фильтр к маршруту

@Configuration

public class GatewayConfig {

@Bean

public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {

return builder.routes()

.route("logging_route", r -> r.path("/api/**")

.filters(f -> f.filter(new LoggingFilter()))

.uri("lb://backend-service"))

.build();

}

}

В этом примере мы создаем собственный фильтр под названием LoggingFilter, который регистрирует запросы по мере их поступления и завершения. Затем в классе конфигурации GatewayConfig мы применяем этот фильтр ко всем маршрутам, начинающимся с /api/**, и перенаправляем запрос в службу с именем backend-service.

Обратите внимание, что в реальных приложениях может потребоваться дополнительная настройка компонентов обнаружения служб, глобальных фильтров и других функций. В этих примерах показана базовая конфигурация Spring Cloud Gateway, которую можно расширять и корректировать в соответствии с потребностями во время фактического использования.

Сравните два

Выбери весну Cloud Шлюз или Zuul как шлюз API в микросервисной архитектуре в основном зависит от следующих факторов: Производительность и технологический стек

- Spring Cloud Gateway На основе весны Платформы Reactor и WebFlux 5 используют Netty для реализации асинхронного неблокирующего ввода-вывода с более высокой производительностью и меньшей задержкой. Для сценариев с высоким уровнем параллелизма и приложений с высокими требованиями к работе в реальном времени лучше выбрать Gateway. - Zuul 1.x На основе традиционного сервлета API, режим синхронной блокировки, производительность немного уступает Gateway. - Zuul 2.x При использовании асинхронной неблокирующей модели производительность улучшилась, но благодаря Spring Облако не интегрировано с Zuul 2.x, поэтому поддержка и стабильность сообщества не так хороши, как у Spring. Cloud Gateway。 Функции

- Spring Cloud Gateway предоставляет более широкие и гибкие правила сопоставления маршрутов, а также мощный механизм фильтрации с более мощными возможностями обработки запросов и ответов. - Zuul предоставляет базовые функции маршрутизации и фильтрации, но для сравнения в Gateway реализовано больше функций расширения и оптимизации.

Поддержка сообщества и будущее развитие

- Spring Cloud Gateway — это решение API-шлюза, официально продвигаемое Spring Cloud. Оно активно поддерживается и поддерживается, имеет активное сообщество и имеет четкое направление дальнейшего развития. - Хотя Zuul 1.x когда-то был частью семейства Spring Cloud, с запуском Gateway Zuul 1.x больше не является официально рекомендуемым выбором. — Разработка Zuul 2.x не полностью интегрирована в экосистему Spring Cloud, а это значит, что если вы выберете Zuul 2.x, вам, возможно, придется решать вопросы интеграции с другими компонентами Spring Cloud самостоятельно.

Стоимость совместимости и миграции

- Если ваш проект уже использует Spring Облако и хотите плавно обновить Spring Cloud Gateway будет естественным выбором для перехода. - Если вы ищете новое решение для шлюза API, и проект не зависит строго от Spring Облачная экология, вы можете исследовать Зуул Сможет ли версия 2.x удовлетворить потребности, необходимо также учитывать риски, связанные с долгосрочным обслуживанием и технической поддержкой. в заключение Все вместе для самой новой весны Проект облачного микросервиса или обновление существующего проекта, Spring Cloud Gateway обычно является лучшим выбором, поскольку он имеет более высокую производительность, более богатые функции и более стабильную поддержку сообщества. Если нет особых потребностей, указывающих на Зуула 2.x, в противном случае рекомендуется сначала использовать Spring. Cloud Gateway。

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose