Descripción general de Quarkus Framework y comparación con Spring Boot

En este artículo, brindaremos una descripción general del marco Quarkus y lo compararemos con Spring Boot, el marco backend de Java más popular.

Quarkus es un marco Java de código abierto para desarrollar aplicaciones web. Está diseñado para crear aplicaciones con un enfoque moderno con microservicios y aplicaciones nativas de la nube. Quarkus tiene soporte integrado para los dos administradores de paquetes más populares: Gradle y Maven. De forma predeterminada, un nuevo proyecto inicial creado con la CLI oficial de Quarkus utiliza Maven, aunque se puede cambiar fácilmente para generar un proyecto basado en calificaciones.

Comparación de características con Spring Boot Framework

Hagamos una descripción general de las principales características disponibles en Quarkus y compárelas con las equivalentes de Spring Framework.

Configuración de la aplicación

Quarkus utiliza una biblioteca SmallRye Config de código abierto para configurar aplicaciones. Por defecto, utiliza propiedades.de.aplicación archivos para este fin. Sin embargo, existe la opción de utilizar también el archivo yaml. Para habilitar la configuración de yaml, necesitamos agregar un quarkus-config-yaml dependencia. Quarkus también puede leer adicionalmente la configuración utilizando las variables de entorno especificadas en el .env archivo. Esto es particularmente útil para el desarrollo local.

Puede almacenar algunas configuraciones locales en el .env archivo, por ejemplo, para permitir la recuperación de credenciales de fuentes externas para compilaciones locales y no confirmar el archivo, manteniéndolo solo para uso local. Spring no admite la lectura de variables de entorno desde un .env archivo, por lo que los desarrolladores deben inyectarlos mediante IDE o configurarlos directamente utilizando el archivo de configuración de la aplicación.

De manera similar a Spring, Quarkus admite diferentes perfiles según el entorno de destino. Esto se puede lograr agregando un nombre de perfil al propiedades.de.aplicación nombre de archivo, por ejemplo:

propiedades.de.aplicación – Configuración Base
propiedades de desarrollo de aplicaciones – configuración extendida para el entorno de desarrollo. Cuando el perfil de desarrollo esté activo, agregará (o anulará) la configuración al perfil base.

También existe la posibilidad de crear una jerarquía de configuración con una capa de configuración adicional para mencionar la configuración básica y específica del perfil. Podemos especificar el nombre del perfil principal usando quarkus.config.perfil.parent en aplicación-.properties archivo. Por ejemplo, especificando quarkus.config.profile.parent=común en el propiedades de desarrollo de aplicaciones archivo, obtendremos una jerarquía de tres niveles:

propiedades.de.aplicación – Configuración Base propiedades.comunes de la aplicación – anula/extiende la configuración base
propiedades de desarrollo de aplicaciones – anula/extiende común configuración del perfil

Spring tiene una configuración similar llamada primavera.config.importar que permite importar propiedades desde un archivo específico en lugar de crear una jerarquía.

Inyección de dependencia

Quarkus utiliza el motor de inyección de dependencia y contextos EE de Jakarta. De manera similar a Spring, Quarkus usa el concepto de frijol. Un bean es un objeto administrado por un entorno de aplicación (contenedor) cuya creación y comportamiento puede ser controlado por el desarrollador en un estilo declarativo mediante anotaciones. Para inyectar beans, al igual que en Spring Boot, podemos usar inyecciones de campo, definidor y constructor.

Los beans se pueden crear anotando la clase de bean con una anotación de alcance:

@ApplicationScoped
public class DataService {
    public void writeData() {
        //...
    }
}

Comparar con frijoles similares en Spring Boot:

@Service
public class DataService {
    public void writeData() {
        //...
    }
}

Otra forma de definir los frijoles es utilizar campos o métodos de productor. Esto es similar a @Configuración clases en Spring Boot.

Cuarcos:

// Define beans
@ApplicationScoped
public class SettingsProducer {

    @Produces
    String appToken = "123abc";

    @Produces
    Map<String, String> settings() {
        return Map.of(
            "setting 1", "value1",
            "setting 2", "value2"
        );
    }

    @Produces
    MyBean myBean() {
        return new MyBean(); // custom class
    }

}

// Inject beans:
@ApplicationScoped
public class DataService {
    @Inject
    private String appToken;

    @Inject
    private Map<String, String> settings;

    @Inject
    private MyBean myBean;


    //…
}

Código de arranque de primavera equivalente:


// Configuration:
@Configuration
public class SettingsProducer {
    @Bean
    String appToken() {
        return "123abc";
    }

    @Bean
    Map<String, String> settings() {
        return Map.of(
            "setting 1", "value1",
            "setting 2", "value2"
        );
    }

    @Bean
    MyBean myBean() {
        return new MyBean();
    }
}

// Injecting beans:
@Bean
public class DataService {
    @Autowired
    private String appToken;

    @Autowired
    @Qualifier("settings") // needed to explicitly tell spring that Map itself is a bean
    private Map<String, String> settings;

