Nativo avanzado de la nube - Lanzamiento oficial de Dubbo 3.2

Autor: Comunidad Dubbo

¡Estamos muy contentos de anunciar que Dubbo 3.2 ha sido lanzado oficialmente! Esta versión trae muchas características nuevas y mejoras, lo que también es un intento importante de Dubbo frente a la nativoización de la nube.

introducción de fondo

Apache Dubbo es un marco de desarrollo de servicios RPC, que se utiliza para resolver problemas de comunicación y gobierno de servicios bajo la arquitectura de microservicios.Ofrece oficialmente implementaciones de SDK en varios idiomas, como Java y Golang. Los microservicios desarrollados con Dubbo tienen capacidades nativas de comunicación y descubrimiento de direcciones remotas entre sí. Al usar las ricas funciones de gobierno de servicios proporcionadas por Dubbo, se pueden cumplir las demandas de gobierno de servicios, como el descubrimiento de servicios, el equilibrio de carga y la programación del tráfico. Dubbo está diseñado para ser altamente escalable y los usuarios pueden implementar fácilmente varias lógicas personalizadas para la intercepción de tráfico y la selección de ubicación.

01 soporte de protocolo de descanso

1.1 ¿Por qué descansar?

Con la popularización de Internet móvil, cada vez más aplicaciones deben integrarse con diferentes sistemas. Y estos sistemas pueden usar diferentes protocolos de comunicación, lo que requiere que el programa de aplicación pueda adaptarse de manera flexible a varios protocolos. El protocolo Rest es un protocolo muy flexible que se comunica mediante HTTP y se puede integrar con casi cualquier sistema.

En el pasado, los marcos RPC normalmente se comunicaban mediante un protocolo binario, que era muy eficiente pero no lo suficientemente flexible. Por el contrario, el protocolo Rest utiliza HTTP para la comunicación, que es más fácil de integrar con otros sistemas y también es más fácil de integrar con aplicaciones web y móviles modernas.

Además de la flexibilidad, el protocolo Rest también es legible y fácil de usar. Usando el protocolo Rest, los desarrolladores pueden probar y depurar servicios usando herramientas HTTP comunes como cURL o Postman, sin necesidad de herramientas específicas. Además, dado que el protocolo Rest utiliza métodos HTTP estándar como GET, POST, PUT y DELETE, facilita que los desarrolladores comprendan y consuman el servicio.

1.2 ¿Cómo?

En la versión anterior de Dubbo, también se proporcionaba soporte para el protocolo Rest, pero había los siguientes problemas:

  • Solo admite campos de anotaciones JAX-RS, que son más complejos que las anotaciones Spring Web más utilizadas.
  • Necesita depender de muchos componentes externos, como Resteasy, tomcat, jetty, etc., para funcionar normalmente, lo que aumenta considerablemente el costo de uso.

Por lo tanto, en la versión 3.2 de Dubbo, introdujimos la compatibilidad con el dominio de anotaciones Spring Web y la compatibilidad nativa con el protocolo Rest sin depender de ningún componente externo.

La diferencia más intuitiva es que si actualiza a Dubbo 3.2, los servicios publicados a través de Spring Web también se pueden publicar directamente a través de Dubbo. Todo lo que necesita hacer es cambiar la anotación @Controller a la anotación @DubboService.

Además, para los usuarios que originalmente usaron Spring Boot o Spring Cloud como una división de servicios, también pueden migrar sin problemas a Dubbo en función de esta función y obtener las poderosas capacidades de Dubbo a un costo muy bajo.

1.3 ¿Qué sigue?

A continuación, Dubbo seguirá mejorando. Además de las funciones existentes, también agregaremos las siguientes funciones nuevas para satisfacer mejor las necesidades:

  1. Soporte nativo para los protocolos HTTP/2 y HTTP/3. Esto significa que puede usar Dubbo para comunicarse con otros sistemas de manera más conveniente sin preocuparse por la compatibilidad del protocolo.
  2. En referencia a las anotaciones de Spring Web, Dubbo brinda soporte de forma nativa para las anotaciones de Web, de modo que los usuarios puedan obtener la misma experiencia que al usar Spring Web sin depender de Spring Web.
  3. Admita la transformación cero de los servicios existentes y publíquelos con el protocolo Rest. Esta función le permite administrar sus servicios de manera más flexible sin realizar ningún cambio en los servicios existentes. Puede publicar su servicio a través del protocolo Rest, de modo que su servicio pueda ser utilizado por otros sistemas de manera más conveniente.

