Весеннее облако — шлюз

Java

Лао Чжан собирался уйти с работы, когда проходил мимо дома Сяо Ци и обнаружил, что тот читает книгу Spring Cloud Gateway.официальная документация.

Я посмотрел на время и немного подождал автобус.Кстати, я пообщался с Сяо Ци и спросил: «Вы изучаете шлюз Spring Cloud?»

Когда Сяо Ци услышал звук, он обернулся и увидел, что Лао Чжан придвинул стул и сел. У меня есть некоторые сомнения, и я хочу найти кого-то, с кем можно обменяться и поучиться.

«Да, ах, я недавно узнал, что не в этой части знаний микросервиса прямо сейчас, чтобы изучить эту часть шлюза. На самом деле, я не особо понимаю, зачем это нужно нашей службе микрошлюза?»

что такое шлюз

Лао Чжан загадочно улыбнулся и сказал: «Я покажу вам две картинки, и вы поймете.» Затем он поискал компьютер Сяо Ци.эта статьяДве картинки внутри.

«Мы предполагаем, что вы теперь делаете приложение электронной коммерции, передний конец - это мобильное приложение, а задний конец - это различные микросервисы. Затем вам может потребоваться вызовов данные из нескольких сервисов для отображения страницы. Если нет ворот Ваша система увидит, что она выглядит так: "

没有网关
нет шлюза

"А если вы добавите шлюз, ваша система будет выглядеть так:"

有网关
со шлюзом

"Ну, это похоже на идею "высокой сплоченности, низкой связанности". Если вы не используете шлюз, какой может быть вред?" Спросил Сяо Ци.

«На самом деле, вы можете видеть только что на первой картинке. Если нет шлюза, ваш клиент станет очень хлопотным. Для каждого микросервиса может потребоваться авторизация, аутентификация, балансировка нагрузки и т. д., а микросервисы Backend также могут использовать разные протоколы обмена сообщениями; самое главное, если вы хотите провести рефакторинг микросервисов, например разделить их или объединить в серверы, вам придется модифицировать и клиентскую часть, что усложнит работу».

Выбор технологии шлюза

Сяо Ци: «Кажется, шлюз действительно очень важен. Какие шлюзы микросервисов сейчас есть на рынке?»

«Когда мы внедряем шлюз, нам необходимо учитывать его производительность и масштабируемость. Для готовых продуктов NGINX Plus — очень хороший выбор, NGINX Plus предоставляет зрелый, масштабируемый высокопроизводительный веб-сервер и простой для развертывания, настраиваемый и программируемый обратный прокси-сервер. NGINX Plus может управлять аутентификацией, контролем доступа, запросами балансировки нагрузки, кэшированием ответов и обеспечивать проверку и мониторинг работоспособности приложений. Помимо прочего, вы также можете использовать Node.js или Netty, чтобы написать шлюз в соответствии с вашими потребностями. И Spring Cloud также предоставляет некоторые предварительно написанные фреймворки шлюзов микросервисов, вы знаете, какие из них существуют?»

«Я проверил, и кажется, что Spring Cloud Gateway и Zuul от Netflix довольно хороши. Но пакет Netflix приостановлен, поэтому сейчас я в основном смотрю на Spring Cloud Gateway».

Лао Чжан кивнул и сказал: «Да, многие компоненты Netflix прекратили разработку. Hystrix, о котором мы говорили два дня назад, тоже, но продукты для замены Hystrix все еще находятся в стадии инкубации. Но с точки зрения шлюзов, Spring Cloud Gateway был инкубирован. на замену Zuul. Знаете ли вы принцип Spring Cloud Gateway?»

Spring Cloud Gateway

Сяоци открыл официальный документ, который только что читал, а затем показал Лао Чжану это изображение документа официального веб-сайта и сказал: «Spring Cloud Gateway построен на основе проектов Spring Boot 2.0, Spring WebFlux и Reactor, а также Нижний слой — Netty.Этот процесс на самом деле очень похож на Zuul, используя ряд фильтров для обработки запросов для достижения желаемой настройки».

原理图
Схема

Чжан спросил: "Там только что прочитал официальный документ, можно резюмировать со мной, какую функцию делать?"

«Шлюз весеннего облака может почти удовлетворить потребности большинства шлюзов. В основном он имеет следующие функции:»

