Prefacio

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

En el mundo de las TI, los límites de hoy son las puertas del mañana. En los últimos 50 años, el mundo de las TI ha evolucionado continuamente, sin descanso, superando siempre los límites. Estos cambios se deben no sólo al progreso técnico, sino también a nosotros, los consumidores. Como consumidores, seguimos exigiendo cada vez más al software con el que interactuamos cada día. Además, nuestra forma de interactuar con el software ha cambiado por completo. No podemos vivir sin aplicaciones y dispositivos móviles y ahora aceptamos recibir notificaciones todo el día. El Internet de las Cosas (IoT) es un mercado emergente que promete muchas más innovaciones, aumentando el número de eventos y datos procesados ininterrumpidamente. La nube y Kubernetes no sólo han cambiado nuestro uso, sino que también han transformado radicalmente la forma en que diseñamos, desarrollamos, implementamos y mantenemos las aplicaciones.

Pero no te equivoques: todas estas revoluciones tienen un precio. Aunque han permitido nuevos usos y aplicaciones, también han introducido una enorme complejidad. La mayoría de los sistemas de software actuales son sistemas distribuidos. Y los sistemas distribuidos son difíciles de diseñar, construir y hacer funcionar, especialmente a la escala que necesitamos para implantar estas nuevas aplicaciones modernas. Tenemos que gestionar los fallos, la comunicación asíncrona, una topología siempre cambiante, la disponibilidad dinámica de recursos, etc. Aunque la nube promete recursos ilimitados, el dinero es un factor limitante, y aumentar la densidad de implementación, es decir, ejecutar más con menos recursos, se convierte en una preocupación estricta.

Entonces, ¿qué es Reactive? No es una biblioteca que utilices en tu código ni un marco mágico.Reactive es un conjunto de principios, herramientas, metodologías y marcos que permiten construir mejores sistemas distribuidos. ¿Cómo de mejores? Depende del sistema, pero las aplicaciones que siguen los principios Reactive aceptan los retos de los sistemas distribuidos y se centran en la elasticidad, la resiliencia y la capacidad de respuesta, como se explica en The Reactive Manifesto.

En este libro, utilizamos el sustantivo Reactivo, con R mayúscula, para agrupar todas las diversas facetas del panorama reactivo, como la programación reactiva, los sistemas reactivos, los flujos reactivos, etc. Con este libro, aprenderás cómo Reactivo nos ayudará a hacer frente a estas nuevas preocupaciones y cómo encaja en entornos de nube. Después de leer este libro, serás capaz de construir sistemas reactivos: sistemas distribuidos resistentes, adaptables y dirigidos por eventos.

¿Quién debería leer este libro?

Este libro está dirigido a desarrolladores Java intermedios y avanzados. Lo mejor sería que te sintieras razonablemente cómodo con Java; sin embargo, no es necesario que tengas conocimientos previos de programación reactiva o incluso de Reactive en general. Muchos conceptos de este libro están relacionados con los sistemas distribuidos, pero tampoco es necesario que estés familiarizado con ellos.

Los sistemas reactivos a menudo dependen de corredores de mensajes como Apache Kafka o Advanced Message Queuing Protocol (AMQP). Este libro presenta los conocimientos básicos que necesitas para comprender cómo ayudan dichos corredores a diseñar e implementar sistemas reactivos.

Tres grupos distintos pueden beneficiarse de este libro:

  • Desarrolladores que construyen aplicaciones nativas de la nube o sistemas distribuidos

  • Arquitectos que quieran comprender el papel delas arquitecturas reactivas y basadas en eventos

  • Desarrolladores curiosos que han oído hablar de Reactive y quieren comprenderlo mejor

Con este libro, iniciarás un viaje hacia la comprensión, el diseño, la construcción y la implementación de arquitecturas reactivas. No sólo aprenderás cómo ayuda a construir mejores sistemas distribuidos y aplicaciones en la nube, sino que también verás cómo puedes utilizar patrones reactivos para mejorar los sistemas existentes.

¿Y Quarkus?

Los lectores atentos habrán notado la mención de Quarkus en el subtítulo de este libro. Pero, hasta ahora, no lo hemos mencionado.Quarkus es una pila Java adaptada a la nube. Utiliza técnicas de compilación para reducir la cantidad de memoria utilizada por la aplicación y proporcionar un tiempo de arranque rápido.

Pero Quarkus también es una pila reactiva. En su núcleo, un motor reactivo permite crear aplicaciones concurrentes y resistentes. Quarkus también proporciona todas las características que necesitas para construir sistemas distribuidos que puedan adaptarse a cargas fluctuantes y fallos inevitables.

A lo largo de este libro, utilizamos Quarkus para demostrar las ventajas del enfoque reactivo e introducir diversos patrones y buenas prácticas. No te asustes si no tienes conocimientos o experiencia previos con él. Te acompañaremos en el viaje, guiándote a cada paso.

Este libro se centra en la creación de aplicaciones y sistemas reactivos que aprovechen las capacidades de Quarkus y proporciona todos los conocimientos necesarios para construir dichos sistemas. No cubrimos el ecosistema completo de Quarkus, ya que este libro se centra en los componentes de Quarkus que ayudan en la construcción de sistemas reactivos.

Navegar por este libro

Si acabas de descubrir la Reactividad y quieres saber más sobre ella, leer este libro de principio a fin te permitirá comprenderla y saber cómo puede ayudarte. Si eres un desarrollador reactivo experimentado interesado en Quarkus y sus características reactivas, quizá quieras saltarte la primera parte de este libro y pasar a los capítulos que más te interesen.

La Parte I es una breve introducción que establece el contexto:

  • El capítulo 1 ofrece una breve visión general del panorama reactivo, incluyendo sus ventajas e inconvenientes.

  • El Capítulo 2 presenta Quarkus y su enfoque de tiempo de compilación para reducir el tiempo de inicio y el uso de memoria.

La Parte II trata de la Reacción en general:

  • El capítulo 3 explica las complejidades de los sistemas distribuidos y los conceptos erróneos; éstas son las razones para ser reactivo.

  • El capítulo 4 presenta las características de los sistemas reactivos.

  • El capítulo 5 trata de las distintas formas de modelos de desarrollo asíncronos, centrándose en la programación reactiva.

La Parte III explica cómo construir aplicaciones reactivas con Quarkus:

  • El capítulo 6 trata sobre el motor reactivo y el puente entre la programación imperativa y la reactiva.

  • El capítulo 7 es una inmersión profunda en SmallRye Mutiny, la biblioteca de programación reactiva utilizada en Quarkus.

  • El Capítulo 8 explica las características de las solicitudes HTTP y cómo podemos ser reactivos con HTTP.

  • El Capítulo 9 explica cómo puedes utilizar Quarkus para crear aplicaciones altamente concurrentes y eficientes que interactúen con una base de datos.

La parte final, la Parte IV, conecta los puntos y presenta cómo puedes construir sistemas reactivos con Quarkus:

  • El Capítulo 10 se sumerge en la integración de las aplicaciones Quarkus con las tecnologías de mensajería, un ingrediente esencial de los sistemas reactivos.

  • El Capítulo 11 se centra en la integración con Apache Kafka y AMQP, y en cómo construir sistemas reactivos con ellos.

  • El Capítulo 12 explora las distintas formas de consumir puntos finales HTTP desde una aplicación Quarkus y cómo reforzar la resistencia y la capacidad de respuesta.

  • El capítulo 13 trata de la observabilidad en los sistemas reactivos, como la autocuración, el rastreo y el monitoreo.

Preparándote

A lo largo de este libro, verás muchos ejemplos de código. Estos ejemplos ilustran los conceptos tratados en este libro. Algunos son básicos y se ejecutan en un IDE, y otros requieren un par de requisitos previos.

Cubrimos estos ejemplos, uno por uno, a lo largo de este libro. Ahora bien, puede que no te guste el suspense o, más probablemente, que ya estés cansado de oírnos parlotear largo y tendido y sólo quieras ver cómo funciona. Si es así, simplemente dirige tu navegador a https://github.com/cescoffier/reactive-systems-in-java y no dudes en probarlo un poco. Puedes recuperar el código con Git utilizando git clone https://github.com/cescoffier/reactive-systems-in-java.git. También puedes descargar un archivo ZIP y descomprimirlo.

El código está organizado por capítulos. Por ejemplo, el código relacionado con el Capítulo 2 está disponible en el directorio chapter-2(Tabla P-1). Dependiendo del capítulo, el código puede estar dividido en varios módulos. Para los ejemplos que están disponibles en el repositorio de código, el título del fragmento de código en el libro indica la ubicación del archivo en el repositorio.

Tabla P-1. Localización del código por capítulo
Capítulo Título Ruta

Capítulo 2

Introducción a Quarkus

https://github.com/cescoffier/reactive-systems-in-java/tree/master/chapter-2

Capítulo 3

El lado oscuro de los sistemas distribuidos

https://github.com/cescoffier/reactive-systems-in-java/tree/master/chapter-3

Capítulo 4

Principios de diseño de los sistemas reactivos

https://github.com/cescoffier/reactive-systems-in-java/tree/master/chapter-4

Capítulo 5

Programación Reactiva: Domando la Asincronía

https://github.com/cescoffier/reactive-systems-in-java/tree/master/chapter-5

Capítulo 7

Mutiny: Una API de programación reactiva basada en eventos

https://github.com/cescoffier/reactive-systems-in-java/tree/master/chapter-7

Capítulo 8

HTTP con la reactividad en mente

https://github.com/cescoffier/reactive-systems-in-java/tree/master/chapter-8

Capítulo 9

Acceder a los datos de forma reactiva

https://github.com/cescoffier/reactive-systems-in-java/tree/master/chapter-9

Capítulo 10

Mensajería reactiva: El Tejido Conectivo

https://github.com/cescoffier/reactive-systems-in-java/tree/master/chapter-10

Capítulo 11

El Bus de Eventos: La columna vertebral

https://github.com/cescoffier/reactive-systems-in-java/tree/master/chapter-11

Capítulo 12

Cliente REST Reactivo: Conexión con puntos finales HTTP

https://github.com/cescoffier/reactive-systems-in-java/tree/master/chapter-12

Capítulo 13

Observación de Arquitecturas Reactivas y Dirigidas por Eventos

https://github.com/cescoffier/reactive-systems-in-java/tree/master/chapter-13

Los ejemplos del repositorio de código utilizan Java 11, así que asegúrate de tener instalado en tu máquina un kit de desarrollo de Java (JDK) adecuado. También utilizan Apache Maven como herramienta de compilación. No es necesario que instales Maven, ya que el repositorio utiliza el Maven Wrapper (que aprovisiona Maven automáticamente).Sin embargo, si prefieres instalarlo, descárgalo del sitio web del Proyecto Apache Maven, y sigue las instrucciones de la página Instalar Apache Maven.

Para construir el código, ejecuta mvn verify desde la raíz del proyecto. Maven va a descargar un conjunto de artefactos, así que asegúrate de tener conexión a Internet.

Este libro trata sobre Quarkus, una pila Java nativa de Kubernetes. No necesitas instalar nada para utilizar Quarkus, siempre que tengas Java y Maven. Descargará todo lo demás automáticamente.

Necesitarás Docker. Docker se utiliza para crear contenedores para nuestras aplicaciones.Instala Docker siguiendo las instrucciones de la página Obtener Docker.

Por último, varios capítulos ilustran la implementación de nuestras aplicaciones reactivas en Kubernetes.Para implementar en Kubernetes, primero necesitas kubectl, una herramienta de línea de comandos para interactuar con Kubernetes. Instálala siguiendo las instrucciones de la página Instalar herramientas de Kubernetes. A menos que tengas un clúster de Kubernetes a mano, también recomendamos instalar minikube en tu máquina, para proporcionar un entorno Kubernetes. Sigue las instrucciones del sitio web de minikube para instalarlo.

¿Por qué necesitamos todas estas herramientas? Verás en este libro que ser reactivo añade restricciones a tu aplicación, pero también a tu infraestructura. Kubernetes proporciona las primitivas que necesitamos para desplegar aplicaciones, crear réplicas y mantener nuestro sistema en marcha. Por otro lado, Quarkus proporciona el conjunto de características que necesitamos para implementar aplicaciones reactivas, incluyendo E/S no bloqueante, programación reactiva, APIs reactivas y capacidades de mensajería. Quarkus también proporciona integración con Kubernetes para facilitar la implementación y configuración de las aplicaciones.

La Tabla P-2 enumera las herramientas que vamos a utilizar en el libro.

Tabla P-2. Herramientas utilizadas en este libro
Herramienta Página web Descripción

Java 11

https://adoptopenjdk.net

Máquina Virtual Java (JVM) y Kit de Desarrollo Java (JDK)

Apache Maven

https://maven.apache.org/download.cgi

