Puerta de enlace de microservicios Puerta de enlace de SpringCloud

Introducción a la puerta de enlace de microservicios


Introducir

Después de haber implementado varios microservicios, ¿cómo se pueden proporcionar nuestros diversos microservicios para llamadas de aplicaciones externas? ?
Por supuesto, debido a que es una interfaz API Rest, no hay problema para que los clientes externos llamen directamente a los microservicios. Pero por varias razones, esta no es una muy buena opción. Deje que el cliente se comunique directamente con cada microservicio, habrá los siguientes problemas.

  • El cliente solicitará diferentes microservicios varias veces, aumentando la complejidad del cliente
  • Hay solicitudes entre dominios y el procesamiento se volverá relativamente complicado en ciertos escenarios.
  • La implementación de la autenticación es complicada y cada microservicio requiere una autenticación independiente
  • Difícil de refactorizar, la iteración del proyecto puede conducir a la repartición de microservicios, si el cliente se comunica directamente con el microservicio, entonces la refactorización será difícil de implementar
  • Si algunos microservicios usan firewalls y protocolos que no son compatibles con los navegadores, el acceso directo será difícil

¿Cómo debemos resolver los problemas anteriores? Se puede solucionar a través de la puerta de enlace del servicio. En un sistema de microservicios, los recursos de microservicios generalmente no están directamente expuestos al acceso de clientes externos, lo que tiene la ventaja de ocultar los servicios internos para resolver los problemas anteriores. La puerta de enlace tiene muchos significados importantes, que se plasman en los siguientes aspectos:

  1. La puerta de enlace puede realizar alguna autenticación de identidad, gestión de autoridad, evitar solicitudes ilegales de autoridad de operación, etc., y desempeñar un papel determinado en la protección del servicio.
  2. La puerta de enlace administra todos los microservicios de manera unificada y los expone al mundo exterior. El sistema externo no necesita conocer la complejidad de las llamadas mutuas de la arquitectura de microservicios, y también evita la fuga de información confidencial de los servicios internos.
  3. Fácil de monitorear, los datos de monitoreo se pueden recopilar en la puerta de enlace de microservicios y enviarlos a sistemas externos para su análisis.
  4. El cliente solo trata con la puerta de enlace del servicio, lo que reduce la cantidad de interacciones entre el cliente y cada microservicio.
  5. Soporte multicanal, puede proporcionar diferentes puertas de enlace API según diferentes clientes (WEB, móvil, escritorio,...)
  6. Las puertas de enlace se pueden utilizar para la supervisión del tráfico. Bajo alta concurrencia, limitar y degradar el servicio
  7. La puerta de enlace separa el servicio del interno, lo cual es conveniente para las pruebas

La puerta de enlace de microservicio puede realizar varias funciones, como el enrutamiento y el equilibrio de carga. Funciones similares a Nginx y proxy inverso. En la arquitectura de microservicios, los servicios de back-end a menudo no se abren directamente a la persona que llama, sino que se enrutan al servicio correspondiente a través de una puerta de enlace API de acuerdo con la URL de la solicitud. Cuando se agrega la puerta de enlace API, entre la persona que llama de terceros y el proveedor de servicios Se crea un muro para controlar los permisos en la puerta de enlace de la API y, al mismo tiempo, la puerta de enlace de la API lo envía al servicio de back-end con equilibrio de carga. Arquitectura de puerta de enlace de microservicio:
inserte la descripción de la imagen aquí


1. Introducción a Spring Cloud Gateway

springCloud es un nuevo proyecto de spring Cloud, que es una puerta de enlace desarrollada en base a tecnologías como Spring 5.0, spring Boot 2.0 y Project Reactor. Su objetivo es proporcionar un método de gestión de API unificado simple y eficaz para la arquitectura de microservicios.

Como puerta de enlace en el ecosistema de Spring Cloud, SpringCloud Gateway tiene como objetivo reemplazar a Zuul. En las versiones anteriores a Spring Cloud 2.0, no integra la última versión de alto rendimiento de la nueva versión de Zuul 2.0, y aún usa la versión anterior del modo Reactor. antes de Zuul 2.0., y para mejorar el rendimiento de la puerta de enlace, Spring Cloud Gateway se implementa en base al marco WebFlux, y la capa inferior del marco WebFlux utiliza el marco de comunicación de modo Reactor de alto rendimiento Netty

El objetivo de Spring Cloud Gateway no es solo proporcionar un método de enrutamiento unificado, sino también proporcionar funciones básicas de la puerta de enlace basadas en la cadena de filtros, como: seguridad, monitoreo/indicadores y limitación de corriente.


2. Características

SpringCloud presenta oficialmente las características de SpringCloud Gateway de la siguiente manera:

  • Basado en Spring Framework 5, Project Reactor y Spring Boot 2.0
  • Integrar el cliente Spring Cloud Discovery
  • Los predicados y filtros actúan en rutas específicas, fácil de escribir Predicados y filtros
  • Con algunas funciones avanzadas de la puerta de enlace, enrutamiento dinámico, limitación de corriente, reescritura de ruta
  • Fusible integrado Disyuntor

De las características anteriores, no es muy diferente de Zuul.La principal diferencia entre Spring Cloud Gateway y Zuul radica en el marco de comunicación subyacente.