02 Sistema observable

Bajo la arquitectura de microservicios, el sistema empresarial se compone de más y más servicios, y los servicios se llaman entre sí. El problema resultante es cómo localizar rápidamente la falla y resolverla a tiempo. Para resolver este problema, necesitamos más herramientas y técnicas para garantizar la confiabilidad de todo el sistema. Una de las soluciones es utilizar el registro y el análisis para que pueda realizar un mejor seguimiento del rendimiento de su aplicación, encontrar posibles problemas y solucionarlos de manera oportuna. Además, el uso de herramientas de monitoreo visual puede ayudarnos a comprender mejor el estado de todo el sistema, para predecir y resolver mejor los problemas. Finalmente, también podemos utilizar pruebas automatizadas para garantizar la calidad de cada servicio, así como la estabilidad y confiabilidad de todo el sistema, para satisfacer mejor las necesidades del cliente.

Un sistema observable completo debe incluir las siguientes funciones:

  • Monitoreo de indicadores de métricas , utilizado para recopilar y analizar varios datos de indicadores, incluido el rendimiento del sistema, el consumo de recursos, etc. A través del monitoreo de indicadores, los usuarios pueden mantenerse al tanto del funcionamiento del sistema, encontrar anomalías y tomar las medidas correspondientes.
  • Rastreo El rastreo distribuido se utiliza para rastrear los enlaces de llamadas entre varios servicios en el sistema, lo que ayuda a los usuarios a descubrir y localizar posibles problemas de rendimiento, cuellos de botella, etc. A través del rastreo distribuido, los usuarios pueden comprender profundamente el proceso de operación del sistema, identificar posibles problemas y realizar optimizaciones y ajustes efectivos.
  • Registro La administración de registros se utiliza para registrar varios eventos y operaciones que ocurren en el sistema, incluidos registros de errores, registros de acceso, registros de transacciones, etc. A través de la gestión de registros, los usuarios pueden obtener información sobre el estado de ejecución del sistema, información sobre fallas, etc., y ayudar a los usuarios a localizar rápidamente los problemas y manejarlos en consecuencia.

En resumen, las tres funciones anteriores no solo pueden ayudar a los usuarios a localizar fallas rápidamente, mejorar la confiabilidad y estabilidad del sistema, sino que también ayudan a los usuarios a comprender profundamente la operación y el rendimiento del sistema, y ​​brindan a los usuarios una supervisión y protección integrales.

En la versión 3.2 de Dubbo, mejoramos principalmente Métricas y Seguimiento.

2.1 Métricas

En términos de métricas, usamos Micrometer para aumentar en gran medida los puntos ocultos de los indicadores, incluidos, entre otros, indicadores de servicios básicos como QPS, RT, número total de llamadas, número de éxitos, número de fallas y estadísticas de motivos de fallas. Para monitorear mejor el estado de ejecución de los servicios, Dubbo también proporciona monitoreo del estado de los componentes principales, como la cantidad de grupos de subprocesos, el estado de salud del servicio, etc. Además, Dubbo también es compatible con los modos Prometheus Pull and Push estándar, y proporciona varios paneles nativos oficiales de Grafana para lograr una observación de todo tipo de clima de Metrics orientada a la producción.

inserte la descripción de la imagen aquí

Para todos los usuarios, solo necesitan actualizar a la versión Dubbo 3.2 y agregar la dependencia dubbo-spring-boot-observability-starter para obtener la capacidad de Métricas. Después de que se inicie la aplicación, los indicadores relevantes se expondrán bajo el comando de métricas de Dubbo QoS, que se puede obtener localmente a través de http://127.0.0.1:22222/metrics . Además, para los usuarios que utilizan Spring Actuator, Dubbo también expondrá estos datos de forma predeterminada.

2.2 Rastreo

