EDAS dos o tres estrategias para hacer que la producción de Spring Cloud Gateway esté disponible

Autor: kirito

Spring Cloud Gateway es un componente de puerta de enlace del ecosistema de microservicios Spring Cloud, que siempre ha atraído la atención de los usuarios de la comunidad Java y muchas empresas optan por utilizarlo como puerta de enlace de microservicios o puerta de enlace empresarial. En Alibaba Cloud, hay muchos productos de tipo puerta de enlace para que los utilicen los usuarios, como API Gateway y MSE Higress, que utilizan un método PaaS para proporcionar capacidades de puerta de enlace. Los usuarios ya no necesitan prestar atención a la implementación de la puerta de enlace y obtener directamente capacidades listas para usar. . En el pasado, los usuarios sólo podían elegir entre construir su propio Spring Cloud Gateway o comprar productos en la nube, sin embargo, el nuevo enfoque de EDAS para mejorar Spring Cloud Gateway presentado hoy ofrece a los usuarios una nueva opción.

Preparar Spring Cloud Gateway para producción

El Spring Cloud Gateway de código abierto tiene algunos factores que preocupan a los usuarios empresariales, incluidas pérdidas de memoria y problemas de diseño de enrutamiento. EDAS ha gestionado muchos problemas existentes basándose en la experiencia de Spring Cloud Gateway acumulada durante muchos años por el bus de servicios en la nube CSB. Muchos factores de riesgo tienen También se ha evitado, eliminando por completo las preocupaciones de los usuarios sobre el uso de la tecnología Spring Cloud Gateway.

  • Problema de pérdida de memoria, este problema proviene de la práctica de producción de CSB. La capa inferior de Spring Cloud Gateway depende de netty para la comunicación IO. Las personas familiarizadas con netty deben saber que tiene un diseño de búfer de lectura y escritura. Si el contenido de la comunicación es pequeño , el búfer fragmentado generalmente se verá afectado. Cuando el contenido de la comunicación es grande, como la carga de archivos, se activará una nueva asignación de memoria. Sin embargo, Spring Cloud Gateway tiene un defecto lógico al acoplarse con netty, lo que provocará que el buffer recién asignado se afecte. la memoria no se recicla por completo, lo que provoca pérdidas de memoria fuera del montón. Además, netty asigna esta memoria fuera del montón de forma insegura y no se puede observar a través de herramientas JVM convencionales, por lo que está muy oculta.

EDAS recomienda agregar el parámetro de inicio -Dio.netty.allocator.type=unpooled a la aplicación Spring Cloud Gateway para que cuando una solicitud pierda el búfer fragmentado, la memoria temporal asignada no se agrupe para evitar pérdidas de memoria.

-Dio.netty.allocator.type=unpooled no causará degradación del rendimiento. Sólo los paquetes grandes activarán la asignación de esta memoria. La mejor práctica para la puerta de enlace no debería permitir la carga de archivos. Este parámetro se agrega para un comportamiento de encubrimiento para Tratar escenas no convencionales.

  • El Spring Cloud Gateway de código abierto no proporciona capacidades de verificación de la configuración de enrutamiento. Cuando ocurren errores de configuración de enrutamiento, puede tener consecuencias catastróficas. Por ejemplo, al configurar el enrutamiento, escribir POST por error en lugar de PEST: predicados: Método = PEST puede causar Todas las rutas en La puerta de enlace no es válida y el radio de explosión es extremadamente grande.

EDAS recomienda configurar spring.cloud.gateway.fail-on-route-definition-error: false para que las aplicaciones Spring Cloud Gateway reduzcan el radio de explosión. Las rutas creadas a través de EDAS serán verificadas para asegurar que el formato de la ruta es correcto y evitar problemas con antelación.

Los anteriores son solo algunos casos en los que EDAS mejora la solución Spring Cloud Gateway: EDAS protege integralmente las puertas de enlace de los usuarios en términos de rendimiento, seguridad, estabilidad, etc., permitiendo a los usuarios regresar completamente al negocio.

