Gateway de microsserviço SpringCloud Gateway

Introdução ao Microservice Gateway


Introduzir

Depois de implementar vários microsserviços, como nossos vários microsserviços podem ser fornecidos para chamadas de aplicativos externos? ?
Claro, por ser uma interface Rest API, não há problema para clientes externos chamarem diretamente os microsserviços. Mas por várias razões, esta não é uma escolha muito boa. Deixe o cliente se comunicar diretamente com cada microsserviço, haverá os seguintes problemas.

  • O cliente solicitará diferentes microsserviços várias vezes, aumentando a complexidade do cliente
  • Existem solicitações entre domínios e o processamento se tornará relativamente complicado em determinados cenários
  • A implementação da autenticação é complicada e cada microsserviço requer autenticação independente
  • Difícil de refatorar, iteração do projeto, pode levar à repartição do microsserviço, se o cliente se comunicar diretamente com o microsserviço, a refatoração será difícil de implementar
  • Se alguns microsserviços usarem firewalls e protocolos hostis ao navegador, o acesso direto será difícil

Como devemos resolver os problemas acima? Pode ser resolvido através do gateway de serviço. Em um sistema de microsserviços, os recursos de microsserviços geralmente não são expostos diretamente ao acesso do cliente externo, o que tem a vantagem de ocultar os serviços internos para resolver os problemas acima. O gateway tem muitos significados importantes, que são incorporados nos seguintes aspectos:

  1. O gateway pode fazer alguma autenticação de identidade, gerenciamento de autoridade, impedir solicitações ilegais de autoridade de operação, etc., e desempenhar um certo papel na proteção do serviço
  2. O gateway gerencia todos os microsserviços de forma unificada e os expõe para o mundo externo.O sistema externo não precisa conhecer a complexidade da arquitetura de microsserviços chamando uns aos outros, e ainda evita o vazamento de algumas informações sensíveis dos serviços internos.
  3. Fácil de monitorar, os dados de monitoramento podem ser coletados no gateway de microsserviço e enviados para sistemas externos para análise
  4. O cliente lida apenas com o gateway de serviço, reduzindo o número de interações entre o cliente e cada microsserviço
  5. Suporte multicanal, pode fornecer diferentes gateways de API de acordo com diferentes clientes (WEB, celular, desktop,...)
  6. Gateways podem ser usados ​​para monitoramento de tráfego. Sob alta simultaneidade, limite e faça downgrade do serviço
  7. O gateway separa o serviço do interno, o que é conveniente para testar

O gateway de microsserviço pode realizar várias funções, como roteamento e balanceamento de carga. Funções semelhantes ao Nginx e proxy reverso. Na arquitetura de microsserviços, os serviços de back-end geralmente não são abertos diretamente para o chamador, mas são roteados para o serviço correspondente por meio de um gateway de API de acordo com a URL da solicitação. Quando o gateway de API é adicionado, entre o chamador terceirizado e o provedor de serviços Uma parede é criada para controlar as permissões no gateway da API e, ao mesmo tempo, o gateway da API a envia para o serviço de back-end com balanceamento de carga. Arquitetura de gateway de microsserviço:
insira a descrição da imagem aqui


1. Introdução ao Spring Cloud Gateway

springCloud é um novo projeto da spring Cloud, que é um gateway desenvolvido com base em tecnologias como Spring 5.0, spring Boot 2.0 e Project Reactor. Ele visa fornecer um método de gerenciamento de API unificado simples e eficaz para arquitetura de microsserviços

Como um gateway no ecossistema Spring Cloud, o SpringCloud Gateway pretende substituir o Zuul. Nas versões acima do Spring Cloud 2.0, ele não integra a versão mais recente de alto desempenho da nova versão do Zuul 2.0 e ainda usa a versão antiga do modo Reactor antes do Zuul 2.0. , e para melhorar o desempenho do gateway, o Spring Cloud Gateway é implementado com base na estrutura WebFlux, e a camada inferior da estrutura WebFlux usa a estrutura de comunicação do modo Reactor de alto desempenho Netty

O objetivo do Spring Cloud Gateway não é apenas fornecer um método de roteamento unificado, mas também fornecer funções básicas do gateway com base na cadeia de filtros, como: segurança, monitoramento/indicadores e limitação de corrente


2. Características

O SpringCloud apresenta oficialmente os recursos do SpringCloud Gateway da seguinte forma:

  • Baseado no Spring Framework 5, Project Reactor e Spring Boot 2.0
  • Integrar Spring Cloud Discovery Client
  • Predicados e Filtros atuam em rotas específicas, fáceis de escrever Predicados e Filtros
  • Com algumas funções avançadas do gateway, roteamento dinâmico, limitação de corrente, regravação de caminho
  • Disjuntor fusível integrado

Pelas características acima, não é muito diferente do Zuul. A principal diferença entre o Spring Cloud Gateway e o Zuul está na estrutura de comunicação subjacente.

