{"id":74795,"date":"2020-03-20T20:42:21","date_gmt":"2020-03-20T17:42:21","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie"},"modified":"2020-03-20T20:42:21","modified_gmt":"2020-03-20T17:42:21","slug":"kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","title":{"rendered":"C\u00f3mo Quarkus une la programaci\u00f3n imperativa y reactiva","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Este a\u00f1o planeamos desarrollar en serio los temas de contenedores, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/product_by_id\/112863337\">Java Nativa en la Nube<\/a><\/noindex> y <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/product_by_id\/125705747\">Kubernetes<\/a><\/noindex>. La continuaci\u00f3n l\u00f3gica de estos temas ser\u00e1 hablar del marco Quarkus, ya <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/haulmont\/blog\/443242\/\">examinado<\/a><\/noindex> en Habr\u00e9. El art\u00edculo de hoy se centra no tanto en la estructura de la \u00abJava subat\u00f3mica ultrarr\u00e1pida\u00bb, sino en las perspectivas que Quarkus aporta a la empresa.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo Quarkus une la programaci\u00f3n imperativa y reactiva\" src=\"\/wp-content\/uploads\/2020\/03\/6337d74cb66ee078c2b7c206be3d88fe.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJava y la JVM siguen siendo extremadamente populares, pero al trabajar con tecnolog\u00edas sin servidor y microservicios orientados a la nube, Java y otros lenguajes para la JVM se utilizan cada vez menos, ya que ocupan demasiada memoria y se cargan demasiado lento, lo que los hace inadecuados para el uso con contenedores de corta duraci\u00f3n. Afortunadamente, esta situaci\u00f3n est\u00e1 comenzando a cambiar gracias a Quarkus.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>\u00a1La Java subat\u00f3mica ultrarr\u00e1pida ha alcanzado un nuevo nivel!<\/h3>\n<p>\n42 lanzamientos, 8 meses de trabajo de la comunidad y 177 desarrolladores incre\u00edbles \u2013 el resultado de todo esto fue el lanzamiento en noviembre de 2019 <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/quarkus\/\">Quarkus 1.0<\/a><\/noindex>, un lanzamiento que marca un hito importante en el desarrollo del proyecto y ofrece un mont\u00f3n de funciones y capacidades geniales (puede leer m\u00e1s sobre ellas en <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/blog\/announcing-quarkus-1-0\/\">el anuncio<\/a><\/noindex>).<\/p>\n<p>Hoy contaremos c\u00f3mo Quarkus une los modelos de programaci\u00f3n imperativa y reactiva basados en un n\u00facleo reactivo \u00fanico. Comenzaremos con una breve excursi\u00f3n a la historia y luego examinaremos en detalle en qu\u00e9 consiste el dualismo del n\u00facleo reactivo de Quarkus y c\u00f3mo <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/enterprise-java\/\">Java<\/a><\/noindex>-los desarrolladores pueden aprovechar estas ventajas.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/microservices\/\">Los microservicios<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/event-driven\/\">arquitecturas impulsadas por eventos<\/a><\/noindex> y <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/serverless-architecture\/\">funciones sin servidor \u2013 todo esto est\u00e1, hoy en d\u00eda, en auge. Recientemente, crear arquitecturas orientadas a la nube se ha vuelto mucho m\u00e1s f\u00e1cil y accesible, sin embargo, los problemas permanecen, especialmente para los desarrolladores de Java. Por ejemplo, en el caso de las funciones sin servidor y los microservicios, existe una necesidad urgente de reducir el tiempo de arranque, disminuir el consumo de memoria y hacer que su desarrollo sea m\u00e1s conveniente y placentero. En los \u00faltimos a\u00f1os, Java ha realizado algunas mejoras, como las funcionalidades de ergonom\u00eda mejoradas para contenedores, etc. Sin embargo, lograr que Java funcione correctamente en un contenedor sigue siendo un desaf\u00edo. Por lo tanto, comenzaremos examinando algunas de las complejidades internas de Java que se manifiestan de manera m\u00e1s aguda en el desarrollo de aplicaciones Java orientadas a contenedores.<\/a><\/noindex>-Las funciones son, hoy en d\u00eda, lo que se llama un \u00e1rea en auge. Desde hace poco, la creaci\u00f3n de arquitecturas orientadas a la nube se ha vuelto mucho m\u00e1s f\u00e1cil y accesible, sin embargo, los problemas persisten, especialmente para los desarrolladores de Java. Por ejemplo, en el caso de funciones serverless y microservicios, existe una necesidad urgente de reducir el tiempo de arranque, disminuir el consumo de memoria y, en definitiva, hacer que su desarrollo sea m\u00e1s c\u00f3modo y placentero. En los \u00faltimos a\u00f1os, Java ha introducido varias mejoras, como funcionalidades de ergonom\u00eda mejoradas para contenedores, entre otras. Sin embargo, lograr un funcionamiento adecuado de Java en un contenedor sigue siendo complicado. Por lo tanto, comenzaremos examinando algunas de las complejidades internas de Java que se manifiestan con mayor intensidad al desarrollar aplicaciones Java orientadas a contenedores.<\/p>\n<p>Comencemos por la historia.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo Quarkus une la programaci\u00f3n imperativa y reactiva\" src=\"\/wp-content\/uploads\/2020\/03\/4478ef5c3b89a1bd91752a4ede74bdfd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Flujos y contenedores<\/h3>\n<p>\nA partir de la versi\u00f3n 8u131, Java ha comenzado a soportar contenedores de manera m\u00e1s o menos efectiva gracias a las mejoras en el funcionalismo de ergonomics. En particular, ahora la JVM sabe en cu\u00e1ntos n\u00facleos de procesador se est\u00e1 ejecutando y puede ajustar las piscinas de hilos en consecuencia, generalmente las piscinas fork\/join. Sin duda, esto es maravilloso, pero supongamos que tenemos una aplicaci\u00f3n web tradicional que utiliza servlets HTTP y se ejecuta en Tomcat, Jetty, etc. Como resultado, esta aplicaci\u00f3n asignar\u00e1 un hilo diferente para cada solicitud y permitir\u00e1 que este hilo se bloquee mientras espera operaciones de entrada\/salida, por ejemplo, al acceder a bases de datos, archivos u otros servicios. Es decir, el tama\u00f1o de tal aplicaci\u00f3n no depende de la cantidad de n\u00facleos disponibles, sino de la cantidad de solicitudes concurrentes. Adem\u00e1s, esto significa que las cuotas o l\u00edmites en Kubernetes en cuanto a la cantidad de n\u00facleos no ayudar\u00e1n mucho aqu\u00ed, y eventualmente terminar\u00e1 en una limitaci\u00f3n.<\/p>\n<h3>Agotamiento de memoria<\/h3>\n<p>\nLos hilos son memoria. Y las limitaciones de memoria dentro de los contenedores no son una panacea. Simplemente comience a aumentar la cantidad de aplicaciones y hilos, y tarde o temprano se encontrar\u00e1 con un crecimiento cr\u00edtico en la frecuencia de conmutaciones y, como consecuencia, con una degradaci\u00f3n del rendimiento. Adem\u00e1s, si la aplicaci\u00f3n utiliza marcos de microservicios tradicionales o se conecta a una base de datos, o utiliza cach\u00e9, o consume memoria de alguna otra manera, necesita evidentemente una herramienta que le permita mirar dentro de la JVM y ver c\u00f3mo gestiona la memoria, sin acabar con la propia JVM (por ejemplo, XX:+UseCGroupMemoryLimitForHeap). Y a pesar de que, a partir de Java 9, la JVM aprendi\u00f3 a reconocer los cgroups y adaptarse en consecuencia, la reserva y gesti\u00f3n de memoria siguen siendo tareas bastante complejas.<\/p>\n<h3>Cuotas y l\u00edmites<\/h3>\n<p>\nJava 11 introdujo soporte para cuotas de CPU (como PreferContainerQuotaForCPUCount). Kubernetes tambi\u00e9n ofrece soporte para l\u00edmites y cuotas. S\u00ed, todo esto tiene sentido, pero si la aplicaci\u00f3n nuevamente excede la cuota asignada, volvemos a la situaci\u00f3n en la que el tama\u00f1o \u2013 como sucede con las aplicaciones Java tradicionales \u2013 est\u00e1 determinado por la cantidad de n\u00facleos y asigna un hilo separado para cada solicitud, es decir, no sirve de mucho.<br \/>\nAdem\u00e1s, si se utilizan cuotas y l\u00edmites o funciones de escalado horizontal (scale-out) de la plataforma subyacente a Kubernetes, el problema no se resuelve por s\u00ed mismo. Simplemente gastamos m\u00e1s recursos en resolver el problema original o terminamos despilfarrando recursos. Y si se trata de un sistema altamente demandado en una nube p\u00fablica accesible, es casi seguro que empezamos a usar m\u00e1s recursos de los que realmente necesitamos.<\/p>\n<h3>\u00bfY qu\u00e9 hacer con todo esto?<\/h3>\n<p>\nEn t\u00e9rminos simples, se deben utilizar bibliotecas y marcos de entrada\/salida as\u00edncronos y no bloqueantes como Netty, <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/blog\/2019\/10\/21\/eclipse-vert-x-3-8-1-update-for-red-hat-runtimes\/\">Vert.x<\/a><\/noindex> o Akka. Son mucho m\u00e1s adecuados para trabajar en contenedores debido a su naturaleza reactiva. Gracias a la entrada\/salida no bloqueante, el mismo hilo puede manejar m\u00faltiples solicitudes simult\u00e1neamente. Mientras una solicitud est\u00e1 esperando los resultados de entrada\/salida, el hilo que la procesa se libera y se ocupa de otra solicitud. Y cuando los resultados de entrada\/salida finalmente llegan, la procesaci\u00f3n de la primera solicitud contin\u00faa. Alternando el procesamiento de solicitudes en el mismo hilo, se puede reducir el n\u00famero total de hilos y disminuir el consumo de recursos para procesar solicitudes.<\/p>\n<p>Con la entrada\/salida no bloqueante, el n\u00famero de n\u00facleos se convierte en un par\u00e1metro clave, ya que determina cu\u00e1ntos hilos de entrada\/salida pueden ejecutarse en paralelo. Si se utiliza correctamente, esto permite distribuir de manera efectiva la carga entre los n\u00facleos y manejar cargas m\u00e1s altas con menos recursos.<\/p>\n<h3>\u00bfAs\u00ed que eso es todo?<\/h3>\n<p>\nNo, hay algo m\u00e1s. La programaci\u00f3n reactiva ayuda a utilizar mejor los recursos, pero tambi\u00e9n tiene su costo. En particular, el c\u00f3digo tendr\u00e1 que reescribirse seg\u00fan los principios de no bloqueo y evitar la bloqueo de hilos de entrada\/salida. Y esta es una modelo de desarrollo y ejecuci\u00f3n completamente diferente. Y aunque hay muchas bibliotecas \u00fatiles, sigue siendo un cambio radical en la forma habitual de pensar.<\/p>\n<p>Primero, necesitas aprender a escribir c\u00f3digo que se ejecute de manera as\u00edncrona. Una vez que comiences a utilizar la entrada y salida no bloqueante, debes especificar claramente qu\u00e9 debe suceder al recibir una respuesta a una solicitud. Ya no puedes simplemente bloquear y esperar. En su lugar, puedes pasar callbacks, utilizar programaci\u00f3n reactiva o continuaciones. Pero eso no es todo: para utilizar la entrada y salida no bloqueante, necesitas servidores y clientes no bloqueantes, y preferiblemente en todas partes. En el caso de HTTP, todo es simple, pero tambi\u00e9n hay bases de datos, sistemas de archivos y mucho m\u00e1s.<\/p>\n<p>Y aunque la reactividad total y continua ofrece la m\u00e1xima eficiencia, puede ser dif\u00edcil de digerir en la pr\u00e1ctica. Por lo tanto, la capacidad de combinar c\u00f3digo reactivo e imperativo se vuelve una condici\u00f3n necesaria para:<\/p>\n<ol>\n<li>Utilizar los recursos de manera eficiente en las \u00e1reas m\u00e1s cargadas del sistema de software;<\/li>\n<li>Usar un c\u00f3digo m\u00e1s sencillo en estilo en las dem\u00e1s partes.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Presentamos Quarkus<\/h3>\n<p>\nDe hecho, esa es la esencia de Quarkus: combinar los modelos reactivo e imperativo en un solo entorno de ejecuci\u00f3n.<\/p>\n<p>Quarkus se basa en Vert.x y Netty, sobre los cuales se utiliza toda una serie de frameworks y extensiones reactivas dise\u00f1adas para ayudar a los desarrolladores. Quarkus est\u00e1 destinado a construir no solo microservicios HTTP, sino tambi\u00e9n arquitecturas impulsadas por eventos. Gracias a su naturaleza reactiva, trabaja de manera muy eficiente con sistemas de mensajer\u00eda (Apache Kafka, AMQP, etc.).<\/p>\n<p>La clave est\u00e1 en c\u00f3mo utilizar el mismo motor reactivo tanto para c\u00f3digo imperativo como para c\u00f3digo reactivo.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo Quarkus une la programaci\u00f3n imperativa y reactiva\" src=\"\/wp-content\/uploads\/2020\/03\/f7269f4bb9d6767ab3bcc79d317861b0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Quarkus lo maneja magistralmente. La elecci\u00f3n entre imperativo y reactivo es obvia: usar el n\u00facleo reactivo tanto para uno como para otro. Y lo que realmente ayuda es el c\u00f3digo no bloqueante y r\u00e1pido, que maneja casi todo lo que pasa por el hilo del ciclo de eventos (event-loop thread, tambi\u00e9n conocido como IO thread). Pero si tienes aplicaciones REST cl\u00e1sicas o aplicaciones del lado del cliente, Quarkus tiene lista una modelo de programaci\u00f3n imperativa. Por ejemplo, el soporte HTTP en Quarkus se basa en el uso de un motor no bloqueante y reactivo (Eclipse Vert.x y Netty). Todas las solicitudes HTTP que recibe tu aplicaci\u00f3n pasan primero por el ciclo de eventos (IO Thread) y luego se env\u00edan a la parte del c\u00f3digo que gestiona las solicitudes. Dependiendo del destino, el c\u00f3digo de control de solicitudes puede ser llamado en un hilo separado (el llamado worker thread, que se aplica a servlets y Jax-RS) o puede usar el hilo de entrada y salida original (ruta reactiva).<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo Quarkus une la programaci\u00f3n imperativa y reactiva\" src=\"\/wp-content\/uploads\/2020\/03\/7338d6881fc9d7582f3fadf3e5f69618.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Para los conectores de sistemas de transmisi\u00f3n de mensajes se utilizan clientes no bloqueantes que funcionan sobre el motor Vert.x. Por lo tanto, puedes enviar, recibir y procesar mensajes de sistemas de mensajer\u00eda middleware de manera efectiva.<\/p>\n<p>se indica que: <noindex><a rel=\"nofollow\" href=\"http:\/\/www.quarkus.io\/\">Quarkus.io<\/a><\/noindex> se han reunido varias buenas gu\u00edas que te ayudar\u00e1n a empezar a trabajar con Quarkus:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/reactive-routes-guide\">Usando Rutas Reactivas<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/reactive-sql-clients\">Clientes SQL Reactivos<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/kafka-guide\">Usando Apache Kafka con Mensajer\u00eda Reactiva<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/amqp-guide\">Usando AMQP con Mensajer\u00eda Reactiva<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/using-vertx\">Usando la API de Vertx<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nAdem\u00e1s, hemos preparado lecciones pr\u00e1cticas en l\u00ednea para familiarizarte con diversos aspectos de la programaci\u00f3n reactiva, y para completarlas solo necesitas un navegador; no se requiere ninguna IDE y ni siquiera un ordenador es obligatorio. Puedes encontrar estas lecciones <noindex><a rel=\"nofollow\" href=\"https:\/\/learn.openshift.com\/middleware\/courses\/middleware-quarkus\/\">aqu\u00ed<\/a><\/noindex>.<\/p>\n<h3>Recursos \u00fatiles<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.redhat.com\/cms\/managed-files\/cl-4-reasons-try-quarkus-checklist-f19180cs-201909-en.pdf\">4 razones para probar Quarkus<\/a><\/noindex><\/li>\n<li>El sitio del proyecto Quarkus es - <noindex><a rel=\"nofollow\" href=\"http:\/\/quarkus.io\">quarkus.io<\/a><\/noindex><\/li>\n<li>El proyecto Quarkus en GitHub es - <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/quarkusio\/quarkus\">github.com\/quarkusio\/quarkus<\/a><\/noindex><\/li>\n<li>Twitter del proyecto Quarkus es - <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/QuarkusIO\">twitter.com\/QuarkusIO<\/a><\/noindex><\/li>\n<li>Chat del proyecto Quarkus es - <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkusio.zulipchat.com\/\">quarkusio.zulipchat.com<\/a><\/noindex><\/li>\n<li>Foros del proyecto Quarkus son - <noindex><a rel=\"nofollow\" href=\"https:\/\/groups.google.com\/forum\/#\">groups.google.com\/forum\/#<\/a><\/noindex>!forum\/quarkus-dev<\/li>\n<\/ul>\n<h3>10 tutoriales en video sobre Quarkus para familiarizarse con el tema<\/h3>\n<p>\nComo dicen en el sitio <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/\">Quarkus.io<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/blog\/2019\/05\/09\/create-your-first-quarkus-project-with-eclipse-ide-red-hat-codeready-studio\/\">Quarkus<\/a><\/noindex> canales l\u00f3gicos <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/kubernetes\/\">Kubernetes<\/a><\/noindex>- una pila Java orientada, dise\u00f1ada para GraalVM y OpenJDK HotSpot, y construida a partir de las mejores bibliotecas y est\u00e1ndares de Java.<\/p>\n<p>Para ayudarte a entender el tema, hemos seleccionado 10 tutoriales en video que cubren diversos aspectos de Quarkus y ejemplos de su uso:<\/p>\n<h4>1. Presentando Quarkus: Un marco Java de nueva generaci\u00f3n para Kubernetes<\/h4>\n<p>\nAutores: Thomas Qvarnstrom y Jason Greene<br \/>\nEl objetivo del proyecto Quarkus es crear una plataforma Java para Kubernetes y entornos serverless, as\u00ed como combinar los modelos de programaci\u00f3n reactiva e imperativa dentro de un \u00fanico entorno de ejecuci\u00f3n, para que los desarrolladores puedan variar flexiblemente su enfoque al trabajar con una amplia gama de arquitecturas de aplicaciones distribuidas. Descubra m\u00e1s en la conferencia introductoria a continuaci\u00f3n.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"ZCsWi_641Rk\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/ZCsWi_641Rk\/hqdefault.jpg\" alt=\"Reproducir video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>2. Quarkus: Java subat\u00f3mica y ultrarr\u00e1pida<\/h4>\n<p>\nAutor: Burr Sutter<br \/>\nEl video tutorial del seminario DevNation Live muestra c\u00f3mo usar Quarkus para optimizar aplicaciones Java empresariales, API, microservicios y funciones serverless en un entorno Kubernetes\/OpenShift, haci\u00e9ndolos mucho m\u00e1s peque\u00f1os, r\u00e1pidos y escalables.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"7G_r1iyrn2c\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/7G_r1iyrn2c\/hqdefault.jpg\" alt=\"Reproducir video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>3. Quarkus y GraalVM: acelerando Hibernate a velocidades extremas y reduci\u00e9ndolo a tama\u00f1os subat\u00f3micos<\/h4>\n<p>\nAutor: Sanne Grinovero<br \/>\nEn esta presentaci\u00f3n aprender\u00e1 c\u00f3mo surgi\u00f3 Quarkus, c\u00f3mo funciona y c\u00f3mo permite hacer bibliotecas complejas, como Hibernate ORM, compatibles con las im\u00e1genes nativas de GraalVM.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"za5CSBX-UME\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/za5CSBX-UME\/hqdefault.jpg\" alt=\"Reproducir video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>4. Aprendiendo a desarrollar aplicaciones serverless<\/h4>\n<p>\nAutor: Marthen Luther<br \/>\nEl video a continuaci\u00f3n muestra c\u00f3mo crear una simple aplicaci\u00f3n Java utilizando Quarkus y desplegarla como una aplicaci\u00f3n serverless en Knative.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"-c1Sh-1uAeM\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/-c1Sh-1uAeM\/hqdefault.jpg\" alt=\"Reproducir video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>5. Quarkus: programar con placer<\/h4>\n<p>\nAutor: Edson Yanaga<br \/>\nGu\u00eda en video para crear su primer proyecto Quarkus, que permite entender por qu\u00e9 Quarkus est\u00e1 conquistando los corazones de los desarrolladores.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"8r3ZV36ah4I\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/8r3ZV36ah4I\/hqdefault.jpg\" alt=\"Reproducir video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>6. Java y contenedores: \u00bfc\u00f3mo ser\u00e1 su futuro conjunto?<\/h4>\n<p>\nAutor: Mark Little<br \/>\nEsta presentaci\u00f3n introduce la historia de Java y explica por qu\u00e9 Quarkus es el futuro de Java.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"O085h6jKBWc\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/O085h6jKBWc\/hqdefault.jpg\" alt=\"Reproducir video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>7. Quarkus: Java subat\u00f3mica y ultrarr\u00e1pida<\/h4>\n<p>\nAutor: Dimitris Andreadis<br \/>\nResumen de las ventajas de Quarkus que han sido reconocidas por los desarrolladores: simplicidad, velocidades extremadamente altas, mejores bibliotecas y est\u00e1ndares.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"UWETnSFB0WA\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/UWETnSFB0WA\/hqdefault.jpg\" alt=\"Reproducir video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>8. Quarkus y sistemas reactivos subat\u00f3micos<\/h4>\n<p>\nAutor: Clement Escoffier<br \/>\nGracias a la integraci\u00f3n con GraalVM, Quarkus proporciona una experiencia de desarrollo ultrarr\u00e1pida y un entorno de ejecuci\u00f3n subat\u00f3mico. El autor habla sobre el lado reactivo de Quarkus y c\u00f3mo utilizarlo al crear aplicaciones reactivas y aplicaciones de transmisi\u00f3n de datos.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"trwJxZawglc\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/trwJxZawglc\/hqdefault.jpg\" alt=\"Reproducir video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>9. Quarkus y desarrollo \u00e1gil de aplicaciones en Eclipse MicroProfile<\/h4>\n<p>\nAutor: John Clingan<br \/>\nCombinando Eclipse MicroProfile y Quarkus, los desarrolladores pueden crear aplicaciones contenedoras MicroProfile completamente funcionales que se inician en cuesti\u00f3n de decenas de milisegundos. El video detalla c\u00f3mo codificar una aplicaci\u00f3n contenedora MicroProfile para su implementaci\u00f3n en la plataforma Kubernetes.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"hReKM6rmcho\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/hReKM6rmcho\/hqdefault.jpg\" alt=\"Reproducir video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>10. Java, versi\u00f3n \"Turbo\"<\/h4>\n<p>\nAutor: Marcus Biel<br \/>\nEl autor demuestra c\u00f3mo utilizar Quarkus para crear contenedores Java extremadamente peque\u00f1os y r\u00e1pidos, permitiendo un verdadero avance, especialmente en entornos sin servidor.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"eqUApOrYeS8\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/eqUApOrYeS8\/hqdefault.jpg\" alt=\"Reproducir video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\n<br \/>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/redhatrussia\/blog\/493010\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443 \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0432\u0441\u0435\u0440\u044c\u0435\u0437 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u043c\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, Cloud-Native Java \u0438 Kubernetes. \u041b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435\u043c \u044d\u0442\u0438\u0445 \u0442\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 Quarkus, \u0443\u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u043c \u043d\u0430 \u0425\u0430\u0431\u0440\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u044f\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u043d\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u00ab\u0441\u0443\u0431\u0430\u0442\u043e\u043c\u043d\u043e\u0439 \u0441\u0432\u0435\u0440\u0445\u0431\u044b\u0441\u0442\u0440\u043e\u0439 Java\u00bb, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043c \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Quarkus \u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u0432 Enterprise. Java \u0438 JVM \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b, \u043d\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u043c\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":74796,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-74795","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443 \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0432\u0441\u0435\u0440\u044c\u0435\u0437 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u043c\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, Cloud-Native Java \u0438\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a Quarkus \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0438\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0438 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443 \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0432\u0441\u0435\u0440\u044c\u0435\u0437 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u043c\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, Cloud-Native Java \u0438\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-03-20T17:42:21+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-20T17:42:21+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47C\u00f3mo Quarkus combina la programaci\u00f3n imperativa y reactiva | ProHoster","description":"Este a\u00f1o planeamos desarrollar seriamente los temas de contenedores, Java Cloud-Native y","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a Quarkus \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0438\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0438 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 | ProHoster","og:description":"\u0412 \u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443 \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0432\u0441\u0435\u0440\u044c\u0435\u0437 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u043c\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, Cloud-Native Java \u0438","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-03-20T17:42:21+00:00","article:modified_time":"2020-03-20T17:42:21+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"74795","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:07:28","updated":"2022-10-01 02:07:41","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/74795","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=74795"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/74795\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/74796"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=74795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=74795"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=74795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}