Centrándose en el tema básico de hacer que Spring Cloud Gateway esté disponible para producción y permitir a los usuarios usar Spring Cloud Gateway en la nube con confianza, EDAS ha lanzado una nueva característica para mejorar Spring Cloud Gateway de una manera no intrusiva.

Características

Como todos sabemos, las aplicaciones Java implementadas en EDAS montarán un Agente Java. A través de la tecnología del Agente Java, EDAS proporciona capacidades ricas de gobernanza y observabilidad de microservicios. Las capacidades mejoradas de Spring Cloud Gateway presentadas esta vez también utilizan este Agente Java. Implementación del agente.

El cambio más intuitivo provocado por la mejora de EDAS Spring Cloud Gateway es proporcionar una consola de pantalla blanca para facilitar las operaciones del usuario y proporcionar muchas capacidades mejoradas:

  • Configuración dinámica
  • Complemento personalizado
  • Depuración de rutas
  • Rebaja limitante actual
  • Observabilidad mejorada

Para facilitar que los usuarios tengan una comprensión intuitiva, este artículo comienza con un inicio rápido.

Implementar Spring Cloud Gateway

Los usuarios pueden empaquetar el Spring Cloud Gateway existente en un paquete o imagen jar e implementarlo en EDAS, o pueden usar el paquete de implementación de demostración proporcionado por EDAS para la implementación. Como se muestra en la figura anterior, EDAS ha admitido recientemente el paquete de implementación de demostración de la aplicación Spring Cloud Gateway. En este paquete de implementación, se configuró de antemano un centro de registro de Nacos y se conectará automáticamente al espacio de microservicio implementado actualmente sin ningún enrutamiento configurado. , dado que la configuración de enrutamiento dinámico se demostrará a continuación, no es necesario configurarla en el archivo de configuración por adelantado. Todo el proceso de implementación no es diferente de implementar una aplicación de microservicio normal.

Crea rutas y prueba

EDAS reconocerá las características de la aplicación Spring Cloud Gateway y agregará dinámicamente el menú de la puerta de enlace de la aplicación a la barra de menú. En el inicio rápido, el ejemplo crea dos rutas, a saber, el escenario de solicitud directa en formato http:// y el escenario de descubrimiento de servicios en formato lb://. Para facilitar las pruebas, puede configurar un SLB de red pública para la aplicación de puerta de enlace en la descripción general de la aplicación y probarlo mediante solicitudes curl:

~ curl 121.xx.xx.xx/httpbin/get
{
  "args": {},
  "headers": {
    "Aaa": "ccc",
    "Accept": "*/*",
    "Content-Length": "0",
    "Eagleeye-Ip": "192.168.2.1",
    "Eagleeye-Pappname": "5ae05114-bc80-4a32-9048-209b3a93d723",
    "Eagleeye-Prpc": "/httpbin/get",
    "Eagleeye-Pspanid": "-7254661991881594415",
    "Eagleeye-Root-App": "5ae05114-bc80-4a32-9048-209b3a93d723",
    "Eagleeye-Rpcid": "0.2.1",
    "Eagleeye-Sampled": "s0",
    "Eagleeye-Spanid": "-1207596966212570593",
    "Eagleeye-Traceid": "eac0a8020116974429411421021d0001",
    "Eagleeye-Userdata": "__microservice_match_result__=[]",
    "Forwarded": "proto=http;host=121.xx.xx.xx;for=\"140.xx.xx.xx\"",
    "Gfs.Scg.Ip": "192.168.2.1",
    "Host": "httpbin.org",
    "Name": "kirito,kirito",
    "User-Agent": "curl/7.64.1",
    "X-Amzn-Trace-Id": "Root=1-652cec7d-50f852f622c546f20f8997fe",
    "X-Forwarded-Host": "121.xx.xx.xx",
    "X-Forwarded-Prefix": "/httpbin"
  },
  "origin": "121.xx.xx.xx, 47.xx.xx.xx",
  "url": "http://121.xx.xx.xx/get"
}