Утвердить предикат

Утверждения могут указывать"при каких условиях"может соответствовать маршруту. Утверждения предоставляются на основе Java 8Predicateинтерфейс. Шлюз (далее именуемый Spring Cloud Gateway — это шлюз) предоставляет некоторые утверждения по умолчанию. ты сможешьофициальная документацияПосмотрите, какие существуют утверждения и как их использовать.

Время поддержки, файл cookie, заголовок, хост, метод HTTP, относительный путь, оператор запроса URL, удаленный IP-адрес и т. д., чтобы делать утверждения. Например:

spring:
  cloud:
    gateway:
      routes:
      - id: method_route
        uri: https://example.org
        predicates:
        - Method=GET

ШлюзФильтрШлюзФильтр

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

Глобальные фильтры

Глобальный фильтр аналогичен фильтру шлюза, за исключением того, что глобальный фильтр по умолчанию добавляется ко всем запросам. Конечно, вы также можете самостоятельно определить глобальные фильтры. Порядок фильтров может быть передан через@OrderАннотация для указания:

@Bean
@Order(-1)
public GlobalFilter a() {
    return (exchange, chain) -> {
        log.info("first pre filter");
        return chain.filter(exchange).then(Mono.fromRunnable(() -> {
            log.info("third post filter");
        }));
    };
}

@Bean
@Order(0)
public GlobalFilter b() {
    return (exchange, chain) -> {
        log.info("second pre filter");
        return chain.filter(exchange).then(Mono.fromRunnable(() -> {
            log.info("second post filter");
        }));
    };
}

@Bean
@Order(1)
public GlobalFilter c() {
    return (exchange, chain) -> {
        log.info("third pre filter");
        return chain.filter(exchange).then(Mono.fromRunnable(() -> {
            log.info("first post filter");
        }));
    };
}

другие функции

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

В частности, конечная точка привода позволяет нам использовать HTTP-запрос для динамического получения, добавления и удаления маршрутов. Использование конкретных методов и параметров Просмотрофициальная документация.

Настройка

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

Команда с регистрационными центрами

Лао Чжан: «Ну, вышеизложенное в основном суммирует функции Spring Cloud Gateway. Его также можно легко интегрировать с реестром Spring Cloud».

Сяоци продолжил то, что сказал Лао Чжан: «Да, Gateway можно легко использовать в сочетании с реестром, а Ribbon используется по умолчанию для достижения балансировки нагрузки. Вам нужно только добавить зависимость реестра, такую ​​как consul-discovery, а затем Просто откройте конфигурацию:"

spring.cloud.gateway.discovery.locator.enabled=true

"Таким образом, вы можете запросить/service-id/pathдля доступа к службе с именемservice-idмикросервиса/pathдорожка. Например:"

http://gateway:8080/service-user/hello

->

http://service-user:8080/hello

Вы также можете выполнить индивидуальную настройку микросервиса, см.Документация.

Балансировка нагрузки самого шлюза

Закончив говорить, Сяо Ци спросил: «Тогда есть только один шлюз для всех микросервисов. Что, если параллелизм возрастет и шлюз не выдержит?»

Лао Чжан сказал с улыбкой: «Как вы сказали выше, нижний слой шлюза пружинного облака является Netty, который сам может выдерживать относительно большое количество параллелизма. Если он все еще не может противостоять сумму параллелизма, вы можете зарегистрировать несколько Экземпляры шлюза, а затем получите NGINX или F5 и другие балансировки нагрузки. Общая картина такая: «

网关负载均衡
Балансировка нагрузки шлюза

Лао Чжан посмотрел на время, почти пора было ловить машину. "Давай остановимся здесь сегодня, поговорим в следующий раз~"

Об авторе

Публичный аккаунт WeChat: составлена ​​программа

Персональный сайт: https://yasinshaw.com

Псевдоним Ясин, программист с глубиной, отношением и теплотой. Делитесь техниками программирования и жизнью вне работы, если вам нравятся мои статьи, вы можете легко"обрати внимание на"Проверьте общедоступный номер, вы также можете"Вперед"Поделись с друзьями~

Нет ответа на общественное «интервью» или «обучение» может получить соответствующие ресурсы о ~

公众号
публика