    @Autowired
    private MyBean myBean;

    //…
}

Quarkus también proporciona mecanismos integrados para interceptores, decoradores y manejo de eventos utilizando clases y anotaciones del marco Jakarta EE.

API RESTful

La creación de servicios RESTful con Quarkus está habilitada por el marco RESTEasy Reactive, que es una implementación de la especificación REST de Jakarta. La clase de ejemplo para manejar solicitudes de puntos finales:

@Path("/api")
public class DataResource {
    @GET
    @Path("resource")
    public String getData() {
        return "My resource";
    }

    @POST
    @Path("add/{data}")
    public String addData(String data, @RestQuery String type) {
        return "Adding data: " + data + " of type: " + type;
    }

}

anotación de clase @Camino define la ruta raíz de la URL. Cada método contiene una anotación del método HTTP (@OBTENER, @POST) y @Camino anotación que se convierte en una subruta de la parte raíz. Es decir, en el ejemplo anterior, obtener datos() es llamado para OBTENER /api/recurso pedido. Método agregar datos() es llamado para POST /api/add/some_text?type=texto pedido. Componente de ruta algún texto se especificará como un parámetro de datos para el agregar datos() método. Parámetro de consulta texto se pasará como parámetro de tipo.

En Spring Boot, la implementación del punto final anterior usando Spring Web es muy similar:

@RestController
@RequestMapping("/api")
public class TestController {
    @GetMapping("resource")
    public String hello() {
        return "My resource";
    }

    @PostMapping("add/{data}")
    public String addData(@PathVariable String data, @RequestParam String type) {
        return "Adding data: " + data + " of type: " + type;
    }
}

Seguridad

Quarkus tiene su propio marco de seguridad, similar a Spring Boot. Quarkus Security tiene mecanismos de autenticación integrados (como básico, basado en formularios, etc.) y ofrece la posibilidad de utilizar mecanismos externos conocidos, como OpenID Connect o WebAuth. También contiene anotaciones de seguridad para el control de acceso basado en roles. Por otro lado, Spring Security tiene más capacidades y es más flexible que Quarkus Security. P.ej, @Asegurado y @PreAutorizar Quarkus no proporciona anotaciones de primavera de forma nativa. Sin embargo, Quarkus se puede integrar con Spring Security para utilizar la funcionalidad proporcionada únicamente por Spring Security.

Integración en la nube

Quarkus admite la creación de imágenes de contenedores al crear una aplicación. Se admiten las siguientes tecnologías de contenedores:

  • Estibador. Para generar un Dockerfile que permita la construcción de una imagen de Docker, el docker-imagen-contenedor-quarkus Se utiliza extensión.
  • Foque. Las imágenes del contenedor Jib se pueden crear utilizando el foque-imagen-contenedor-quarkus extensión. Para la contenedorización de Jib, Quarkus proporciona almacenamiento en caché de las dependencias de la aplicación almacenadas en una capa diferente a la de la aplicación. Esto permite reconstruir la aplicación rápidamente. También hace que la aplicación se vuelva más pequeña al empujar el contenedor. Además, ofrece la posibilidad de crear aplicaciones y contenedores sin la necesidad de tener ninguna herramienta relacionada con Docker del lado del cliente en caso de que solo se necesite enviar al registro de Docker.
  • Cambio abierto. Para construir un contenedor OpenShift, el imagen-contenedor-quarkus-openshift es necesario. El contenedor se construye cargando únicamente un artefacto y sus dependencias en el clúster, donde se fusionan en el contenedor. La creación de compilaciones de OpenShift requiere la creación de BuildConfig y dos recursos ImageStream. Se requiere un recurso para la imagen del generador y otro para la imagen de salida. Los objetos son creados por la extensión Quarkus Kubernetes.
  • Paquete de construcción. extensión de quarkus paquete de construcción de imágenes-contenedor-quarkus utiliza paquetes de compilación para crear imágenes de contenedores. Internamente se utiliza el servicio Docker.

Quarkus se posiciona como nativo de Kubernetes. Proporciona una extensión Quarkus Kubernetes que permite la implementación de aplicaciones en Kubernetes. Esto simplifica el flujo de trabajo y, en aplicaciones simples, permite implementar Kubernetes en un solo paso sin un conocimiento profundo de la API de Kubernetes. El uso de la dependencia quarkus-kubernetes proporciona un manifiesto de Kubernetes generado automáticamente en el directorio de destino. El manifiesto está listo para aplicarse al clúster mediante el siguiente comando de ejemplo:

kubectl apply -f target/kubernetes/kubernetes.json

Quarkus también crea un archivo acoplable para la imagen de la ventana acoplable para su implementación. Las propiedades de la aplicación Quarkus permiten la configuración de imágenes de contenedores para establecer sus nombres, grupos, etc. Las propiedades de la aplicación relacionadas con Kubernetes permiten la configuración de un recurso generado. P.ej, quarkus.kubernetes.tipo de implementación establece el tipo de recurso, por ejemplo, Implementación, StatefulSet o Trabajo.

