Приложение Spring Cloud GateWay -> Высокая доступность

Spring Cloud

1. Введение в шлюз

Spring Cloud GateWay (это лишь одно из многих шлюзовых решений).

Spring Cloud GateWay — это совершенно новый проект Spring Cloud, призванный заменить Netflix Zuul, основанный наSpring5.0+SpringBoot2.0+WebFlux(На основе высокопроизводительного коммуникационного фреймворка Netty, реагирующего на режим Reactor, асинхронной неблокирующей модели) и других технических разработок, производительность выше, чем у Zuul, официального теста, GateWay в 1,6 раза выше, чем у Zuul, с целью обеспечения простого и эффективная микросервисная архитектура, единый метод управления маршрутизацией через API.

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

Расположение шлюза в архитектуре:

2. Основные концепции GateWay

Zuul1.x блокирует IO 2.x на основе Netty Spring Cloud GateWay по своей сути является асинхронным и неблокирующим, основанным на модели Reactor.

Запрос -> шлюз совпадает по определенным условиям — после успешного совпадения запрос может быть перенаправлен на указанный адрес службы; Во время процесса мы можем выполнять некоторые более конкретные элементы управления (текущий лимит, журнал, черный и белый список)

  • Маршрут: Самая основная часть шлюза и основная единица работы шлюза. Маршрут состоит из идентификатора, целевого URL-адреса (конечный маршрутизируемый адрес), ряда утверждений (условия соответствия) и фильтров (точный контроль). Если утверждение истинно, маршрут соответствует.
  • Предикаты: Ссылаясь на предикат java.util.function.Predicate в Java8, разработчики могут сопоставлять весь контент в запросах Http (включая заголовки запроса, параметры запроса и т. д.) (аналогично сопоставлению местоположения в nginx. например), маршрутизировать, если утверждение соответствует запросу.
  • filter (фильтр): стандартный веб-фильтр Spring, который использует фильтр для выполнения бизнес-логики до или после запроса.

Картинка с официального сайта

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

3. Как это работает в GateWay

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

Основная логика GateWay: переадресация маршрута + выполнение цепочки фильтров

4. Приложение шлюза

  • Импорт зависимостей, GateWay не нужно использовать веб-модули, он вводит WebFlux (аналогично SpringMVC),Примечание. Не импортируйте модуль start-web, вам нужно импортировать web-flux
  • часть конфигурационного файла application.yml
server:
  port: 9002
eureka:
  client:
    serviceUrl: # eureka server的路径
      defaultZone: http://127.0.0.1:8761/eureka/,http://127.0.0.1:8762/eureka/ #把 eureka 集群中的所有 url 都填写了进来,也可以只写一台,因为各个 eureka server 可以同步注册表
  instance:
    #使用ip注册,否则会使用主机名注册了(此处考虑到对老版本的兼容,新版本经过实验都是ip)
    prefer-ip-address: true

spring:
  application:
    name: gateway-9002
  cloud:
    # config客户端配置,和ConfigServer通信,并告知ConfigServer希望获取的配置信息在哪个文件中
    config:
      discovery:
        enabled: true
        service-id: config-bus-9006
    gateway:
      routes: # 路由可以有多个
        - id: lagou-service-user # 我们自定义的路由 ID,保持唯一
          uri: lb://lagou-service-user
          predicates:
            - Path=/api/user/**
        - id: lagou-service-code # 我们自定义的路由 ID,保持唯一
          uri: lb://lagou-service-code
          predicates:
            - Path=/api/code/**

5. Подробное объяснение правил маршрутизации GateWay

Реализовать динамическую маршрутизацию

GateWay поддерживает автоматический доступ к списку услуг из центра регистрации, так называемую динамическую маршрутизацию.

  • Добавьте зависимости клиента реестра в pom.xml (потому что для получения списка служб реестра был введен клиент eureka)
  • Конфигурация динамической маршрутизации

Примечание. Если установлена ​​динамическая маршрутизация, uri начинается с lb: // (lb означает получение услуг из центра регистрации), за которым следует имя службы, которую необходимо перенаправить на сказать

6. Фильтр шлюза

  • С точки зрения жизненного цикла фильтра (влияющего на момент времени) в основном есть два до и после:

  • С точки зрения типов фильтров фильтры Spring Cloud GateWay делятся на GateWayFilter и GlobalFilter.

  • Используйте следующим образом:

7. Высокая доступность шлюза

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