La puerta de enlace reenvió correctamente la solicitud y se completa la prueba de enrutamiento.

Ventajas de la solución

En las siguientes situaciones, puede considerar utilizar la solución de mejora EDAS Spring Cloud Gateway:

  • Ya estoy usando Spring Cloud Gateway
  • La puerta de enlace tiene fuertes necesidades de personalización empresarial, como el acoplamiento del sistema de autoridad/usuario a nivel empresarial.
  • La pila de tecnología Java domina, con la esperanza de tener control independiente sobre los componentes de la puerta de enlace.
  • El servicio backend de la puerta de enlace utiliza la pila de tecnología Spring Cloud

La solución de mejora Spring Cloud Gateway proporcionada por EDAS desacopla los atributos comerciales y los atributos de middleware de la puerta de enlace. Los usuarios pueden centrarse en el desarrollo secundario basado en Spring Cloud Gateway de código abierto, inyectar lógica empresarial compleja e integrar las funciones de la puerta de enlace (configuración dinámica , degradación del límite actual, etc.), la seguridad, el rendimiento y otros atributos del middleware se entregan a EDAS.

Para los usuarios que ya utilizan Spring Cloud Gateway, cuando la aplicación Spring Cloud Gateway está alojada en EDAS, no es necesario cambiar ningún código y pueden obtener muchas capacidades mejoradas conservando los puntos de extensión originales. En el futuro, el desarrollo secundario aún se puede continuar en función de la aplicación, de modo que la aplicación de puerta de enlace pueda obtener la misma experiencia de desarrollo que la aplicación comercial. En términos de soporte para extensiones personalizadas, las puertas de enlace PaaS tradicionales generalmente requieren que los usuarios se adapten a las propias especificaciones de la puerta de enlace y utilicen lenguajes desconocidos o mecanismos de complemento, lo que implica ciertos costos y riesgos de aprendizaje.

Si el usuario actualmente no tiene una puerta de enlace, considera agregar una nueva puerta de enlace y está investigando soluciones de puerta de enlace, debe considerar completamente sus escenarios comerciales. Si cumple con palabras clave como pila de tecnología Java y sistema de microservicio Spring Cloud, también puede darle prioridad a esta solución.

En comparación con el mismo tipo de productos de puerta de enlace PaaS en Alibaba Cloud, también tienen sus propios escenarios de uso: por ejemplo, API Gateway puede lograr una gestión de API refinada y MSE Higress se puede utilizar como una puerta de enlace tres en uno o como una implementación. del ingreso K8. Puede decidir la solución de puerta de enlace según sus propias necesidades. La solución Spring Cloud Gateway mejorada de EDAS agrega una nueva opción para los usuarios.

En comparación con Spring Cloud Gateway de código abierto, la solución de mejora del Agente EDAS tiene las siguientes mejoras de capacidades porque es 100% compatible con las funciones de código abierto.

Mejora de la habilidad

Capacidad de configuración dinámica

EDAS proporciona capacidades de configuración dinámica para el enrutamiento (Ruta) y los complementos (Filtro de puerta de enlace) de Spring Cloud Gateway, que se presentan en una pantalla blanca para facilitar la configuración del usuario.

Si las rutas se configuraron en el proyecto Spring Cloud Gateway, por ejemplo, en application.yml y en la consola EDAS al mismo tiempo, estas rutas eventualmente se fusionarán en un conjunto de rutas. Cabe señalar que la consola EDAS solo mostrará la configuración de enrutamiento publicada por EDAS y no mostrará la configuración en application.yml, pero de hecho ambas rutas tendrán efecto. Al utilizar esta solución, se recomienda que los usuarios migren la configuración a la consola EDAS mediante la importación y exportación de configuraciones para facilitar la administración unificada.

Importación y exportación de configuración

Tanto el enrutamiento como los complementos globales admiten la creación a través de Yaml. El formato de Yaml sigue la especificación de esquema del Spring Cloud Gateway de código abierto. Los siguientes son dos ejemplos de configuración:

spring:
  cloud:
    gateway:
      routes:
      # 1. 利用域名进行路由匹配,且后端是固定 HTTP URL 的场景
      - id: r-demo
        predicates:
        # 只有域名为 demo.com 的请求才会匹配上该路由
        - Host=demo.com
        filters:
        # 该插件在转发请求时,在请求头中添加 Header 键值对
        - AddRequestHeader=a,b
        # uri 里填写后端 HTTP URL
        uri: http://demo.com
        # order 代表路由的优先级,值越小,优先级越高
        order: 1000
      # 2. 利用路径前缀进行路由匹配,且后端是微服务的场景
      - id: r-demo-2
        predicates:
        # 请求路径以 /demo-2 开头,才会匹配上该路由
        - Path=/demo-2/**
        filters:
        # 该插件确保请求在转发至后端服务时,会移除掉 /demo-2 的前缀
        - StripPrefix=1
        # 后端为微服务时,uri应该以 lb:// 开头,并填写服务名
        uri: lb://service-provider
        # 可以为路由添加元数据,以在插件中使用
        metadata:
          ccc: ddd
          eee: 10
        order: 1000

Routing r-demo es un ejemplo de configuración para enrutar a través de nombres de dominio. El servicio backend corresponde a una dirección solicitada directamente. Routing r-demo-2 es un ejemplo de configuración para enrutar por coincidencia de prefijos de ruta. El complemento StripPrefix está configurado para que al reenviar Al llegar al backend, elimine el prefijo utilizado para la coincidencia y el servicio de backend comienza con lb, lo que indica un escenario de descubrimiento de servicios.

También admite la visualización por lotes de definiciones de enrutamiento de Yaml:

El diseño de la creación y visualización de Yaml debe alinearse con las especificaciones del código abierto Spring Cloud Gateway tanto como sea posible. Si el usuario es un usuario experimentado del código abierto Spring Cloud Gateway, esto preservará la experiencia original del usuario.

Al mismo tiempo, con la ayuda de esta función, se puede sincronizar la configuración de múltiples conjuntos de puertas de enlace. Por ejemplo, después de que un lote de rutas se haya verificado en el entorno de prueba y deba migrarse a la puerta de enlace de producción, solo Debe seleccionar y exportar las rutas en el entorno de prueba y luego importarlas a la puerta de enlace de producción.

También puede utilizar esta función para importar las rutas en el archivo de configuración local del usuario a EDAS, que será completamente administrado por EDAS. Las capacidades de configuración dinámica proporcionadas por EDAS serán más convenientes de usar.

Interacción de complementos

Spring Cloud Gateway proporciona un mecanismo de complemento muy rico (GatewayFilter) que permite la configuración a nivel global y de enrutamiento. Sobre esta base, EDAS mejora la facilidad de uso de los complementos.

La configuración del complemento nativo de Spring Cloud Gateway adopta un método de configuración simplificado. Para algunos complementos menos utilizados, es difícil juzgar intuitivamente cómo agregar parámetros. En EDAS, no existe tal problema. EDAS interpretará los complementos explicación y parámetros Descomponga si es necesario, el significado de los parámetros y el número de parámetros para evitar un uso indebido.

Referencia del complemento:

Una cosa a tener en cuenta es que estos complementos pueden agregarse repetidamente, pero se recomienda configurar algunos complementos solo una vez, como StripPrefix, SetPath, etc.; de lo contrario, se producirá un comportamiento desconocido.

examen rápido

Para las aplicaciones Spring Cloud Gateway, EDAS enumerará las rutas de enrutamiento en la consola para que los usuarios realicen pruebas de enrutamiento. Con la ayuda de la capacidad de prueba rápida, puede verificar rápidamente la configuración de enrutamiento una vez completada para determinar si la configuración es correcta.

observable

El Spring Cloud Gateway de código abierto no está equipado con el registro de acceso que debería tener el gateway. EDAS completa esta capacidad necesaria. Cualquier solicitud que pase a través del gateway se imprimirá en /home/admin/.opt/ArmsAgent/logs/scg-access .ruta de registro. A continuación, los usuarios pueden verlo en el centro de registro de los detalles de la aplicación:

Los usuarios pueden optar por recopilar estos datos en SLS o en un centro de registro personalizado para su seguimiento.

Descripción del formato de registro access.log:

número de serie ilustrar Nombre del campo Ejemplo de contenido
1 tiempo de registro fecha y hora 2023-06-19 16:06:53 966
2 Solicitar ID de seguimiento ID de seguimiento 0ab32f9f15293956139457176d485a
3 IP del cliente ipcliente 127.0.0.1
4 Método de solicitud método CONSEGUIR
5 Solicitar ruta camino /httpbin/obtener
6 Solicitar tamaño de datos SolicitudTamaño 122
7 Solicitar hora de inicio hora de inicio 1667381534546
8 ID de ruta coincidente ID de ruta sc-A
El URI correspondiente a la ruta. rutaUri http://httpbin.org:80、lb://sc-A
9 Hora de inicio de la llamada de backend backendStartTime 1667381534546
10 Método de solicitud de backend backendMétodo CONSEGUIR
11 URL de solicitud de backend URL de backend httpbin.org/get
13 Tamaño del cuerpo de la solicitud de backend backendRequestSize 122
14 Código de respuesta de backend código de estado del backend 200
15 Tamaño del cuerpo de respuesta de backend backendResponseSize 433
dieciséis Hora de finalización de la llamada de backend backendEndTIme 1667381534560
17 Tiempo de llamada de backend backendRt 14
18 Solicitar código de respuesta código de estado 200
19 Solicitar tamaño del cuerpo de respuesta tamaño de respuesta 433
20 ¿La llamada fue exitosa? estado EXITO FRACASO
21 mensaje de error mensaje de error En caso de éxito: - Imprima información específica en caso de falla, por ejemplo: Servicio no disponible
22 Solicitar hora de finalización hora de finalización 1667381534565
23 Tiempo total de solicitud rt 19

Planificación de seguimiento

La solución Spring Cloud Gateway mejorada de EDAS proporcionará más capacidades en el futuro para enriquecer el ecosistema de la puerta de enlace. Las capacidades actualmente planificadas incluyen:

  • Enriquezca el ecosistema de complementos, agregue autenticación, reducción del límite actual y complementos entre dominios
  • Acceda a microservicios en espacios de microservicios
  • Admite indicadores de métricas y proporciona monitoreo de recursos de puerta de enlace y monitoreo comercial
  • Capacidad de resolución de problemas de QOS independiente

Los usuarios pueden darnos su opinión y comunicarse con nosotros. Grupo de comunicación DingTalk: 23197114.

Para obtener experiencia, consulte la documentación del usuario: https://help.aliyun.com/zh/edas/user-guide/spring-cloud-gateway-application-routing

El autor de un conocido proyecto de código abierto perdió su trabajo debido a la manía: "Buscar dinero en línea" No Star, No Fix 2023 Se publican los diez principales logros de ingeniería del mundo: ChatGPT, el sistema operativo Hongmeng, la estación espacial de China y otros ByteDance seleccionados fueron "prohibidos" por OpenAI Google anuncia la extensión de Chrome más popular en 2023 Académico Ni Guangnan: Espero que los SSD nacionales reemplacen los HDD importados para desbloquear el teléfono móvil Xiaomi BL. Primero, responda una pregunta de entrevista para programadores de Java. Arm despidió a más de 70 ingenieros chinos y planeó reorganizar su negocio de software en China. ¡ OpenKylin 2.0 revela | UKUI 4.10 diseño de doble diamante, hermoso y de alta calidad! Manjaro 23.1 lanzado, con nombre en código “Vulcan”
{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/u/3874284/blog/10347977
Recomendado
Clasificación