Explique resumidamente os três termos acima:

  • Filter (filtro)
    é conceitualmente semelhante ao filtro de Zuul, que pode ser usado para interceptar e modificar solicitações e executar processamento secundário em respostas downstream. O filtro é uma instância da classe org.springframework.cloud.gateway.filter.GatewayFilter

  • O módulo de componente básico da configuração do gateway de rota (roteamento)
    é semelhante ao módulo de configuração de roteamento do Zuul. Um módulo de rota é definido por um ID, um URI de destino, um conjunto de asserções e um conjunto de filtros. Se a afirmação for verdadeira, a rota corresponde e o URI de destino é acessado.

  • Predicado (asserção)
    Este é um Predicado Java8, que pode ser usado para corresponder a qualquer conteúdo da solicitação HTTP, como cabeçalhos ou parâmetros, e o tipo de entrada da asserção é um ServerWebExchange

3. Como configurar o roteamento

O roteamento é o bloco de construção básico da configuração do gateway, semelhante ao módulo de configuração de roteamento do Zuul. Um módulo de rota é definido por um ID, um URI de destino, um conjunto de asserções e um conjunto de filtros. Se a afirmação for verdadeira, a rota corresponde e o URI de destino é acessado.

1. Método de configuração de roteamento básico:
Se o endereço solicitado for um único caminho de recurso de URI, o arquivo de configuração será o seguinte:

spring:
   application:
     name: api-gateway
   cloud:
     gateway:
       routes:
          - id: service1
            uri: https://blog.csdn.net
            predicates:
              - Path=/csdn

O significado de cada campo é o seguinte.
● id: Nosso ID de rota personalizado, mantenha-o exclusivo
● uri: Endereço de serviço de destino
● Predicados: Condições de roteamento, Predicado aceita um parâmetro de entrada e retorna um resultado booleano. Essa interface contém vários métodos padrão para combinar predicados em outra lógica complexa (como: AND, OR, NOT).
A configuração acima significa que está configurada uma regra de proxy URI com id url-proxy-1. A regra de roteamento é que ao acessar o endereço http://localhost:8080/csdn/1.jsp, ele será roteado para o endereço upstream https://blog.csdn.net/1.jsp.

2. Configuração de roteamento baseada em código

A função de encaminhamento também pode ser implementada por meio de código, podemos adicionar o método customRouteLocator() na classe de inicialização GateWayApplication para customizar as regras de encaminhamento

@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication {
    
    

    public static void main(String[] args) {
    
    
        SpringApplication.run(GatewayApplication.class, args);
    }

    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
    
    
        return builder.routes()
                .route("path_route", r -> r.path("/csdn")
                        .uri("https://blog.csdn.net"))
                .build();
    }
}

3. O método de configuração de roteamento combinado com o centro de registro

A parte do protocolo de esquema de uri é um tipo lb: personalizado, o que significa assinar serviços de um registro de microsserviço (como Eureka) e serviços de roteamento por meio de balanceamento de carga. código mostra como abaixo.

server:
  port: 9005
spring:
  application:
    name: api-gateway
  cloud:
    gateway:
      routes:
        - id: service1
          uri: https://blog.csdn.net
          predicates:
            - Path=/csdn
        - id: service2
#          uri: http://127.0.0.1:9001
          uri: lb://cloud-payment-service
          predicates:
            - Path=/payment/**
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:9004/eureka

4. Regras de correspondência de roteamento

A principal função do Spring Cloud Gateway é encaminhar solicitações. A definição das regras de encaminhamento inclui principalmente três partes:

  • Rota (roteamento): A rota é a unidade básica do gateway. Ela consiste em ID, URI, um conjunto de Predicados e um conjunto de Filtros. Ela é correspondida e encaminhada de acordo com os Predicados.
  • Predicado (predicado, assertion): Condições de julgamento para encaminhamento de roteamento. Atualmente, o SpringCloud Gateway suporta várias formas, como: Path, Query, Method, Header, etc. O método de escrita deve seguir a forma de chave = valor
  • Filter (filtro): O filtro é a lógica de filtragem por onde a solicitação é encaminhada, que pode ser usada para modificar o conteúdo da solicitação e da resposta

5. Recursos avançados

  • Rebaixamento de fusível
    Em um sistema distribuído, o gateway é a entrada do tráfego, portanto, um grande número de solicitações entrará no gateway e iniciará chamadas para outros serviços. Outros serviços inevitavelmente falharão na chamada (tempo limite, exceção) e as solicitações não podem ser acumuladas na falha No gateway, ele precisa falhar rapidamente e retornar ao cliente.Para atender a esse requisito, é necessário realizar operações de fusível e downgrade no gateway.
    Por que a falha de solicitação no gateway precisa ser retornada rapidamente ao cliente? Porque quando uma solicitação do cliente falha, a solicitação sempre será acumulada no gateway. Claro, existe apenas uma solicitação e o gateway não deve ter nenhum problema (se uma solicitação pode causar a paralisação de todo o sistema, então o sistema pode ser retirado das prateleiras), mas o acúmulo no gateway causará uma enorme pressão no gateway e até em todo o servidor para garantir o funcionamento normal do core business e, ao mesmo tempo, manter a resposta correta dos clientes e da maioria dos clientes , portanto, a falha de solicitação no gateway precisa ser retornada rapidamente ao cliente.
    O filtro CircuitBreaker agrupa rotas de gateway em disjuntores usando a API Spring Cloud CircuitBreaker. O Spring Cloud CircuitBreaker suporta várias bibliotecas de disjuntores que podem ser usadas com o Spring Cloud Gateway. Por exemplo, Spring Cloud suporta Resilience4j pronto para uso.

Acho que você gosta

Origin blog.csdn.net/CXgeng/article/details/123011412
Recomendado
Clasificación