{"id":76573,"date":"2020-04-03T13:42:25","date_gmt":"2020-04-03T11:42:25","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/nativnaya-kompilyacziya-v-quarkus-pochemu-eto-vazhno"},"modified":"2020-04-03T13:42:25","modified_gmt":"2020-04-03T11:42:25","slug":"nativnaya-kompilyacziya-v-quarkus-pochemu-eto-vazhno","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/nativnaya-kompilyacziya-v-quarkus-pochemu-eto-vazhno","title":{"rendered":"Compilaci\u00f3n nativa en Quarkus: por qu\u00e9 es importante","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u00a1Hola a todos! Este es el segundo post de nuestra serie sobre Quarkus. Hoy hablaremos de la compilaci\u00f3n nativa.<\/p>\n<p><img decoding=\"async\" alt=\"Compilaci\u00f3n nativa en Quarkus: por qu\u00e9 es importante\" src=\"\/wp-content\/uploads\/2020\/04\/3690313f6718405b06f0a6b5360767e3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/blog\/2019\/03\/20\/quarkus-0-12-0-released\/\">Quarkus<\/a><\/noindex> es una pila de Java dise\u00f1ada para <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/kubernetes\/\">Kubernetes<\/a><\/noindex>. Y aunque, por supuesto, queda mucho por hacer, hemos trabajado bien en muchos aspectos, incluyendo la optimizaci\u00f3n de la JVM y de varios frameworks. Una de las caracter\u00edsticas de Quarkus que ha generado un gran inter\u00e9s por parte de los desarrolladores es el enfoque integral y sin costuras para convertir el c\u00f3digo Java en archivos ejecutables para un sistema operativo espec\u00edfico (lo que se denomina \"compilaci\u00f3n nativa\") de manera similar a C y C++, donde dicha compilaci\u00f3n generalmente ocurre al final de un ciclo que consiste en construir, probar y desplegar.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nY aunque la compilaci\u00f3n nativa, como mostraremos a continuaci\u00f3n, es importante, cabe destacar que Quarkus tambi\u00e9n funciona muy bien en una m\u00e1quina Java normal OpenJDK Hotspot gracias a las mejoras de rendimiento que hemos implementado en toda la pila. Por lo tanto, la compilaci\u00f3n nativa debe considerarse como un bono adicional que se puede utilizar a voluntad o necesidad. De hecho, en lo que respecta a las im\u00e1genes nativas, Quarkus se basa en gran medida en OpenJDK. Adem\u00e1s, el modo de desarrollo, que ha sido bien recibido por los desarrolladores, permite pruebas casi instant\u00e1neas de cambios gracias a las avanzadas capacidades de ejecuci\u00f3n din\u00e1mica de c\u00f3digo que se implementan en Hotspot. Adem\u00e1s, al crear im\u00e1genes nativas, GraalVM utiliza la biblioteca de clases de OpenJDK y las capacidades de HotSpot.<\/p>\n<p>Entonces, \u00bfpor qu\u00e9 es necesaria la compilaci\u00f3n nativa si todo ya est\u00e1 tan bien optimizado? A esta pregunta intentaremos responder a continuaci\u00f3n.<\/p>\n<p>Comencemos con lo obvio: Red Hat tiene una gran experiencia en la optimizaci\u00f3n de JVM, pilas y frameworks a lo largo del desarrollo del proyecto <noindex><a rel=\"nofollow\" href=\"http:\/\/www.jboss.org\/\">JBoss<\/a><\/noindex>, incluyendo:<\/p>\n<ul>\n<li>El primer servidor de aplicaciones para ejecutar en la nube en la plataforma <noindex><a rel=\"nofollow\" href=\"https:\/\/www.redhat.com\/en\/blog\/openshift-is-the-first-paas-to-support-java-ee-6-full-profile-in-the-cloud\">Red Hat OpenShift<\/a><\/noindex>.<\/li>\n<li>El primer servidor de aplicaciones para ejecutar en computadoras <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/index.php\/videos\/youtube\/9c-g7UxT0nk\/\">Plug PC<\/a><\/noindex>.<\/li>\n<li>El primer servidor de aplicaciones para ejecutar en <noindex><a rel=\"nofollow\" href=\"http:\/\/blog.arungupta.me\/wildfly-on-raspberry-pi-techtip-24\/\">Raspberry Pi<\/a><\/noindex>.<\/li>\n<li>Una serie de proyectos que funcionan en dispositivos <noindex><a rel=\"nofollow\" href=\"http:\/\/www.jboss.org\/iot\/android\/\">Android<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>\nDurante muchos a\u00f1os, hemos abordado los problemas de ejecuci\u00f3n de aplicaciones Java en la nube y en dispositivos con recursos limitados (conocidos como IoT) y hemos aprendido a maximizar el rendimiento y la optimizaci\u00f3n de la memoria en la JVM. Al igual que muchos otros, hace tiempo que trabajamos con la compilaci\u00f3n nativa de aplicaciones Java a trav\u00e9s de <noindex><a rel=\"nofollow\" href=\"https:\/\/gcc.gnu.org\/wiki\/GCJ\">GCJ<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/readytalk.github.io\/avian\/\">Avian<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.excelsiorjet.com\/\">Excelsior JET<\/a><\/noindex> e incluso <noindex><a rel=\"nofollow\" href=\"https:\/\/source.android.com\/devices\/tech\/dalvik\">Dalvik<\/a><\/noindex> y somos completamente conscientes de las ventajas y desventajas de este enfoque (por ejemplo, la dilema entre la versatilidad de 'compilar una vez - ejecutar en cualquier lugar' y el hecho de que las aplicaciones compiladas tienen un tama\u00f1o menor y se inician m\u00e1s r\u00e1pido).<\/p>\n<p>\u00bfPor qu\u00e9 es tan importante tener en cuenta estas ventajas y desventajas? Porque en algunas situaciones, su relaci\u00f3n se vuelve decisiva:<\/p>\n<ul>\n<li>Por ejemplo, en entornos serverless\/event-driven, donde <noindex><a rel=\"nofollow\" href=\"https:\/\/mikhail.io\/2018\/08\/serverless-cold-start-war\/\">los servicios simplemente deben iniciarse<\/a><\/noindex> en modo de tiempo real (duro o blando) para poder reaccionar a los eventos. A diferencia de los servicios persistentes de larga duraci\u00f3n, aqu\u00ed la duraci\u00f3n del inicio en fr\u00edo aumenta cr\u00edticamente el tiempo de respuesta. Iniciar la JVM todav\u00eda toma un tiempo considerable, y aunque en algunos casos se puede reducir de forma puramente hardware, la diferencia entre un segundo y 5 milisegundos puede ser una cuesti\u00f3n de vida o muerte. S\u00ed, se puede experimentar con la creaci\u00f3n de un respaldo en caliente de m\u00e1quinas Java (lo que, por ejemplo, hicimos al <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/projectodd\/kwsk\">portar OpenWhisk a Knative<\/a><\/noindex>), pero por s\u00ed solo no garantiza la cantidad suficiente de JVM para manejar las solicitudes a medida que se escala la carga. Y desde un punto de vista econ\u00f3mico, sin duda, no es la opci\u00f3n m\u00e1s acertada.<\/li>\n<li>Adem\u00e1s, hay otro aspecto que a menudo surge, como la multitenencia. A pesar de que la JVM ha llegado a acercarse mucho a las capacidades de los sistemas operativos, todav\u00eda no pueden hacer lo que tan acostumbrados estamos en Linux: aislar procesos. Por lo tanto, un fallo en un hilo puede romper toda la m\u00e1quina Java. Muchos intentan sortear esta deficiencia asignando a cada usuario una JVM separada para las aplicaciones, con el fin de minimizar las consecuencias de un fallo. Es bastante l\u00f3gico, pero no se combina bien con la escalabilidad.<\/li>\n<li>Adem\u00e1s, para las aplicaciones orientadas a la nube, es importante un indicador como la densidad de servicios en el host. La transici\u00f3n hacia la metodolog\u00eda <noindex><a rel=\"nofollow\" href=\"https:\/\/12factor.net\/\">de las 12 factores de la aplicaci\u00f3n<\/a><\/noindex>, los microservicios y Kubernetes aumentan la cantidad de m\u00e1quinas Java por aplicaci\u00f3n. Esto significa que, por un lado, todo esto proporciona elasticidad y confiabilidad, pero al mismo tiempo, el consumo de memoria base por servicio tambi\u00e9n aumenta, y parte de estos gastos no siempre es estrictamente necesario. Los archivos ejecutables compilados est\u00e1ticamente se benefician aqu\u00ed de diversas t\u00e9cnicas de optimizaci\u00f3n, como la eliminaci\u00f3n de c\u00f3digo muerto de bajo nivel, donde solo se incluyen en la imagen final aquellas partes de los marcos (incluyendo el propio JDK) que el servicio realmente utiliza. Por ello, la compilaci\u00f3n nativa de Quarkus ayuda a ubicar m\u00e1s densamente las instancias de servicios en el host sin comprometer la seguridad.<\/li>\n<\/ul>\n<p>\nDe hecho, los argumentos mencionados anteriormente ya son suficientes para comprender la justificaci\u00f3n de la compilaci\u00f3n nativa desde la perspectiva de los participantes del proyecto Quarkus. Sin embargo, hay una raz\u00f3n m\u00e1s, que no es t\u00e9cnica, pero tambi\u00e9n importante: en los \u00faltimos a\u00f1os, muchos programadores y empresas desarrolladoras han abandonado Java a favor de nuevos lenguajes de programaci\u00f3n, considerando que Java, junto con sus JVM, pilas y marcos se ha vuelto demasiado voraz en cuanto a memoria, demasiado lenta, etc.<\/p>\n<p>Sin embargo, la costumbre de utilizar la misma herramienta para resolver cualquier tarea \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.reddit.com\/r\/java\/comments\/8xv3ha\/does_anybody_use_spring_boot_with_aws_lambda_do\/\">no siempre es correcto<\/a><\/noindex>. A veces es mejor dar un paso atr\u00e1s y buscar algo diferente. Y si Quarkus obliga a las personas a hacer una pausa y reflexionar, eso es bueno para todo el ecosistema de Java. Quarkus encarna una visi\u00f3n innovadora de c\u00f3mo crear aplicaciones m\u00e1s eficientes, haciendo que Java sea m\u00e1s relevante para nuevas arquitecturas de aplicaciones, como serverless. Adem\u00e1s, gracias a su extensibilidad, Quarkus, como esperamos, contar\u00e1 con todo un ecosistema de extensiones de Java, aumentando significativamente la cantidad de marcos que de forma nativa soportar\u00e1n la compilaci\u00f3n en las aplicaciones.<br \/>\n<br \/>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/redhatrussia\/blog\/495212\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0421 \u0432\u0430\u043c\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0441\u0442 \u0438\u0437 \u043d\u0430\u0448\u0435\u0439 \u0441\u0435\u0440\u0438\u0438 \u043f\u043e Quarkus \u2013 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. Quarkus \u2013 \u044d\u0442\u043e Java-\u0441\u0442\u0435\u043a, \u0437\u0430\u0442\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434 Kubernetes. \u0418 \u0445\u043e\u0442\u044f \u0437\u0434\u0435\u0441\u044c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043d\u043e\u0433\u043e\u0435 \u0435\u0449\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043c\u044b \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0440\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043c\u0430\u0441\u0441\u0443 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e JVM \u0438 \u0446\u0435\u043b\u043e\u0433\u043e \u0440\u044f\u0434\u0430 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432. \u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 Quarkus, \u0432\u044b\u0437\u0432\u0430\u0432\u0448\u0435\u0439 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0441\u0442\u0430\u043b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":76574,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-76573","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\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442!\" \/>\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\/nativnaya-kompilyacziya-v-quarkus-pochemu-eto-vazhno\" \/>\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\u041d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0432 Quarkus \u2013 \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442!\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/nativnaya-kompilyacziya-v-quarkus-pochemu-eto-vazhno\" \/>\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-04-03T11:42:25+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-03T11:42:25+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\udd47Compilaci\u00f3n nativa en Quarkus \u2013 por qu\u00e9 es importante | ProHoster","description":"\u00a1Hola a todos!","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/nativnaya-kompilyacziya-v-quarkus-pochemu-eto-vazhno","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\u041d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0432 Quarkus \u2013 \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442!","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/nativnaya-kompilyacziya-v-quarkus-pochemu-eto-vazhno","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-04-03T11:42:25+00:00","article:modified_time":"2020-04-03T11:42:25+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"76573","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 17:34:49","updated":"2022-09-28 02:06:54","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\/76573","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=76573"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/76573\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/76574"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=76573"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=76573"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=76573"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}