Cuando se trata de Spring Boot, también admite contenedorización y Kubernetes. Sin embargo, dicho soporte no está listo para usar. La configuración y la implementación requieren mucha más configuración y conocimiento específico de la tecnología en comparación con la forma en que se implementa en Quarkus. Quarkus reduce el código repetitivo y la configuración, ya que tiene una configuración nativa para Kubernetes y la contenedorización.

Preparación para la producción y soporte técnico

Quarkus es un marco relativamente nuevo en comparación con Spring/Spring Boot. El lanzamiento inicial de Quarkus tuvo lugar el 20 de mayo de 2019. La primera versión de producción de Spring Framework fue el 24 de marzo de 2004, y Spring Boot se lanzó por primera vez el 1 de abril de 2014. Quarkus lanza nuevas versiones con un poco más de frecuencia que Spring Boot, aunque la frecuencia es muy buena para ambos marcos. Hay 3-4 lanzamientos de Quarkus por mes y 5-6 lanzamientos de Spring Boot.

Cuando se trata de errores, hay un total de 8289 problemas marcados como errores en github para Quarkus, y solo 881 de ellos están en estado abierto. Para Spring Boot, hay un total de 3473 problemas marcados como errores y solo 66 de ellos se abren. Los errores se solucionan más rápido para Spring Boot. La razón puede ser que tiene una comunidad de apoyo más grande ya que Spring es mucho más antigua.

Spring Boot tiene versiones de soporte a largo plazo (LTS) que se mantienen (actualizaciones/correcciones de errores) durante un período de tiempo más largo sin introducir cambios importantes. Este enfoque brinda más estabilidad y permite el uso de la versión anterior de su aplicación que obtiene todas las correcciones críticas (por ejemplo, correcciones de vulnerabilidades conocidas). Al mismo tiempo, puede trabajar en las versiones más recientes de su producto para integrar y probar la última versión del marco. Spring Boot ofrece un año de soporte regular para cada edición LTS y más de dos años de soporte comercial.

Quarkus introdujo recientemente versiones LTS con soporte durante un año. Planean lanzar una nueva versión LTS cada seis meses. Actualmente, Quarkus no cuenta con soporte comercial para las versiones LTS.

Resumen

En este artículo, describimos las características clave del marco Quarkus y las comparamos con las características equivalentes en Spring Boot. Resumamos los principales pros y contras de ambos marcos en cada área abordada.

  • Configuración de la aplicación

Tanto Spring Boot como Quarkus tienen sistemas de gestión de configuración bien desarrollados. Aunque Quarkus tiene la capacidad de crear una jerarquía de perfiles simple de tres niveles, ambos marcos pueden manejar la configuración de aplicaciones a un buen nivel para satisfacer las necesidades de desarrollo de aplicaciones.

Ambos marcos utilizan un enfoque similar con beans inyectados en tiempo de ejecución y usan anotaciones para definir tipos de beans, asignar información de beans y especificar puntos de inyección.

Spring Boot y Quarkus tienen un enfoque muy similar para escribir API RESTful, sin grandes diferencias.

Quarkus proporciona los mismos métodos de autorización que Spring y tiene integración integrada con mecanismos de autenticación conocidos. Spring Security ofrece más anotaciones relacionadas con la seguridad, aunque algunas de ellas se pueden usar en Quarkus ya que tiene la capacidad de integrarse con el marco de Spring Security.

Quarkus tiene soporte nativo para contenerización y Kubernetes. Proporciona más capacidades y es más fácil de usar en entornos y herramientas nativos de la nube en comparación con Spring Boot. Este puede ser un factor clave a la hora de elegir entre Spring Boot y Quarkus para el desarrollo de una nueva aplicación diseñada para un entorno nativo de la nube.

  • Preparación para la producción y soporte técnico

Spring Boot es un marco mucho más antiguo. Tiene una comunidad de soporte más grande y más usuarios. Proporciona versiones LTS más sólidas con la capacidad de ampliar aún más el soporte técnico con soporte comercial LTS. Quarkus, por otro lado, acaba de presentar versiones LTS con un período de soporte más corto y no tiene opciones comerciales. Sin embargo, ambos marcos son estables, los errores se corrigen continuamente y se lanzan nuevas versiones con frecuencia.

Para la mayoría de sus funciones, Quarkus implementa las especificaciones Jakarta EE, mientras que Spring Boot incluye sus propias soluciones. La implementación de la especificación ofrece la ventaja de crear una API más consistente y robusta, en lugar de utilizar métodos no estándar. Por otro lado, Spring Boot es un framework bastante antiguo y conocido y sus características han demostrado ser estables y robustas con el tiempo.


Source link

About David Lopez

Informático y experto en redes. Redactor en varios blogs tecnológicos desde hace 4 años y ahora en Steamachine.net

Check Also

Noticias semanales para diseñadores № 731

Buenas prácticas de Git Prácticas esenciales de Git para desarrolladores, que cubren la gestión de …

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *