Un nuevo concursante para destronar al Rey: Apache Pulsar

Un nuevo concursante para destronar al Rey: Apache Pulsar

Apache Kafka parece ser la solución estándar en la arquitectura actual, pero deberíamos centrarnos en si es la elección correcta para nuestras necesidades.

Un nuevo concursante para destronar al Rey: Apache Pulsar
Foto de Ross Sokolovski en Unsplash

Hoy en día, estamos en una nueva era de Arquitectura Orientada a Eventos, y esta no es la primera vez que vivimos eso. Antes de los microservicios y la nube, EDA era la nueva normalidad en la integración empresarial. Basado en diferentes tipos de estándares, había protocolos como JMS o AMQP utilizados en productos basados en brokers como TIBCO EMS, Active MQ o IBM Websphere MQ, por lo que este enfoque no es algo nuevo.

Con el auge de las arquitecturas de microservicios y el enfoque liderado por API, parecía que habíamos olvidado la importancia de los sistemas de mensajería, y tuvimos que pasar por los mismos desafíos que vimos en el pasado para llegar a una nueva solución de mensajería para resolver ese problema. Así que estamos volviendo a la Arquitectura EDA, mecanismo pub-sub, para ayudarnos a desacoplar los consumidores y productores, moviéndonos de la orquestación a la coreografía, y todos estos conceptos encajan mejor en los mundos actuales con componentes cada vez más independientes que necesitan cooperación e integración.

Durante este esfuerzo, comenzamos a mirar nuevas tecnologías para ayudarnos a implementar eso nuevamente. Sin embargo, con la nueva realidad, olvidamos los protocolos y estándares pesados como JMS y comenzamos a pensar en otras opciones. Y debemos admitir que sentimos que hay un nuevo rey en esta área, y este es uno de los componentes críticos que parece ser, sin importar qué, en la arquitectura de hoy: Apache Kafka.

Y no me malinterpretes. Apache Kafka es fantástico, y ha sido probado durante mucho tiempo, una solución lista para producción, de alto rendimiento, con capacidades impresionantes para la reproducción y una API poderosa para facilitar la integración. Apache Kafka tiene algunos desafíos en este mundo nativo de la nube porque no se lleva tan bien con algunas de sus reglas.

Si has usado Apache Kafka durante algún tiempo, eres consciente de que hay desafíos particulares con él. Apache Kafka tiene una arquitectura que proviene de sus días en LinkedIn en 2011, donde Kubernetes o incluso Docker y las tecnologías de contenedores no eran una cosa, lo que hace que ejecutar Apache Kafka (servicio puramente con estado) de manera contenedorizada sea bastante complicado. Hay mejoras usando gráficos de helm y operadores para facilitar el viaje, pero aún así, no se siente como si las piezas pudieran integrarse bien de esa manera. Otra cosa es la geo-replicación que incluso con componentes como MirrorMaker, no es algo que se use, funcione sin problemas y se sienta integrado.

Otras tecnologías están tratando de proporcionar una solución para esas capacidades, y una de ellas es también otro proyecto de la Fundación Apache que ha sido donado por Yahoo! y se llama Apache Pulsar.

No me malinterpretes; esto no se trata de encontrar una nueva verdad, esa única solución de mensajería que es perfecta para las arquitecturas de hoy: no existe. En el mundo actual, con tantos requisitos y variables diferentes para los diferentes tipos de aplicaciones, una talla única ya no es cierta. Así que deberías dejar de pensar en cuál solución de mensajería es la mejor, y pensar más en cuál sirve mejor a tu arquitectura y cumple con los requisitos tanto técnicos como comerciales.

Hemos cubierto diferentes formas de comunicación general, con varias soluciones específicas para la comunicación sincrónica (tecnologías de malla de servicios y protocolos como REST, GraphQL o gRPC) y diferentes para la comunicación asincrónica. Necesitamos profundizar en la comunicación asincrónica para encontrar lo que funciona mejor para ti. Pero primero, hablemos un poco más sobre Apache Pulsar.

Apache Pulsar

Apache Pulsar, como se mencionó anteriormente, ha sido desarrollado internamente por Yahoo! y donado a la Fundación Apache. Como se indica en su sitio web oficial, hay varios puntos clave a mencionar al comenzar a explorar esta opción:

  • Funciones de Pulsar: Despliega fácilmente lógica de cómputo ligera usando APIs amigables para desarrolladores sin necesidad de ejecutar tu motor de procesamiento de flujos
  • Probado en producción: Apache Pulsar ha funcionado en producción a escala Yahoo durante más de tres años, con millones de mensajes por segundo a través de millones de temas
  • Escalabilidad horizontal: Expande la capacidad sin problemas a cientos de nodos
  • Baja latencia con durabilidad: Diseñado para baja latencia de publicación (< 5ms) a escala con fuertes garantías de durabilidad
  • Geo-replicación: Diseñado para replicación configurable entre centros de datos en múltiples regiones geográficas
  • Multi-tenencia: Construido desde cero como un sistema multi-tenant. Soporta Aislamiento, Autenticación, Autorización y Cuotas
  • Almacenamiento persistente: Almacenamiento persistente de mensajes basado en Apache BookKeeper. Proporciona aislamiento a nivel de IO entre operaciones de escritura y lectura
  • Bibliotecas de clientes: Modelos de mensajería flexibles con APIs de alto nivel para Java, C++, Python y GO
  • Operabilidad: API de administración REST para aprovisionamiento, administración, herramientas y monitoreo. Despliega en metal desnudo o Kubernetes.

Como podemos ver, en su diseño, Apache Pulsar está abordando algunas de las principales debilidades de Apache Kafka como la Geo-replicación y su enfoque nativo de la nube.

Apache Pulsar proporciona soporte para el patrón pub/sub, pero también ofrece muchas capacidades que también lo colocan como un sistema de mensajería de cola tradicional con su concepto de temas exclusivos donde solo uno de los suscriptores recibirá el mensaje. También proporciona conceptos y características interesantes utilizados en otros sistemas de mensajería:

  • Temas de Carta Muerta: Para mensajes que no pudieron ser procesados por el consumidor.
  • Temas Persistentes y No Persistentes: Para decidir si deseas persistir tus mensajes o no durante la transición.
  • Espacios de Nombres: Para tener una distribución lógica de tus temas, de modo que una aplicación pueda agruparse en espacios de nombres como lo hacemos, por ejemplo, en Kubernetes para poder aislar algunas aplicaciones de las otras.
  • Failover: Similar a exclusivo, pero cuando el consumidor adjunto falla al procesar, otro toma la oportunidad de procesar los mensajes.
  • Compartido: Para poder proporcionar un enfoque de round-robin similar al sistema de mensajería de cola tradicional donde todos los suscriptores estarán adjuntos al tema, pero solo uno recibirá el mensaje, y distribuirá la carga entre todos ellos.
  • Suscripciones Multi-tema: Para poder suscribirse a varios temas usando una expresión regular (similar al enfoque de Subject de TIBCO Rendezvous, por ejemplo, en los años 90) que ha sido tan poderoso y popular.

Pero también, si requieres características de Apache Kafka, aún tendrás conceptos similares como temas particionados, temas compartidos por clave, y así sucesivamente. Así que tienes todo a tu disposición para elegir qué tipo de configuración funciona mejor para ti y tus casos de uso específicos, también tienes la opción de mezclar y combinar.

Arquitectura de Apache Pulsar

La Arquitectura de Apache Pulsar es similar a otros sistemas de mensajería comparables hoy en día. Como puedes ver en la imagen a continuación del sitio web de Apache Pulsar, estos son los componentes principales de la arquitectura:

Un nuevo concursante para destronar al Rey: Apache Pulsar
  • Brokers: Uno o más brokers manejan mensajes entrantes de productores, despachan mensajes a consumidores
  • Cluster de BookKeeper para almacenamiento persistente de gestión de mensajes
  • Cluster de ZooKeeper para propósitos de gestión.

Así que puedes ver que esta arquitectura también es bastante similar a la de Apache Kafka nuevamente con la adición de un nuevo concepto del Cluster de BookKeeper.

El Broker en Apache Pulsar son componentes sin estado que principalmente ejecutarán dos piezas

  • Servidor HTTP que expone una API REST para gestión y es utilizado por consumidores y productores para búsqueda de temas.
  • Servidor TCP usando un protocolo binario llamado dispatcher que se utiliza para todas las transferencias de datos. Por lo general, los mensajes se despachan desde un caché de libro mayor gestionado por razones de rendimiento. Pero también si este caché crece demasiado, interactuará con el cluster de BookKeeper por razones de persistencia.

Para soportar la Replicación Global (Geo-Replicación), los Brokers gestionan replicadores que siguen las entradas publicadas en la región local y las republican en las regiones remotas.

El Cluster de Apache BookKeeper se utiliza como almacenamiento persistente de mensajes. Apache BookKeeper es un sistema de registro de escritura anticipada (WAL) distribuido que gestiona cuándo los mensajes deben ser persistidos. También soporta escalado horizontal basado en la carga y soporte multi-log. No solo los mensajes son persistentes sino también los cursores que son la posición del consumidor para un tema específico (similar al offset en la terminología de Apache Kafka)

Finalmente, el Cluster de Zookeeper se utiliza en el mismo rol que Apache Kafka como un cluster de almacenamiento de configuración de metadatos para todo el sistema.

Hola Mundo usando Apache Pulsar

Veamos cómo podemos crear un caso rápido de «Hola Mundo» usando Apache Pulsar como protocolo, y para hacer eso, vamos a intentar implementarlo de manera nativa en la nube. Así que haremos un cluster de un solo nodo de Apache Pulsar en una instalación de Kubernetes y desplegaremos una aplicación productora usando la tecnología Flogo y una aplicación consumidora usando Go. Algo similar a lo que puedes ver en el diagrama a continuación:

Un nuevo concursante para destronar al Rey: Apache Pulsar
Diagrama sobre el caso de prueba que estamos haciendo

Y vamos a intentar mantenerlo simple, así que solo usaremos docker puro esta vez. Así que, primero que nada, solo inicia el servidor de Apache Pulsar y para hacer eso usaremos el siguiente comando:

docker run -it -p 6650:6650 -p 8080:8080 --mount source=pulsardata,target=/pulsar/data --mount source=pulsarconf,target=/pulsar/conf apachepulsar/pulsar:2.5.1   bin/pulsar standalone

Y veremos una salida similar a esta:

Un nuevo concursante para destronar al Rey: Apache Pulsar

Ahora, necesitamos crear aplicaciones simples, y para eso, se utilizarán Flogo y Go.

Comencemos con el productor, y en este caso, usaremos la versión de código abierto para crear una aplicación rápida.

Primero que nada, solo usaremos la interfaz web (dockerizada) para hacer eso. Ejecuta el comando:

docker run -it -p 3303:3303 flogo/flogo-docker eula-accept

E instalamos una nueva contribución para habilitar la actividad del publicador de Pulsar. Para hacer eso, haremos clic en el botón «Instalar nueva contribución» y proporcionaremos la siguiente URL:

flogo install github.com/mmussett/flogo-components/activity/pulsar

Y ahora crearemos un flujo simple como puedes ver en la imagen a continuación:

Un nuevo concursante para destronar al Rey: Apache Pulsar

Ahora construiremos la aplicación usando el menú, ¡y eso es todo!

Un nuevo concursante para destronar al Rey: Apache Pulsar

Para poder ejecutar, solo lanza la aplicación como puedes ver aquí:

./sample-app_linux_amd64

Ahora, solo necesitamos crear el consumidor en Go-lang para poder hacer eso necesitamos instalar el paquete golang:

go get github.com/apache/pulsar-client-go/pulsar

Y ahora necesitamos crear el siguiente código:

package main
import (
 “fmt”
 “log”
 “github.com/apache/pulsar-client-go/pulsar”
)
func main() {
 client, err := pulsar.NewClient(pulsar.ClientOptions{URL: “pulsar://localhost:6650”})
 if err != nil {
 log.Fatal(err)
 }
defer client.Close()
channel := make(chan pulsar.ConsumerMessage, 100)
options := pulsar.ConsumerOptions{
 Topic: “counter”,
 SubscriptionName: “my-subscription”,
 Type: pulsar.Shared,
 }
options.MessageChannel = channel
consumer, err := client.Subscribe(options)
 if err != nil {
 log.Fatal(err)
 }
defer consumer.Close()
// Recibe mensajes del canal. El canal devuelve una estructura que contiene el mensaje y el consumidor de donde
 // se recibió el mensaje. No es necesario aquí ya que tenemos un solo consumidor, pero el canal podría ser
 // compartido entre múltiples consumidores también
 for cm := range channel {
 msg := cm.Message
 fmt.Printf(“Mensaje recibido msgId: %v — contenido: ‘%s’n”,
 msg.ID(), string(msg.Payload()))
consumer.Ack(msg)
}
}

Y después de ejecutar ambos programas, puedes ver la siguiente salida como puedes ver, pudimos comunicar ambas aplicaciones en un flujo sin esfuerzo.

Un nuevo concursante para destronar al Rey: Apache Pulsar

Este artículo es solo un punto de partida, y continuaremos hablando sobre cómo usar Apache Pulsar en tus arquitecturas. Si deseas echar un vistazo al código que hemos utilizado en este ejemplo, puedes encontrarlo aquí:

[visual-link-preview encoded=»eyJ0eXBlIjoiZXh0ZXJuYWwiLCJwb3N0IjowLCJwb3N0X2xhYmVsIjoiIiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2FsZXhhbmRyZXYvcHVsc2FyLXNhbXBsZS1mbG9nby1nbyIsImltYWdlX2lkIjowLCJpbWFnZV91cmwiOiIiLCJ0aXRsZSI6IiIsInN1bW1hcnkiOiIiLCJ0ZW1wbGF0ZSI6InVzZV9kZWZhdWx0X2Zyb21fc2V0dGluZ3MifQ==»]

Los 3 mejores trucos de Bash para mejorar tu rendimiento

Los 3 mejores trucos de Bash para mejorar tu rendimiento

Encuentra la lista de los trucos de rendimiento de bash que uso todo el tiempo y que pueden ayudarte a ahorrar mucho tiempo en tu trabajo diario.

Los 3 mejores trucos de Bash para mejorar tu rendimiento
Foto de Christopher Gower en Unsplash

El conocimiento de trucos de bash es una de las formas de mejorar tu rendimiento. Pasamos muchas horas dentro de ellos y hemos desarrollado patrones y hábitos cuando iniciamos sesión en una computadora. Por ejemplo, si tienes dos personas con un nivel de habilidad similar y les das la misma tarea para hacer, probablemente, usen herramientas diferentes y diferentes caminos para llegar al mismo resultado.

Y eso es porque la cantidad de opciones disponibles para realizar cualquier tarea es tan significativa que cada uno de nosotros aprende una o dos formas de hacer algo, y nos aferramos a ellas, y simplemente las automatizamos, así que no estamos pensando cuando las escribimos.

Entonces, la idea de hoy es proporcionar una lista de algunos comandos que uso todo el tiempo que probablemente ya conozcas, pero para mí son como ahorros de tiempo cada día de mi vida laboral. Así que, comencemos con ellos.

1.- CTRL + R

Este comando es mi truco de bash predilecto. Es el que uso todo el tiempo; tan pronto como inicio sesión en una máquina remota que es nueva o simplemente regreso a ellas, lo uso para casi todo. Desafortunadamente, este comando solo te permite buscar en el historial de comandos.

Te ayuda a autocompletar basado en los comandos que ya estás escribiendo. Es como lo mismo que escribir history | grep <algo> pero simplemente más rápido y más natural para mí.

Este truco de bash también me permite autocompletar rutas que no recuerdo el nombre exacto de la subcarpeta o lo que sea. Hago este comando complicado cada dos semanas para limpiar algo de memoria de procesos o aplicar alguna configuración. O simplemente para solucionar problemas en qué máquina estoy iniciando sesión en un momento específico.

2.- find + action

El comando find es algo que todos conocemos, pero la mayoría de ustedes probablemente lo usen como una funcionalidad limitada de todas las disponibles del comando find. Y eso es porque ese comando es increíble. Proporciona tantas características. Pero esta vez, solo voy a cubrir un tema específico. Acciones después de localizar los archivos que estamos buscando.

Usualmente usamos el comando find para encontrar archivos o carpetas, lo cual es evidente para un comando que se llama de esa manera. Pero también nos permite agregar el parámetro -exec para concatenar una acción que se realizará para cada uno de los archivos que coincidan con tus criterios, por ejemplo, algo como esto

Encuentra todos los archivos yaml en tu carpeta actual y simplemente renómbralos para moverlos a una carpeta diferente. Puedes hacerlo directamente con este comando:

find . -name “*.yaml” -exec mv {} /tmp/folder/yamlFiles/ ;

3.- cd –

Un truco de bash tan simple y tan útil. Al igual que nuestro comando de bash para CTRL-Z. El comando cd - nos permite volver a la carpeta anterior en la que estábamos.

Tan valioso para cuando nos equivocamos de carpeta a la que queremos ir, solo para cambiar rápidamente entre dos carpetas y así sucesivamente. Es como volver atrás en tu navegador o el CTRL-Z en tu procesador de textos.

Conclusión

Espero que ames este comando tanto como yo, y si ya lo conoces, por favor déjame en las respuestas los trucos de bash que son más relevantes para ti diariamente. Puede ser porque lo usas todo el tiempo como yo hago con estos o porque incluso si no lo usas tantas veces, las veces que lo haces, ¡te ahorra una cantidad masiva de tiempo!

Aprende a Mantener Bajo Control el Uso de Disco de tu Entorno Local de Docker

Aprende a Mantener Bajo Control el Uso de Disco de tu Entorno Local de Docker

Descubre nuevas opciones que tienes a tu disposición para hacer un uso eficiente del disco en tu instalación de Docker

Aprende a Mantener Bajo Control el Uso de Disco de tu Entorno Local de Docker
Foto de Dominik Lückmann en Unsplash

El auge del contenedor ha sido un cambio de juego para todos nosotros, no solo en el lado del servidor donde prácticamente cualquier nueva carga de trabajo que implementamos se despliega en forma de contenedor, sino también en nuestros entornos locales ocurre el mismo cambio.

Adoptamos contenedores para gestionar fácilmente las diferentes dependencias que necesitamos manejar como desarrolladores. Incluso si la tarea en cuestión no estaba relacionada con contenedores. ¿Necesitas una base de datos en funcionamiento? Usas una versión en contenedor de ella. ¿Necesitas un sistema de mensajería para probar algunas de tus aplicaciones? Inicias rápidamente un contenedor que proporciona esa funcionalidad.

Y tan pronto como no los necesitas, se eliminan, y tu sistema sigue tan limpio como estaba antes de comenzar esta tarea. Pero siempre hay cosas que necesitamos manejar incluso cuando tenemos una solución maravillosa frente a nosotros, y en el caso de un entorno Docker local, el uso del disco es uno de los más críticos.

Este proceso de lanzar cosas nuevas una y otra vez y luego deshacernos de ellas es cierto en cierto modo porque todas estas imágenes que hemos necesitado y todos estos contenedores que hemos lanzado todavía están allí en nuestro sistema esperando una nueva ronda y durante ese tiempo usando nuestros recursos de disco como puedes ver en una imagen actual de mi entorno Docker local con más de 60 GB utilizados para ese propósito.

Aprende a Mantener Bajo Control el Uso de Disco de tu Entorno Local de Docker
Imagen de la página de configuración del panel de control de Docker que muestra la cantidad de disco que Docker está usando.

Lo primero que necesitamos hacer es verificar qué está usando esta cantidad de espacio para ver si podemos liberar algunos de ellos. Para hacer eso, podemos aprovechar el comando docker system df que la CLI de Docker nos proporciona:

Aprende a Mantener Bajo Control el Uso de Disco de tu Entorno Local de Docker
La salida de la ejecución del comando docker system df

Como puedes ver, los 61 GB que están en uso son 20.88 GB por las imágenes que tengo en uso, 21.03 MB solo para los contenedores que he definido, 1.25 GB para los volúmenes locales y 21.07 para la caché de construcción. Como solo tengo activos 18 de las 26 imágenes definidas, puedo reclamar hasta 9.3 GB, que es una cantidad importante.

Si quisiéramos obtener más detalles sobre estos datos, siempre podemos usar la opción verbose como un añadido al comando, como puedes ver en la imagen a continuación:

Aprende a Mantener Bajo Control el Uso de Disco de tu Entorno Local de Docker
Salida detallada y detallada del comando docker system df -v

Entonces, después de obtener toda esta información, podemos proceder y ejecutar una limpieza de tu sistema. Esta actividad eliminará cualquier contenedor e imagen no utilizados que tengas en tu sistema, y para ejecutar eso, solo necesitas escribir esto:

docker system prune -af

Tiene varias opciones para ajustar un poco la ejecución que puedes consultar en la página oficial de Docker :

[visual-link-preview encoded=»eyJ0eXBlIjoiZXh0ZXJuYWwiLCJwb3N0IjowLCJwb3N0X2xhYmVsIjoiIiwidXJsIjoiaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9jb21tYW5kbGluZS9zeXN0ZW1fcHJ1bmUvIiwiaW1hZ2VfaWQiOjAsImltYWdlX3VybCI6IiIsInRpdGxlIjoiIiwic3VtbWFyeSI6IiIsInRlbXBsYXRlIjoidXNlX2RlZmF1bHRfZnJvbV9zZXR0aW5ncyJ9″]

En mi caso, eso me ayudó a recuperar hasta 40.8 GB de mi sistema, como puedes ver en la imagen a continuación.

Aprende a Mantener Bajo Control el Uso de Disco de tu Entorno Local de Docker

Pero si quisieras avanzar un paso más, también puedes ajustar algunas propiedades para considerar dónde estás ejecutando esta limpieza. Por ejemplo, el defaultKeepStorage te ayudará a definir cuánto disco quieres usar para este sistema de caché de construcción para optimizar la cantidad de uso de red que haces al construir imágenes con capas comunes.

Para hacer eso, necesitas tener el siguiente fragmento en tu sección de configuración del motor de Docker, como se muestra en la imagen a continuación:

Aprende a Mantener Bajo Control el Uso de Disco de tu Entorno Local de Docker
Configuración del motor de Docker con el defaultKeepStorage hasta 20GB

Espero que todo este proceso de mantenimiento ayude a que tus entornos locales brillen nuevamente y aproveches al máximo sin necesidad de desperdiciar muchos recursos en el proceso.

GraalVM: ¿Cómo mejorar el rendimiento de los microservicios en 2022?

GraalVM: ¿Cómo mejorar el rendimiento de los microservicios en 2022?

GraalVM proporciona las capacidades para hacer de Java un lenguaje de primera clase para crear microservicios al mismo nivel que Go-Lang, Rust, NodeJS y otros.

GraalVM: Haciendo que los lenguajes JVM sean eficientes para microservicios
Foto de Caspar Camille Rubin en Unsplash

El lenguaje Java ha sido el líder de lenguajes durante generaciones. Prácticamente cada pieza de software ha sido creada con Java: Servidores Web, Sistemas de Mensajería, Aplicaciones Empresariales, Frameworks de Desarrollo, y así sucesivamente. Esta predominancia se ha mostrado en los índices más importantes como el índice TIOBE, como se muestra a continuación:

GraalVM: ¿Cómo mejorar el rendimiento de los microservicios en 2022?
Imagen del índice TIOBE de https://www.tiobe.com/tiobe-index/

Pero siempre, Java tiene algunas compensaciones que necesitas hacer. La promesa del código portátil es porque la JVM nos permite ejecutar el mismo código en diferentes sistemas operativos y ecosistemas. Sin embargo, al mismo tiempo, el enfoque del intérprete también proporcionará un poco de sobrecarga en comparación con otras opciones compiladas como C.

Esa sobrecarga nunca fue un problema hasta que entramos en la ruta de los microservicios. Cuando tenemos un enfoque basado en servidores con una sobrecarga de 100–200 MB, no es un gran problema en comparación con todos los beneficios que proporciona. Sin embargo, si transformamos ese servidor en, por ejemplo, cientos de servicios, y cada uno de ellos tiene una sobrecarga de 50 MB, esto comienza a ser algo de lo que preocuparse.

Otra compensación fue el tiempo de inicio, nuevamente la capa de abstracción proporciona un tiempo de inicio más lento, pero en la arquitectura cliente-servidor, eso no era un problema importante si necesitamos unos segundos más para comenzar a atender solicitudes. Sin embargo, hoy en la era de la escalabilidad, esto se vuelve crítico si hablamos de tiempo de inicio basado en segundos en comparación con tiempo de inicio basado en milisegundos porque esto proporciona mejor escalabilidad y un uso más optimizado de la infraestructura.

Entonces, ¿cómo proporcionar todos los beneficios de Java y ofrecer una solución para estas compensaciones que ahora comenzaban a ser un problema? Y GraalVM se convierte en la respuesta a todo esto.

GraalVM se basa en sus propias palabras: “una distribución de JDK de alto rendimiento diseñada para acelerar la ejecución de aplicaciones escritas en Java y otros lenguajes JVM,” que proporciona un proceso de Compilación Anticipada para generar un proceso binario a partir del código Java que elimina la sobrecarga tradicional del proceso de ejecución de la JVM.

En cuanto a su uso en microservicios, este es un enfoque específico que han dado, y la promesa de un inicio alrededor de 50 veces más rápido y un uso de memoria 5 veces menor es simplemente asombrosa. Y es por eso que GraalVM se convierte en la base para frameworks de desarrollo de microservicios de alto nivel en Java como Quarkus de RedHat, Micronaut, o incluso la versión de Spring-Boot potenciada por GraalVM.

Entonces, probablemente te estés preguntando: ¿Cómo puedo empezar a usar esto? Lo primero que necesitamos hacer es ir a la página de lanzamientos de GitHub del proyecto y encontrar la versión para nuestro sistema operativo y seguir las instrucciones proporcionadas aquí:

[visual-link-preview encoded=»eyJ0eXBlIjoiZXh0ZXJuYWwiLCJwb3N0IjowLCJwb3N0X2xhYmVsIjoiIiwidXJsIjoiaHR0cHM6Ly93d3cuZ3JhYWx2bS5vcmcvMjIuMC9kb2NzL2dldHRpbmctc3RhcnRlZC8iLCJpbWFnZV9pZCI6LTEsImltYWdlX3VybCI6Imh0dHBzOi8vd3d3LmdyYWFsdm0ub3JnL3Jlc291cmNlcy9pbWcvZ3JhYWx2bS5wbmciLCJ0aXRsZSI6IkdyYWFsVk0iLCJzdW1tYXJ5IjoiR3JhYWxWTSBpcyBhIGhpZ2gtcGVyZm9ybWFuY2UgSkRLIGRpc3RyaWJ1dGlvbiBkZXNpZ25lZCB0byBhY2NlbGVyYXRlIHRoZSBleGVjdXRpb24gb2YgYXBwbGljYXRpb25zIHdyaXR0ZW4gaW4gSmF2YSBhbmQgb3RoZXIgSlZNIGxhbmd1YWdlcyBhbG9uZyB3aXRoIHN1cHBvci4uLiIsInRlbXBsYXRlIjoidXNlX2RlZmF1bHRfZnJvbV9zZXR0aW5ncyJ9″]

[visual-link-preview encoded=»eyJ0eXBlIjoiZXh0ZXJuYWwiLCJwb3N0IjowLCJwb3N0X2xhYmVsIjoiIiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2dyYWFsdm0vZ3JhYWx2bS1jZS1idWlsZHMvcmVsZWFzZXMiLCJpbWFnZV9pZCI6LTEsImltYWdlX3VybCI6Imh0dHBzOi8vb3BlbmdyYXBoLmdpdGh1YmFzc2V0cy5jb20vODcwODk4ODY0MTRlMzkyZTFmN2RkZjU0OGY4ZjQ1OGZhNzZiZTgxYTNiOTk1ZjNkMmI0OWNkY2MzMTY1ZGY3MS9ncmFhbHZtL2dyYWFsdm0tY2UtYnVpbGRzIiwidGl0bGUiOiJSZWxlYXNlcyDCtyBncmFhbHZtL2dyYWFsdm0tY2UtYnVpbGRzIiwic3VtbWFyeSI6IkdyYWFsVk0gQ0UgYmluYWlyZXMgYnVpbHQgYnkgdGhlIEdyYWFsVk0gY29tbXVuaXR5IC0gZ3JhYWx2bS9ncmFhbHZtLWNlLWJ1aWxkcyIsInRlbXBsYXRlIjoidXNlX2RlZmF1bHRfZnJvbV9zZXR0aW5ncyJ9″]

Cuando tengamos esto instalado, es el momento de comenzar a probarlo, y qué mejor manera de hacerlo que creando un servicio REST/JSON y comparándolo con una solución tradicional potenciada por OpenJDK 11.

Para crear este servicio REST de la manera más simple posible para centrarnos en la diferencia entre ambos modos, usaré el Framework Spark Java, que es un framework mínimo para crear servicios REST.

Compartiré todo el código en este repositorio de GitHub, así que si deseas echar un vistazo, clónalo desde aquí:

[visual-link-preview encoded=»eyJ0eXBlIjoiZXh0ZXJuYWwiLCJwb3N0IjowLCJwb3N0X2xhYmVsIjoiIiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2FsZXhhbmRyZXYvZ3JhYWx2bS1zYW1wbGUtcmVzdC1zZXJ2aWNlIiwiaW1hZ2VfaWQiOi0xLCJpbWFnZV91cmwiOiJodHRwczovL29wZW5ncmFwaC5naXRodWJhc3NldHMuY29tL2VkMTgwMTAwMzBhNTU5NGYyZDIxYTFiYWRkMThmNmZiZjYxMjA5YTZkMTVhZGFmMzBiYzVjOWRiNjQxMDc0ZjcvYWxleGFuZHJldi9ncmFhbHZtLXNhbXBsZS1yZXN0LXNlcnZpY2UiLCJ0aXRsZSI6IkdpdEh1YiAtIGFsZXhhbmRyZXYvZ3JhYWx2bS1zYW1wbGUtcmVzdC1zZXJ2aWNlOiBTYW1wbGUgUkVTVCBTZXJ2aWNlIFVzaW5nIEdyYWFsVk0iLCJzdW1tYXJ5IjoiU2FtcGxlIFJFU1QgU2VydmljZSBVc2luZyBHcmFhbFZNIC4gQ29udHJpYnV0ZSB0byBhbGV4YW5kcmV2L2dyYWFsdm0tc2FtcGxlLXJlc3Qtc2VydmljZSBkZXZlbG9wbWVudCBieSBjcmVhdGluZyBhbiBhY2NvdW50IG9uIEdpdEh1Yi4iLCJ0ZW1wbGF0ZSI6InVzZV9kZWZhdWx0X2Zyb21fc2V0dGluZ3MifQ==»]

El código que vamos a usar es muy simple, solo una línea para crear un servicio REST:

GraalVM: ¿Cómo mejorar el rendimiento de los microservicios en 2022?

Luego, usaremos un plugin de maven de GraalVM para todos los procesos de compilación. Puedes verificar todas las opciones aquí:

[visual-link-preview encoded=»eyJ0eXBlIjoiZXh0ZXJuYWwiLCJwb3N0IjowLCJwb3N0X2xhYmVsIjoiIiwidXJsIjoiaHR0cHM6Ly93d3cuZ3JhYWx2bS5vcmcvMjIuMC9yZWZlcmVuY2UtbWFudWFsL25hdGl2ZS1pbWFnZS9OYXRpdmVNYXZlblBsdWdpbi8iLCJpbWFnZV9pZCI6LTEsImltYWdlX3VybCI6Imh0dHBzOi8vd3d3LmdyYWFsdm0ub3JnL3Jlc291cmNlcy9pbWcvZ3JhYWx2bS5wbmciLCJ0aXRsZSI6IkdyYWFsVk0iLCJzdW1tYXJ5IjoiR3JhYWxWTSBpcyBhIGhpZ2gtcGVyZm9ybWFuY2UgSkRLIGRpc3RyaWJ1dGlvbiBkZXNpZ25lZCB0byBhY2NlbGVyYXRlIHRoZSBleGVjdXRpb24gb2YgYXBwbGljYXRpb25zIHdyaXR0ZW4gaW4gSmF2YSBhbmQgb3RoZXIgSlZNIGxhbmd1YWdlcyBhbG9uZyB3aXRoIHN1cHBvci4uLiIsInRlbXBsYXRlIjoidXNlX2RlZmF1bHRfZnJvbV9zZXR0aW5ncyJ9″]

GraalVM: ¿Cómo mejorar el rendimiento de los microservicios en 2022?

El proceso de compilación lleva un tiempo (alrededor de 1–2 min). Sin embargo, necesitas entender que esto compila todo a un proceso binario porque la única salida que obtendrás de esto es un solo proceso binario (nombrado en mi caso rest-service-test) que tendrá todas las cosas que necesitas para ejecutar tu aplicación.

GraalVM: ¿Cómo mejorar el rendimiento de los microservicios en 2022?

Y finalmente, tendremos un solo binario que es todo lo que necesitamos para ejecutar nuestra aplicación:

GraalVM: ¿Cómo mejorar el rendimiento de los microservicios en 2022?

Este binario es excepcional porque no requiere ninguna JVM en tu máquina local, y puede comenzar en unos pocos milisegundos. Y el tamaño total del binario es de 32M en disco y menos de 5MB de RAM.

GraalVM: ¿Cómo mejorar el rendimiento de los microservicios en 2022?

La salida de esta primera aplicación pequeña es sencilla, como viste, pero creo que puedes captar la idea. Pero veámoslo en acción, lanzaré una pequeña prueba de carga con mi computadora con 16 hilos lanzando solicitudes a este endpoint:

GraalVM: ¿Cómo mejorar el rendimiento de los microservicios en 2022?

Como puedes ver, esto es simplemente increíble, incluso con la falta de latencia ya que esto es solo activado por la misma máquina, estamos alcanzando con un solo servicio una tasa de TPS en 1 minuto de más de 1400 solicitudes/segundo con un tiempo de respuesta de 2ms para cada una de ellas.

¿Y cómo se compara eso con una aplicación normal basada en JAR con el mismo código exactamente? Por ejemplo, puedes ver en la tabla a continuación:

GraalVM: ¿Cómo mejorar el rendimiento de los microservicios en 2022?

En resumen, hemos visto cómo usando herramientas como GraalVM podemos hacer que nuestros programas basados en JVM estén listos para nuestro entorno de microservicios evitando los problemas normales relacionados con el alto uso de memoria o el tiempo de inicio pequeño que son críticos cuando estamos adoptando una estrategia completamente nativa de la nube en nuestras empresas o proyectos.

Pero, la verdad debe ser dicha. Esto no siempre es tan simple como mostramos en este ejemplo porque dependiendo de las bibliotecas que estés usando, generar la imagen nativa puede ser mucho más complejo y requerir mucha configuración o simplemente ser imposible. Así que no todo está ya hecho, pero el futuro se ve brillante y lleno de esperanza.

Descubriendo la Verdad Detrás de los Secretos de Kubernetes

man in white dress shirt wearing black framed eyeglasses
Descubriendo la Verdad Detrás de los Secretos de Kubernetes

Foto por krakenimages en Unsplash

Hemos estado hablando recientemente sobre ConfigMap como uno de los objetos para almacenar una configuración diferente para cargas de trabajo basadas en Kubernetes. Pero, ¿qué pasa con los datos sensibles?

Esta es una pregunta interesante, y la respuesta inicial de la plataforma Kubernetes fue proporcionar un objeto Secrets. Basado en su definición del sitio web oficial de Kubernetes, definen los secretos de esta manera:

Un Secret es un objeto que contiene una pequeña cantidad de datos sensibles como una contraseña, un token o una clave. Tal información podría de otro modo ser puesta en una especificación de Pod o en una imagen de contenedor. Usar un Secret significa que no necesitas incluir datos confidenciales en el código de tu aplicación

Entonces, por defecto, los secretos son lo que deberías usar para almacenar tus datos sensibles. Desde la perspectiva técnica, para usarlos, se comportan de manera muy similar a ConfigMap, por lo que puedes vincularlo a las diferentes variables de entorno, montarlo dentro de un pod, o incluso tener usos específicos para gestionar credenciales para diferentes tipos de cuentas como Cuentas de Servicio. Esto clasifica los diferentes tipos de secretos que puedes crear:

  • Opaco: Esto define un secreto genérico que puedes usar para cualquier propósito (principalmente datos de configuración o archivos de configuración)
  • Token de Cuenta de Servicio: Esto define las credenciales para cuentas de servicio, pero esto está obsoleto y ya no se usa desde Kubernetes 1.22.
  • Credenciales de Registro Docker: Esto define credenciales para conectarse al registro Docker para descargar imágenes como parte de tu proceso de implementación.
  • Autenticación Básica o SSH: Esto define secretos específicos para manejar la autenticación.
  • Secreto TLS:
  • Secretos de Arranque:

Pero, ¿es seguro usar Kubernetes Secrets para almacenar datos sensibles? La respuesta principal para cualquier pregunta en cualquier tema relacionado con la tecnología es: Depende. Pero ha surgido cierta controversia que este tema también se cubre en la página oficial de Kubernetes, destacando los siguientes aspectos:

Los Secrets de Kubernetes se almacenan, por defecto, sin cifrar en el almacén de datos subyacente del servidor API (etcd). Cualquiera con acceso a la API puede recuperar o modificar un Secret, y también cualquiera con acceso a etcd. Además, cualquiera que esté autorizado para crear un Pod en un espacio de nombres puede usar ese acceso para leer cualquier Secret en ese espacio de nombres; esto incluye acceso indirecto como la capacidad de crear un Deployment.

Entonces, lo principal es que, por defecto, esta es una forma muy, muy insegura. Parece más una categorización de los datos que un manejo seguro adecuado. Además, Kubernetes proporciona algunos consejos para intentar hacer esta alternativa más segura:

  • Habilitar el Cifrado en Reposo para los Secrets.
  • Habilitar o configurar reglas RBAC que restrinjan la lectura de datos en los Secrets (incluyendo medios indirectos).
  • Cuando sea apropiado, también usar mecanismos como RBAC para limitar qué principales tienen permitido crear nuevos Secrets o reemplazar los existentes.

Pero eso puede no ser suficiente, y eso ha creado espacio para que terceros y proveedores de la nube ofrezcan su solución que cubra estas necesidades y al mismo tiempo también ofrezca características adicionales. Algunas de estas opciones son las que se muestran a continuación:

  • Sistemas de Gestión de Claves en la Nube: Prácticamente todos los grandes proveedores de la nube proporcionan alguna forma de Gestión de Secretos para ir más allá de estas características y mitigar esos riesgos. Si hablamos de AWS, está AWS Secrets Manager , si hablamos de Azure, tenemos Azure Key Vault , y en el caso de Google, también tenemos Google Secret Manager.
  • Sealed Secrets es un proyecto que intenta extender los Secrets para proporcionar más seguridad, especialmente en el enfoque de Configuración como Código, ofrece una forma segura de almacenar esos objetos en el mismo tipo de repositorios que expones cualquier otro archivo de recursos de Kubernetes. En sus propias palabras, “El SealedSecret solo puede ser descifrado por el controlador que se ejecuta en el clúster de destino, y nadie más (ni siquiera el autor original) puede obtener el Secret original del SealedSecret.”
  • Gestores de Secretos de terceros que son similares a los de los Proveedores de la Nube que permiten un enfoque más independiente, y hay varios jugadores aquí como Hashicorp Vault o CyberArk Secret Manager
  • Finalmente también, Spring Cloud Config puede proporcionar seguridad para almacenar datos que están relacionados con conceptos de configuración sensibles como contraseñas y al mismo tiempo cubre la misma necesidad que proporciona ConfigMap desde una perspectiva unificada.

Espero que este artículo haya ayudado a entender el propósito de los Secrets en Kubernetes y, al mismo tiempo, los riesgos respecto a su seguridad y cómo podemos mitigarlos o incluso confiar en otras soluciones que proporcionen una forma más segura de manejar esta pieza crítica de información.

DevSecOps vs DevOps: Fundamentos y Diferencias Respondiendo a 3 Preguntas

DevSecOps vs DevOps: Fundamentos y Diferencias Respondiendo a 3 Preguntas

DevSecOps vs. DevOps: Diferencias y Similitudes Respondiendo 3 Preguntas

DevSecOps es un concepto que probablemente has escuchado extensamente en los últimos meses. Lo verás en alineación con la idea tradicional de DevOps. Esto probablemente, en algún momento, te hace preguntarte sobre una comparación entre DevSecOps y DevOps, incluso tratando de entender cuáles son las principales diferencias entre ellos o si son el mismo concepto. Y también, con otras ideas comenzando a aparecer, como Ingeniería de Plataformas o Confiabilidad del Sitio, está comenzando a crear algo de confusión en el campo que me gustaría aclarar hoy en este artículo.

¿Qué es DevSecOps?

DevSecOps es una extensión del concepto y metodología DevOps. Ahora, no es un esfuerzo conjunto entre las prácticas de Desarrollo y Operación, sino un esfuerzo conjunto entre Desarrollo, Operación y Seguridad.

DevSecOps vs DevOps: Fundamentos y Diferencias Respondiendo a 3 Preguntas
Diagrama por GeekFlare: Una Introducción a DevSecOps (https://geekflare.com/devsecops-introduction/)

Implica introducir políticas, prácticas y herramientas de seguridad para asegurar que los ciclos de DevOps proporcionen seguridad a lo largo de este proceso. Ya comentamos sobre incluir componentes de seguridad para proporcionar un proceso de despliegue más seguro. Incluso tenemos artículos específicos sobre estas herramientas, como escáneres, registros de docker, etc.

¿Por qué es importante DevSecOps?

DevSecOps, o para ser más explícitos, incluir prácticas de seguridad como parte del proceso DevOps, es crítico porque nos estamos moviendo hacia arquitecturas híbridas y en la nube donde incorporamos nuevos patrones de diseño, despliegue y desarrollo como contenedores, microservicios, y así sucesivamente.

Esta situación hace que nos movamos de un lado a tener cientos de aplicaciones en los casos más complejos a miles de aplicaciones, y de tener docenas de servidores a miles de contenedores, cada uno de ellos con diferentes imágenes base y bibliotecas de terceros que pueden estar obsoletas, tener un agujero de seguridad o simplemente surgir nuevas vulnerabilidades como hemos visto en el pasado con el Spring Framework o la biblioteca Log4J para mencionar algunos de los problemas de seguridad globales sustanciales más recientes que las empresas enfrentaron.

Así que, incluso el equipo de seguridad más extenso no puede estar al ritmo revisando manualmente o con un conjunto de scripts todos los diferentes nuevos desafíos a la seguridad si no los incluimos como parte del proceso general de desarrollo y despliegue de los componentes. Aquí es donde el concepto de seguridad de cambio a la izquierda suele considerarse, y ya cubrimos eso en este artículo que puedes leer aquí.

DevSecOps vs DevOps: ¿Es DevSecOps solo DevOps actualizado?

Así que, basado en la definición anterior, puedes pensar: «Ok, entonces cuando alguien habla de DevOps no está pensando en seguridad». Esto no es cierto.

En el mismo aspecto, cuando hablamos de DevOps, no es explícitamente todos los pasos detallados, como aseguramiento de calidad del software, pruebas unitarias, etc. Así que, como sucede con muchas extensiones en esta industria, el concepto original, global o genérico incluye también los contenidos de las alas.

Así que, al final, DevOps y DevSecOps son lo mismo, especialmente hoy cuando todas las empresas y organizaciones se están moviendo a la nube o entornos híbridos donde la seguridad es crítica y no negociable. Por lo tanto, cada tarea que hacemos, desde desarrollar software hasta acceder a cualquier servicio, necesita hacerse con la Seguridad en mente. Pero usé ambos conceptos en diferentes escenarios. Usaré DevSecOps cuando me gustaría resaltar explícitamente el aspecto de seguridad debido a la audiencia, el contexto o el tema que estamos discutiendo para hacer diferenciación.

Aún así, en cualquier contexto genérico, DevOps incluirá las verificaciones de seguridad que se mantendrán con seguridad porque si no es así, simplemente es inútil. Yo.

 Resumen

Así que, al final, cuando alguien habla hoy sobre DevOps, implícitamente incluye el aspecto de seguridad, por lo que no hay diferencia entre ambos conceptos. Pero verás y también encontrarás útil usar el término específico DevSecOps cuando quieras resaltar o diferenciar esta parte del proceso.

Cómo usar SoapUI integrado con Maven para pruebas de automatización

Cómo usar SoapUI integrado con Maven para pruebas de automatización
Cómo usar SoapUI integrado con Maven para pruebas de automatización

SoapUI es una herramienta popular de código abierto utilizada para probar APIs SOAP y REST. Viene con una interfaz fácil de usar y una variedad de características para ayudarte a probar solicitudes y respuestas de API. En este artículo, exploraremos cómo usar SoapUI integrado con Maven para pruebas de automatización.

¿Por qué usar SoapUI con Maven?

Maven es una popular herramienta de automatización de construcción que simplifica la construcción y gestión de proyectos Java. Es ampliamente utilizada en la industria y tiene muchas características que la hacen una opción ideal para pruebas de automatización con SoapUI.

Al integrar SoapUI con Maven, puedes ejecutar fácilmente tus pruebas de SoapUI como parte de tu proceso de construcción de Maven. Esto te ayudará a automatizar tu proceso de pruebas, reducir el tiempo necesario para probar tus APIs y asegurarte de que tus pruebas estén siempre actualizadas.

Configuración de SoapUI y Maven

Antes de que podamos comenzar a usar SoapUI con Maven, debemos configurar ambas herramientas en nuestro sistema. Primero, descarga e instala SoapUI desde el sitio web oficial. Una vez que SoapUI esté instalado, podemos proceder con la instalación de Maven.

Para instalar Maven, sigue estos pasos:

  1. Descarga la última versión de Maven desde el sitio web oficial.
  2. Extrae el archivo descargado en un directorio de tu sistema.
  3. Agrega el directorio bin de la carpeta extraída a la variable de entorno PATH de tu sistema.
  4. Verifica que Maven esté instalado abriendo una terminal o símbolo del sistema y ejecutando el comando mvn -version.

Creación de un Proyecto Maven para Pruebas de SoapUI

Ahora que tenemos tanto SoapUI como Maven instalados, podemos crear un proyecto Maven para nuestras pruebas de SoapUI. Para crear un nuevo proyecto Maven, sigue estos pasos:

  1. Abre una terminal o símbolo del sistema y navega al directorio donde deseas crear tu proyecto.
  2. Ejecuta el siguiente comando: mvn archetype:generate -DgroupId=com.example -DartifactId=my-soapui-project -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  3. Esto creará un nuevo proyecto Maven con el ID de grupo com.example y el ID de artefacto my-soapui-project.

Añadiendo Pruebas de SoapUI al Proyecto Maven

Ahora que tenemos un proyecto Maven, podemos añadir nuestras pruebas de SoapUI al proyecto. Para hacer esto, sigue estos pasos:

  1. Crea un nuevo proyecto de SoapUI abriendo SoapUI y seleccionando Archivo > Nuevo Proyecto SOAP.
  2. Sigue las indicaciones para crear un nuevo proyecto, incluyendo especificar el archivo WSDL y el endpoint para tu API.
  3. Una vez que tu proyecto esté creado, crea un nuevo conjunto de pruebas y añade tus casos de prueba.
  4. Guarda tu proyecto de SoapUI.

A continuación, necesitamos añadir nuestro proyecto de SoapUI a nuestro proyecto Maven. Para hacer esto, sigue estos pasos:

  1. En el directorio de tu proyecto Maven, crea un nuevo directorio llamado src/test/resources.
  2. Copia tu archivo de proyecto de SoapUI (.xml) a este directorio.
  3. En el archivo pom.xml de tu proyecto Maven, añade el siguiente código:
<build>
  <plugins>
    <plugin>
      <groupId>com.smartbear.soapui</groupId>
      <artifactId>soapui-maven-plugin</artifactId>
      <version>5.6.0</version>
      <configuration>
        <projectFile>1/src/test/resources/my-soapui-project.xml</projectFile>
        <outputFolder>1/target/surefire-reports</outputFolder>
        <junitReport>true</junitReport>
        <exportwAll>true</exportwAll>
      </configuration>
      <executions>
        <execution>
          <phase>test</phase>
          <goals>
            <goal>test</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

Este código configura el plugin de Maven de SoapUI para ejecutar nuestras pruebas de SoapUI durante la fase de test del proceso de construcción de Maven.

Creando Aserciones en Proyectos de SoapUI

Ahora que hemos añadido nuestras pruebas de SoapUI a nuestro proyecto Maven, podemos crear aserciones para validar las respuestas de nuestras llamadas a la API. Para crear aserciones en SoapUI, sigue estos pasos:

  1. Abre tu proyecto de SoapUI y navega al caso de prueba donde deseas crear una aserción.
  2. Haz clic derecho en el paso que deseas validar y selecciona Añadir Aserción.
  3. Elige el tipo de aserción que deseas crear (por ejemplo, Contiene, XPath Match, Códigos de Estado HTTP Válidos, etc.).
  4. Configura la aserción de acuerdo a tus necesidades.
  5. Guarda tu proyecto de SoapUI.
Cómo usar SoapUI integrado con Maven para pruebas de automatización

Ejecutando Pruebas de SoapUI con Aserciones Usando Maven

Ahora que hemos añadido nuestras pruebas de SoapUI y aserciones a nuestro proyecto Maven, podemos ejecutarlas usando Maven. Para ejecutar tus pruebas de SoapUI con Maven y validar las respuestas usando aserciones, sigue estos pasos:

  1. Abre una terminal o símbolo del sistema y navega al directorio de tu proyecto Maven.
  2. Ejecuta el siguiente comando: mvn clean test
  3. Esto ejecutará tus pruebas de SoapUI y generará un informe en el directorio target/surefire-reports de tu proyecto Maven.

Durante la ejecución de la prueba, si alguna aserción falla, la prueba fallará y se mostrará un mensaje de error en la consola. Al crear aserciones, podemos asegurarnos de que nuestras llamadas a la API estén devolviendo las respuestas esperadas.

Conclusión

En este artículo, hemos aprendido cómo usar SoapUI integrado con Maven para pruebas de automatización, incluyendo cómo crear aserciones en proyectos de SoapUI. Al usar estas dos herramientas juntas, podemos automatizar nuestro proceso de pruebas, reducir el tiempo necesario para probar nuestras APIs y asegurarnos de que nuestras pruebas estén siempre actualizadas. Si estás buscando comenzar con pruebas de automatización usando SoapUI y Maven, ¡prueba este tutorial!