Explique brevemente los tres términos anteriores:

  • Filter (filtro)
    es conceptualmente similar al filtro de Zuul, que se puede usar para interceptar y modificar solicitudes, y realizar un procesamiento secundario en las respuestas posteriores. El filtro es una instancia de la clase org.springframework.cloud.gateway.filter.GatewayFilter

  • El módulo de componentes básicos de la configuración de la puerta de enlace Route (enrutamiento)
    es similar al módulo de configuración de enrutamiento de Zuul. Un módulo de ruta se define mediante un ID, un URI de destino, un conjunto de aserciones y un conjunto de filtros. Si la afirmación es verdadera, la ruta coincide y se accede al URI de destino.

  • Predicado (afirmación)
    Este es un predicado Java8, que se puede usar para hacer coincidir cualquier contenido de la solicitud HTTP, como encabezados o parámetros, y el tipo de entrada de la afirmación es un ServerWebExchange

3. Cómo configurar el enrutamiento

El enrutamiento es el componente básico de la configuración de la puerta de enlace, similar al módulo de configuración de enrutamiento de Zuul. Un módulo de ruta se define mediante un ID, un URI de destino, un conjunto de aserciones y un conjunto de filtros. Si la afirmación es verdadera, la ruta coincide y se accede al URI de destino.

1. Método de configuración de enrutamiento básico:
si la dirección solicitada es una ruta de recurso de URI única, el archivo de configuración es el siguiente:

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

El significado de cada campo es el siguiente.
● id: nuestra ID de ruta personalizada, manténgala única
● uri: dirección de servicio de destino
● Predicados: condiciones de enrutamiento, el predicado acepta un parámetro de entrada y devuelve un resultado booleano. Esta interfaz contiene varios métodos predeterminados para combinar predicados en otra lógica compleja (como: Y, O, NO).
La configuración anterior significa que se configura una regla de proxy URI con una identificación de url-proxy-1.La regla de enrutamiento es que al acceder a la dirección http://localhost:8080/csdn/1.jsp, se enrutará al Dirección ascendente https://blog.csdn.net/1.jsp.

2. Configuración de enrutamiento basada en código

La función de reenvío también se puede implementar a través del código, podemos agregar el método customRouteLocator() en la clase de inicio GateWayApplication para personalizar las reglas de reenvío.

@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. El método de configuración de enrutamiento combinado con el centro de registro

La parte del protocolo de esquema de uri es un tipo lb: personalizado, lo que significa suscribirse a servicios desde un registro de microservicios (como Eureka) y servicios de enrutamiento a través del equilibrio de carga. el código se muestra a continuación.

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. Reglas de coincidencia de enrutamiento

La función principal de Spring Cloud Gateway es reenviar solicitudes. La definición de reglas de reenvío incluye principalmente tres partes:

  • Ruta (enrutamiento): la ruta es la unidad básica de la puerta de enlace. Consta de ID, URI, un conjunto de predicados y un conjunto de filtros. Se empareja y reenvía de acuerdo con los predicados.
  • Predicado (predicado, afirmación): Condiciones de juicio para el reenvío de enrutamiento. Actualmente, SpringCloud Gateway admite varias formas, como: ruta, consulta, método, encabezado, etc. El método de escritura debe seguir la forma de clave = valor
  • Filtro (filtro): El filtro es la lógica de filtrado que se pasa cuando se reenvía la solicitud, que se puede utilizar para modificar el contenido de la solicitud y la respuesta.

5. Funciones avanzadas

  • Fusible de degradación
    En un sistema distribuido, la puerta de enlace es la entrada del tráfico, por lo que una gran cantidad de solicitudes ingresarán a la puerta de enlace e iniciarán llamadas a otros servicios. Otros servicios inevitablemente no podrán llamar (tiempos de espera, excepciones). Cuando ocurren fallas, las solicitudes no se puede acumular en el En la puerta de enlace, debe fallar rápidamente y volver al cliente Para lograr este requisito, es necesario realizar operaciones de fusión y degradación en la puerta de enlace.
    ¿Por qué es necesario devolver rápidamente al cliente el error de solicitud en la puerta de enlace? Porque cuando la solicitud de un cliente falla, la solicitud siempre se acumulará en la puerta de enlace. Por supuesto, solo hay una solicitud de este tipo, y la puerta de enlace no debe tener ningún problema (si una solicitud puede hacer que todo el sistema se paralice, entonces el sistema se pueden sacar de los estantes), pero la acumulación en la puerta de enlace causará una gran presión en la puerta de enlace e incluso en todo el servidor para garantizar el funcionamiento normal del negocio principal y, al mismo tiempo, mantener la respuesta correcta de los clientes y la mayoría de los clientes. , por lo que el error de solicitud en la puerta de enlace debe devolverse rápidamente al cliente.
    El filtro CircuitBreaker envuelve las rutas de la puerta de enlace en los interruptores automáticos mediante la API de Spring Cloud CircuitBreaker. Spring Cloud CircuitBreaker admite varias bibliotecas de disyuntores que se pueden usar con Spring Cloud Gateway. Por ejemplo, Spring Cloud es compatible con Resilience4j desde el primer momento.

Supongo que te gusta

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