Herramienta de automatización de la construcción, basada en el modelo de objetos del proyecto (POM)

Quarkus

https://quarkus.io

Una pila nativa de Kubernetes que optimiza Java para contenedores

Docker

https://www.docker.com/get-started

Creación y ejecución de contenedores

Kubernetes

https://kubernetes.io

Una plataforma de orquestación de contenedores, también conocida como K8s

minikube

https://minikube.sigs.k8s.io/docs/start

Una distribución local de Kubernetes

GraalVM

https://www.graalvm.org

Proporciona, entre otras herramientas, un compilador para crear ejecutables nativos a partir de código Java

Node.js

https://nodejs.org/en

Un motor de ejecución de JavaScript

Convenciones utilizadas en este libro

En este libro se utilizan las siguientes convenciones tipográficas:

Cursiva

Indica nuevos términos, URL, direcciones de correo electrónico, nombres de archivo y extensiones de archivo.

Constant width

Se utiliza en los listados de programas, así como dentro de los párrafos para referirse a elementos del programa como nombres de variables o funciones, bases de datos, tipos de datos, variables de entorno, sentencias y palabras clave.

Constant width bold

Muestra comandos u otros textos que deben ser tecleados literalmente por el usuario.

Constant width italic

Muestra el texto que debe sustituirse por valores proporcionados por el usuario o por valores determinados por el contexto.

Consejo

Este elemento significa un consejo o sugerencia.

Nota

Este elemento significa una nota general.

Advertencia

Este elemento indica una advertencia o precaución.

Aprendizaje en línea O'Reilly

Nota

Durante más de 40 años, O'Reilly Media ha proporcionado formación tecnológica y empresarial, conocimientos y perspectivas para ayudar a las empresas a alcanzar el éxito.

Nuestra red única de expertos e innovadores comparten sus conocimientos y experiencia a través de libros, artículos y nuestra plataforma de aprendizaje online. La plataforma de aprendizaje en línea de O'Reilly te ofrece acceso bajo demanda a cursos de formación en directo, rutas de aprendizaje en profundidad, entornos de codificación interactivos y una amplia colección de textos y vídeos de O'Reilly y de más de 200 editoriales. Para más información, visita http://oreilly.com.

Cómo contactar con nosotros

Dirige tus comentarios y preguntas sobre este libro a la editorial:

  • O'Reilly Media, Inc.
  • 1005 Gravenstein Highway Norte
  • Sebastopol, CA 95472
  • 800-998-9938 (en Estados Unidos o Canadá)
  • 707-829-0515 (internacional o local)
  • 707-829-0104 (fax)

Tenemos una página web para este libro, donde se enumeran erratas, ejemplos y cualquier información adicional. Puedes acceder a esta página en https://oreil.ly/ReactiveSysJava.

Envía un correo electrónico para comentar o hacer preguntas técnicas sobre este libro.

Para obtener noticias e información sobre nuestros libros y cursos, visita http://oreilly.com.

Encuéntranos en Facebook: http://facebook.com/oreilly

Síguenos en Twitter: http://twitter.com/oreillymedia

Míranos en YouTube: http://youtube.com/oreillymedia

Agradecimientos

Escribir un libro nunca es fácil. Es una tarea larga y exigente, que requiere mucha energía y consume bastante tiempo de la familia. Por ello, nuestro primer agradecimiento va dirigido a nuestras familias, que nos han apoyado durante este maratón.

También estamos agradecidos por trabajar con gente excepcional en Red Hat. Innumerables personas nos han ayudado durante este viaje; es imposible citarlas a todas. Un agradecimiento especial a Georgios Andrianakis, Roberto Cortez, Stuart Douglas, Stéphane Epardaud, Jason Greene, Sanne Grinovero, Gavin King, Martin Kouba, Julien Ponge, Erin Schnabel, Guillaume Smet, Michal Szynkiewicz, Ladislav Thon y Julien Viet. Su trabajo no sólo es brillante, sino también impresionante. Para nosotros es un privilegio trabajar con desarrolladores de tan alto nivel.

Por último, damos las gracias a todos los revisores que nos han proporcionado comentarios fantásticos y constructivos: Mary Grygleski, Adam Bellemare, Antonio Goncalves, Mark Little, Scott Morrison, Nick Keune y Chris Mayfield.

Get Sistemas reactivos en Java now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.