En términos de seguimiento, también implementamos el seguimiento de puntos enterrados durante el tiempo de ejecución de la solicitud basado en Micrometer. Logramos esta función a través de la forma nativa del interceptor de filtro. Admitimos la exportación de datos de seguimiento a algunas implementaciones principales, como Zipkin, Skywalking, Jaeger, etc. De esta forma, se puede realizar el análisis y la visualización de los datos completos de seguimiento del enlace.

inserte la descripción de la imagen aquí

2.3 Registro

Además, para el registro, Dubbo ha introducido un mecanismo de código de error desde la versión 3.1, logrando una cobertura completa de los registros de nivel de ADVERTENCIA y ERROR. En escenarios anormales, admite la indexación rápida de documentos de resolución de sitios web oficiales.

03 Soporte nativo de imagen nativa

En términos de Imagen Nativa, Dubbo admitirá oficialmente Imagen Nativa basada en GraalVM a partir de 3.2 A partir de Dubbo 3.0, Dubbo ya ha explorado alguna compatibilidad con Imagen Nativa, pero la facilidad de uso y el soporte no son ideales. versión, Dubbo simplificará la forma en que los usuarios acceden a Native Image. Se puede dividir principalmente en tres aspectos:

  1. Actualización de la configuración del complemento de compilación: del complemento nativo-image-maven original a dubbo-maven-plugin +native-maven-plugin, que distingue la configuración de imagen nativa proporcionada oficialmente por Graalvm de la configuración de imagen nativa requerida por Dubbo, que simplifica la usuario La configuración de la imagen nativa que debe preocuparse
  2. En la versión anterior, los usuarios deben generar y completar manualmente el código adaptable único en Dubbo, y los usuarios de la nueva versión no necesitarán preocuparse por estos detalles.
  3. El archivo de configuración bajo META-INF.native-image generado por el marco Dubbo en la versión anterior se generará directamente en el directorio del proyecto del usuario, y la nueva versión 3.2 se compilará en el destino sin afectar la estructura del proyecto del usuario. Además, el marco Dubbo ya no utilizará el método de completar manualmente la imagen nativa, sino que detectará y generará automáticamente los archivos de configuración necesarios, lo que simplifica la experiencia de los desarrolladores de Dubbo. Esto también puede reducir el tamaño del paquete binario compilado final y mejorar la velocidad de compilación.

Además de mejorar la facilidad de uso, Dubbo admitirá API, anotaciones y métodos de configuración XML en escenarios de imágenes nativas en la versión 3.2, y admitirá la compatibilidad con nativos en SpringBoot3.

04 otros

4.1 Soporte nativo de JDK 17 y Spring Boot 3

JDK 17 es la última versión LTS de Java después de JDK 11, e incluye muchas funciones y mejoras nuevas, como clases selladas, mejoras en el recolector de elementos no utilizados y más.

Desde que JDK 16 comenzó a restringir la reflexión de clase interna de Java, la serialización y el proxy dinámico de Dubbo se han visto afectados hasta cierto punto. En Dubbo 3.2, solucionamos el problema de compatibilidad desde abajo a través de la optimización de Fastjson2 y Javassist. En la actualidad, Dubbo puede ejecutarse perfectamente en JDK17, y todas las pruebas unitarias y la mayoría de las pruebas de integración también se han probado en la plataforma JDK 17.

Para el próximo JDK 21 LTS, Dubbo lo está adaptando intensamente. Agregaremos soporte para corrutinas JDK 21 y Dubbo (Project Loom) en la versión 3.3.

El rendimiento de 4.2 RPC se ha mejorado mucho

En la versión 3.2, hemos optimizado el rendimiento de las llamadas RPC y el contenido optimizado es el siguiente.

  1. Elimina la contención de bloqueo de sincronización y el código de bloqueo
  2. Reducción de la latencia de respuesta de solicitud con llamadas de bloqueo síncrono
  3. Se redujo el número de cambios de hilo.
  4. Rendimiento de E/S optimizado
  5. Soporte para serializar paquetes en subprocesos de usuario

La mejora del rendimiento de 3.2 en comparación con 3.1 es la siguiente:

  • Protocolo triple : en el caso de createUser, existUser y getUser con paquetes más pequeños, la tasa de mejora es de alrededor del 40-45 % y el rendimiento mejorado es básicamente el mismo que el de gRPC en el mismo escenario. La lista de usuarios del escenario de mensajes grandes ha aumentado aproximadamente un 17 %, lo que representa un 11 % menos que gRPC en el mismo escenario.
  • Protocolo Dubbo : la tasa de mejora es de alrededor del 180 % en el caso de createUser y getUser en escenarios de mensajes pequeños. La tasa de mejora del mensaje muy pequeño existUser (solo un valor booleano) es de aproximadamente el 24 %, mientras que la tasa de mejora del mensaje más grande listUser es la más alta, ¡alcanzando el 1000 %!

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

Cómo actualizar a Dubbo 3.2

5.1 Actualización de Pom Las últimas coordenadas de Dubbo Maven son:

<dependency>        
    <groupId>org.apache.dubbo</groupId>        
    <artifactId>dubbo</artifactId>        
    <version>3.2.0</version>
</dependency>

5.2 Compatibilidad

Para la gran mayoría de los usuarios, la actualización a Dubbo 3.2.0 es completamente sencilla y solo necesita modificar la versión del paquete dependiente.

1. Mejora de la lógica de verificación de serialización (importante)

Como se mencionó anteriormente, en la versión Dubbo 3.2.0, Dubbo habilitará la verificación sólida de la lista blanca de serialización de forma predeterminada para mejorar la seguridad de Dubbo y evitar el problema de la ejecución remota de comandos. El mecanismo actual confía automáticamente en algunas clases a través del mecanismo recursivo del nombre del paquete, pero para algunos usuarios que usan genéricos y pueden tener un escaneo incompleto, recomendamos agregar la configuración -Ddubbo.application.serialize-check-status=WARN. Después de observar durante un período de tiempo (a través de registros y comandos de QoS), si no se activa ninguna alarma de seguridad, puede configurar el modo de verificación fuerte.

Para la configuración de la lista blanca personalizada, puede consultar la documentación en el sitio web oficial/Manual del SDK/SDK de Java/Funciones avanzadas y uso/Mejorar la seguridad/Mecanismo de inspección de clase para la configuración.

2. Modificación de la serialización por defecto

Desde la versión 3.2.0 de Dubbo, el método de serialización predeterminado se cambió de hessian 2 a fastjson 2. Para las aplicaciones actualizadas a 3.2.0, Dubbo intentará usar fastjson2 automáticamente para la serialización. Tenga en cuenta que, ya sea el cliente o el servidor, siempre que un extremo no se haya actualizado a 3.2.0, se degradará a la serialización hessian2 para garantizar la compatibilidad.

3. La protección corta de empuje está deshabilitada de forma predeterminada

El propósito de la protección de envío vacío es que cuando el centro de registro falla y envía activamente direcciones vacías, Dubbo conserva el último lote de información del proveedor para garantizar la disponibilidad del servicio. Sin embargo, en la mayoría de los casos, incluso si el registro falla, las direcciones vacías no se enviarán, solo en algunos casos especiales. Si la protección push short está activada, tendrá un gran impacto en la lógica alternativa de Dubbo, la lógica de latidos, etc., y traerá problemas a los desarrolladores cuando usen Dubbo.

Si necesita habilitar la protección vacía en el entorno de producción para lograr una alta disponibilidad, puede configurar dubbo.application.enable-empty-protection en verdadero. Sin embargo, tenga en cuenta que se sabe que activar la protección push-null provocará una excepción cuando la aplicación del lado del servidor se actualice de las versiones 2.6.x y 2.7.x que solo admiten la detección de servicios a nivel de interfaz a 3.x y luego se devolvió a la versión original. Puede causar fallas en las llamadas de servicio.

06 Resumen

Dubbo 3.2 es una versión muy importante, trae muchas características nuevas y mejoras, lo que hace que Dubbo sea más potente y fácil de usar. Estamos muy agradecidos por el apoyo y las contribuciones de la comunidad, y esperamos que todos puedan experimentar Dubbo 3.2 lo antes posible y disfrutar de la comodidad y las ventajas que brinda.

Haga clic aquí para ingresar al sitio web oficial de Dubbo

Supongo que te gusta

Origin blog.csdn.net/alisystemsoftware/article/details/130333302
Recomendado
Clasificación