{"id":20024,"date":"2022-02-07T11:28:46","date_gmt":"2022-02-07T09:28:46","guid":{"rendered":"https:\/\/www.hiberus.com\/crecemos-contigo\/?p=20024"},"modified":"2023-11-28T09:13:07","modified_gmt":"2023-11-28T08:13:07","slug":"migracion-microservicios","status":"publish","type":"post","link":"https:\/\/www.hiberus.com\/crecemos-contigo\/migracion-microservicios\/","title":{"rendered":"Migraci\u00f3n a microservicios: la transici\u00f3n del monolito a los microservicios"},"content":{"rendered":"<p><span class=\"TextRun SCXW126999100 BCX0\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW126999100 BCX0\">Los monolitos pueden llegar a cumplir su funci\u00f3n en muchos<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\"> clientes.<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\">\u00a0De hecho, hasta hace pocos a\u00f1os, eran la norma. Se empaquetaba todo en\u00a0<\/span><span class=\"NormalTextRun CommentStart SCXW126999100 BCX0\">un \u00fanico servidor\u00a0<\/span><\/span><span class=\"TextRun SCXW126999100 BCX0\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW126999100 BCX0\">web<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\">\u00a0<\/span><\/span><span class=\"TextRun SCXW126999100 BCX0\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW126999100 BCX0\">y no se iba m\u00e1s all\u00e1.<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\">\u00a0Sin embargo,\u00a0<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\">a d\u00eda de hoy,\u00a0<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\">l<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\">as<strong> arquitecturas basadas en microservicios<\/strong> est\u00e1n de moda<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\">. <\/span><\/span><\/p>\n<p><span class=\"TextRun SCXW126999100 BCX0\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW126999100 BCX0\">Y<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\"> no es un sinsentido, ya que, como comentamos en el art\u00edculo anterior \u00ab<strong><a href=\"https:\/\/www.hiberus.com\/crecemos-contigo\/cuales-son-los-beneficios-de-una-arquitectura-microservicios\/\">Beneficios de una arquitectura microservicios<\/a><\/strong>\u00ab,<\/span><\/span><span class=\"TextRun SCXW126999100 BCX0\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW126999100 BCX0\">\u00a0desplegar\u00a0<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\">un sistema complejo<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\">\u00a0e<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\">n\u00a0<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\">una arquitectura de\u00a0<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\">microservicios supone una serie de beneficios que, tarde o temprano,\u00a0<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\">notar\u00e1n\u00a0<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\">los\u00a0<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\">usuarios<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\">\u00a0finales<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\">.<\/span><\/span><\/p>\n<p><span class=\"TextRun SCXW126999100 BCX0\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW126999100 BCX0\">La decisi\u00f3n de llevar a cabo una <strong>migraci\u00f3n a una <a href=\"https:\/\/www.hiberus.com\/crecemos-contigo\/de-una-arquitectura-tradicional-a-microservicios\/\" target=\"_blank\" rel=\"noopener\">arquitectura de microservicios<\/a><\/strong> y, concretamente, a <a href=\"https:\/\/www.hiberus.com\/crecemos-contigo\/que-son-los-microservicios-basados-en-eventos-rompiendo-el-modelo-sincrono\/\" target=\"_blank\" rel=\"noopener\">microservicios basados en eventos<\/a>, se suele tomar cuando el c\u00f3digo<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\">\u00a0existente en un monolito<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\"> se hace insostenible<\/span><strong><span class=\"NormalTextRun SCXW126999100 BCX0\">\u00a0<\/span><\/strong><span class=\"NormalTextRun SCXW126999100 BCX0\">por la gran cantidad de<strong> deuda t\u00e9cnica<\/strong> que alberga:\u00a0<\/span><\/span><\/p>\n<ol>\n<li><span class=\"TextRun SCXW126999100 BCX0\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW126999100 BCX0\">Hay partes <strong>duplicadas<\/strong>.<\/span><\/span><\/li>\n<li><strong><span class=\"TextRun SCXW126999100 BCX0\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW126999100 BCX0\">No hay <\/span><\/span><em><span class=\"TextRun SCXW126999100 BCX0\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"none\"><span class=\"NormalTextRun SpellingErrorV2 SCXW126999100 BCX0\">tests<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\">\u00a0<\/span><\/span><\/em><\/strong><span class=\"TextRun SCXW126999100 BCX0\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW126999100 BCX0\"><strong>autom\u00e1ticos<\/strong> que<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\">\u00a0<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\">prueben<\/span><span class=\"NormalTextRun SCXW126999100 BCX0\"> casos de uso.<\/span><\/span><\/li>\n<li><span class=\"TextRun SCXW126999100 BCX0\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW126999100 BCX0\">Existe la necesidad de <strong>escalar verticalmente<\/strong>, es decir, <\/span><span class=\"NormalTextRun SCXW126999100 BCX0\">mejorar el servidor web en el que est\u00e1 desplegado el monolito, <\/span><span class=\"NormalTextRun SCXW126999100 BCX0\">en fechas clave.<\/span><\/span><\/li>\n<li><span class=\"TextRun SCXW126999100 BCX0\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW126999100 BCX0\">Para introducir cambios <strong>hay que parar todo el sistema<\/strong>.<\/span><\/span><\/li>\n<li><span class=\"TextRun SCXW126999100 BCX0\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW126999100 BCX0\">Un error <\/span><\/span><em><span class=\"TextRun SCXW126999100 BCX0\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW126999100 BCX0\">hardware\u00a0<\/span><\/span><\/em><span class=\"TextRun SCXW126999100 BCX0\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW126999100 BCX0\"><strong>obliga a reiniciar<\/strong>.<\/span><\/span><\/li>\n<\/ol>\n<p>Desde nuestra experiencia, los microservicios resuelven problemas de escalabilidad y de rendimiento, adem\u00e1s de mejorar el trabajo en equipo y la eficiencia de trabajo. Pero <strong>no solamente lo pensamos nosotros, sino que tambi\u00e9n lo piensan cientos de programadores<\/strong> que fueron encuestados en el a\u00f1o 2020 por <em>The Software House (State of Microservices).<\/em><\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-20033 aligncenter\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/11\/estadisticas-microservicios-1.png\" alt=\"Encuesta sobre microservicios (estad\u00edsticas)\" width=\"1040\" height=\"607\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/11\/estadisticas-microservicios-1.png 1194w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/11\/estadisticas-microservicios-1-300x175.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/11\/estadisticas-microservicios-1-1024x598.png 1024w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/11\/estadisticas-microservicios-1-768x448.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/11\/estadisticas-microservicios-1-360x210.png 360w\" sizes=\"auto, (max-width: 1040px) 100vw, 1040px\" \/><\/p>\n<h2><\/h2>\n<h2>\u00bfQu\u00e9 es una migraci\u00f3n?<\/h2>\n<p>Pero, <strong>\u00bfen qu\u00e9 consiste una migraci\u00f3n?<\/strong> <span class=\"TextRun SCXW2675239 BCX0\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW2675239 BCX0\">Se utiliza el verbo <strong><em>migrar<\/em><\/strong><\/span><\/span><strong><span class=\"TextRun SCXW2675239 BCX0\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW2675239 BCX0\">\u00a0<\/span><\/span><\/strong><span class=\"TextRun SCXW2675239 BCX0\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW2675239 BCX0\">a conciencia. \u00bfPor qu\u00e9? Porque <\/span><span class=\"NormalTextRun SCXW2675239 BCX0\">no se <em>tiran <\/em>ni el c\u00f3digo, ni los datos, <\/span><span class=\"NormalTextRun SCXW2675239 BCX0\">ni<\/span><span class=\"NormalTextRun SCXW2675239 BCX0\">\u00a0se empieza a\u00a0<\/span><span class=\"NormalTextRun SCXW2675239 BCX0\">implementar todo de<\/span><span class=\"NormalTextRun SCXW2675239 BCX0\">sde cero<\/span><span class=\"NormalTextRun SCXW2675239 BCX0\">, sino que, <strong>teniendo en cuenta lo viejo<\/strong>: aprendizaje sobre el dominio del problema, documentaci\u00f3n sobre qu\u00e9 partes han <\/span><span class=\"NormalTextRun SCXW2675239 BCX0\">sido complicadas de dise\u00f1ar\/implementar\/probar, etc.<\/span><span class=\"NormalTextRun SCXW2675239 BCX0\">,<\/span><span class=\"NormalTextRun SCXW2675239 BCX0\">\u00a0<strong>se construye una soluci\u00f3n que s<\/strong><\/span><strong><span class=\"NormalTextRun SCXW2675239 BCX0\">igue<\/span><span class=\"NormalTextRun SCXW2675239 BCX0\">\u00a0satisfaciendo las necesidades de los\u00a0<\/span><span class=\"NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW2675239 BCX0\">clientes<\/span><span class=\"NormalTextRun SCXW2675239 BCX0\">\u00a0<\/span><span class=\"NormalTextRun SCXW2675239 BCX0\">pero\u00a0<\/span><span class=\"NormalTextRun SCXW2675239 BCX0\">de una<\/span><span class=\"NormalTextRun SCXW2675239 BCX0\"> manera m\u00e1s eficiente, segura, sostenible<\/span><span class=\"NormalTextRun SCXW2675239 BCX0\">\u00a0<\/span><span class=\"NormalTextRun SCXW2675239 BCX0\">y auditable.<\/span><\/strong><\/span><\/p>\n<h2>8 pasos para hacer una migraci\u00f3n a <a href=\"https:\/\/www.hiberus.com\/modern-applications\/microservicios\">microservicios<\/a><\/h2>\n<p>Y, <strong>\u00bfc\u00f3mo se podr\u00eda hacer una migraci\u00f3n?<\/strong> Al no ser una ciencia exacta, es complicado redactar una <em>receta gen\u00e9rica<\/em>, pues <strong>depende<\/strong> en gran parte de los requisitos funcionales del cliente, del estado del monolito y de qu\u00e9 enfoque arquitectural se le quiera dar (luego hablaremos m\u00e1s sobre esto)<em>.\u00a0<\/em>Sin embargo, como <strong>en Hiberus tenemos un equipo especializado en microservicios con varios a\u00f1os de experiencia, hemos recopilado 8 pasos que se han dado en todas nuestras migraciones:<\/strong><\/p>\n<ol>\n<li data-leveltext=\"%1.\" data-font=\"Montserrat Medium\" data-listid=\"1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Es necesario <strong>identificar<\/strong> las partes del c\u00f3digo (<strong>dominios<\/strong>) que est\u00e1n altamente cohesionadas y bajo acopladas con el resto, puesto que son susceptibles de ser separadas a un microservicio aparte. Por ejemplo, si la aplicaci\u00f3n legada est\u00e1 construida en Java, sus paquetes nos pueden dar una idea de estas separaciones por dominio. Ejemplos de dominio pueden ser: usuarios, productos, tiendas&#8230;<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559737&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:240}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"%1.\" data-font=\"Montserrat Medium\" data-listid=\"1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\"><strong>Separar los dominios<\/strong> en distintos proyectos. Se pueden utilizar lenguajes de programaci\u00f3n distintos para cada proyecto, dependiendo de las necesidades de cada dominio. Nuestro consejo es que se trate de homogeneizar, a no ser que haya casos en los que de verdad merezca la pena implementar un dominio en un lenguaje de programaci\u00f3n espec\u00edfico. Ejemplo: queremos usar Python para el dominio de Business Intelligence porque hay muchas bibliotecas que nos pueden facilitar ese tipo de trabajo, pero no queremos usarlo en el resto de dominios, puesto que queremos un lenguaje fuertemente tipado.<\/span><\/li>\n<li data-leveltext=\"%1.\" data-font=\"Montserrat Medium\" data-listid=\"1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Obtener un <strong>grafo de las dependencias existentes<\/strong> en el sistema legado monol\u00edtico entre los dominios identificados. Se puede utilizar alguna herramienta que analice el proyecto.<\/span><\/li>\n<li data-leveltext=\"%1.\" data-font=\"Montserrat Medium\" data-listid=\"1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">A partir de las dependencias,<strong> dise\u00f1ar una interfaz (dise\u00f1o\u00a0<\/strong><\/span><strong><i>API\u00a0first<\/i><\/strong><span data-contrast=\"none\"><strong>)<\/strong> para cada uno de los dominios. Estas\u00a0APIs\u00a0(pueden ser REST,\u00a0GraphQL,\u00a0gRPC&#8230;) ser\u00e1n la nueva puerta de entrada a cada uno de los mismos. Esto significa\u00a0que\u00a0si el dominio de tiendas necesita algo del dominio de productos, deber\u00e1\u00a0utilizar alguna de las operaciones que ofrece el dominio de productos en su API.<\/span><\/li>\n<li data-leveltext=\"%1.\" data-font=\"Montserrat Medium\" data-listid=\"1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Una vez se hayan dise\u00f1ado las interfaces, habr\u00e1 que <strong>implementarlas<\/strong>. Es en este momento cuando nos acordamos de que nuestro monolito ten\u00eda una \u00fanica base de datos y en las tablas se mezcla la informaci\u00f3n de distintos dominios. \u00bfQu\u00e9 hago ahora con la tabla \u201ccompras\u201d cuyas filas representan a un \u201cusuario\u201d que ha adquirido un \u201cproducto\u201d en una \u201ctienda\u201d? Como se puede apreciar, <strong>es s\u00edntoma de que hay otros dominios que no hab\u00edamos identificado en el paso 1 porque no estaban expl\u00edcitamente diferenciados en el c\u00f3digo pero s\u00ed lo estaban en la base de datos<\/strong>. El dominio de compras puede ser perfectamente v\u00e1lido, y una soluci\u00f3n a este tipo de problemas es reflejarlo en la nueva arquitectura. Es momento de migrar los datos a los nuevos esquemas de datos de cada uno de los diferentes microservicios. Este paso puede llegar a ser muy <strong>costoso<\/strong>, a la par que <strong>complicado<\/strong>. Por eso es necesario disponer de un <strong>equipo de profesionales altamente cualificado que sea capaz de llevar a cabo esta migraci\u00f3n de datos.<\/strong><\/span><\/li>\n<li data-leveltext=\"%1.\" data-font=\"Montserrat Medium\" data-listid=\"1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Una vez todos y cada uno de los microservicios son <em>sencillos<\/em>, hacen lo que tienen que hacer (y no m\u00e1s) con la ayuda (o no) de una o varias BBDD, es hora de integrarlos. Esto es, hacer que interact\u00faen entre ellos, <strong>convirtiendo las dependencias de m\u00f3dulos que hab\u00eda en el monolito en llamadas a sus APIs.<\/strong><\/span><\/li>\n<li data-leveltext=\"%1.\" data-font=\"Montserrat Medium\" data-listid=\"1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Se deber\u00edan implementar<strong>\u00a0<\/strong><\/span><strong><i>tests\u00a0<\/i>unitarios<\/strong><i><span data-contrast=\"none\">\u00a0<\/span><\/i><span data-contrast=\"none\">para cada uno de los microservicios\u00a0(entendiendo el microservicio como unidad), adem\u00e1s de<strong>\u00a0<\/strong><\/span><strong><i>tests<\/i><\/strong><span data-contrast=\"none\"><strong>\u00a0de integraci\u00f3n<\/strong> que comprueben que saben trabajar en conjunto. Estos \u00faltimos deber\u00edan\u00a0tener en cuenta las particularidades que tiene todo sistema distribuido: p\u00e9rdida de mensajes, particiones de red, ca\u00edda de\u00a0los microservicios&#8230;<\/span><\/li>\n<li data-leveltext=\"%1.\" data-font=\"Montserrat Medium\" data-listid=\"1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\"><strong>\u00a1A desplegar!<\/strong> Cada microservicio puede estar alojado en uno o varios servidores distintos, proporcionando:<strong> alta disponibilidad, elasticidad, escalabilidad, mantenibilidad y auditabilidad.<\/strong><\/span><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p>Antes hemos comentado que hablar\u00edamos m\u00e1s sobre <strong>enfoques arquitecturales<\/strong>, y es que, dentro de las arquitecturas de microservicios, podemos identificar, como m\u00ednimo, un par de enfoques:<\/p>\n<ul>\n<li><strong>S\u00edncrono:<\/strong> se produce una\u00a0<em>conversaci\u00f3n\u00a0<\/em>entre los microservicios, puesto que siguen un esquema de petici\u00f3n-respuesta. Este es el caso que hemos ejemplificado en los pasos anteriores, puesto que todos los microservicios exponen APIs s\u00edncronas.<\/li>\n<li><strong>As\u00edncrono (event-driven):<\/strong> los microservicios no necesitan conocerse entre s\u00ed, sino que \u00fanicamente necesitan conocer un agente externo en el que van a publicar <strong>eventos de dominio<\/strong>. Estos eventos de dominio pueden ser, por ejemplo: \u00abse ha registrado un nuevo usuario que se llama Ra\u00fal, es de Huesca&#8230;\u00bb , \u00abla tienda XYZ se ha dado de baja\u00bb, etc. <strong>Apache Kafka<\/strong> y <strong>RabbitMQ <\/strong>son algunas de las tecnolog\u00edas con las que se pueden realizar este tipo de implementaciones. En Hiberus tenemos un equipo especializado en este tipo de tecnolog\u00edas.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Para m\u00e1s detalle, en este <em><strong>webinar<\/strong> <\/em>hablamos alto y tendido sobre estos dos enfoques arquitecturales:<\/p>\n<div class=\"embed-container\"><iframe loading=\"lazy\" title=\"Microservicios: disponibilidad y escalabilidad para Black Friday\" width=\"1140\" height=\"641\" src=\"https:\/\/www.youtube.com\/embed\/sVSdXV1oA20?start=1062&#038;feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen><\/iframe><\/div>\n<p>&nbsp;<\/p>\n<p><strong>Los microservicios han venido para quedarse<\/strong>, lo tenemos claro. Es por eso que, si piensas que el futuro de tu plataforma necesita las caracter\u00edsticas (alta disponibilidad, escalabilidad, resiliencia&#8230;) que hemos mencionado, <strong>no dudes en contactar con nosotros<\/strong>, pues te asesoraremos de la mejor manera posible.<\/p>\n<p>&nbsp;<\/p>\n<p>El objetivo de implantaci\u00f3n de microservicios consiste en construir una aplicaci\u00f3n como un conjunto de peque\u00f1os servicios, con operaciones bien definidas e independientes entre s\u00ed. Cada microservicio ejecuta su propio proceso y se encarga de implementar una funcionalidad completa del negocio.\u00a0Si quieres convertir tu arquitectura tradicional en una arquitectura de microservicios, contacta con nosotros. Estaremos encantados de asesorarte en lo necesario. Adem\u00e1s, puedes leer nuesto <strong><a href=\"https:\/\/www.hiberus.com\/crecemos-contigo\/caso-de-exito-microservicios-retail\/\">Caso de \u00c9xito de Microservicios para uno de los l\u00edderes retail espa\u00f1oles.\u00a0<\/a><\/strong><\/p>\n        <div class=\"row\">\n            <div class=\"block-cta-form\" style=\"background-color: #003664;\">\n                <div class=\"content-cta-form\">\n                    <div class=\"text-cta-form\">\n                        <p class=\"title-cta-form\">\u00bfQuieres m\u00e1s informaci\u00f3n sobre nuestra \u00e1rea de Microservicios?<\/p>\n                        <p>Contacta con nuestro equipo de Microservicios<\/p>\n                    <\/div>\n                    <div class=\"form-fields\">\n                        \n<div class=\"wpcf7 no-js\" id=\"wpcf7-f33973-o1\" lang=\"es-ES\" dir=\"ltr\" data-wpcf7-id=\"33973\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/20024#wpcf7-f33973-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Formulario de contacto\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"33973\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1.5\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"es_ES\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f33973-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/><input type=\"hidden\" name=\"_wpcf7_recaptcha_response\" value=\"\" \/>\n<\/fieldset>\n<div id=\"responsive-form\" class=\"clearfix\">\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"nombre\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Nombre *\" value=\"\" type=\"text\" name=\"nombre\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"apellido\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Apellido *\" value=\"\" type=\"text\" name=\"apellido\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"correo\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Correo corporativo *\" value=\"\" type=\"email\" name=\"correo\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"telf-contacto\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-tel wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-tel\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Tel\u00e9fono *\" value=\"\" type=\"tel\" name=\"telf-contacto\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"compania\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Compa\u00f1ia *\" value=\"\" type=\"text\" name=\"compania\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"mensaje\"><textarea cols=\"40\" rows=\"10\" maxlength=\"2000\" class=\"wpcf7-form-control wpcf7-textarea wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Mensaje *\" name=\"mensaje\"><\/textarea><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full color-acceptance\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"politica\"><span class=\"wpcf7-form-control wpcf7-acceptance\"><span class=\"wpcf7-list-item\"><label><input type=\"checkbox\" name=\"politica\" value=\"1\" aria-invalid=\"false\" \/><span class=\"wpcf7-list-item-label\">He le\u00eddo y acepto la <a href=\"https:\/\/www.hiberus.com\/politica\" target=\"_blank\"><u>Pol\u00edtica de privacidad<\/u><\/a><\/span><\/label><\/span><\/span><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full color-acceptance\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"marketing\"><span class=\"wpcf7-form-control wpcf7-acceptance optional\"><span class=\"wpcf7-list-item\"><label><input type=\"checkbox\" name=\"marketing\" value=\"1\" aria-invalid=\"false\" \/><span class=\"wpcf7-list-item-label\">Me gustar\u00eda recibir comunicaciones de marketing de Hiberus y sobre sus productos, servicios y eventos.<\/span><\/label><\/span><\/span><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><input class=\"wpcf7-form-control wpcf7-submit has-spinner\" type=\"submit\" value=\"Contacta con nosotros\" \/>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div id=\"campos_ocultos\" class=\"hidden\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new1\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new1\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new1\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new2\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new2\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new2\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new3\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new3\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new3\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new4\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new4\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new4\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new_p\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new_p\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new_p\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n<!--end responsive-form--><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n        \n","protected":false},"excerpt":{"rendered":"<p>Los monolitos pueden llegar a cumplir su funci\u00f3n en muchos clientes.\u00a0De hecho, hasta hace pocos a\u00f1os, eran la norma. Se empaquetaba todo&#8230;<\/p>\n","protected":false},"author":234,"featured_media":20387,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_ayudawp_aiss_exclude":false,"footnotes":""},"categories":[3,237,167],"tags":[56],"class_list":{"0":"post-20024","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-negocio-electronico","8":"category-microservicios","9":"category-retail-distribucion","10":"tag-microservicios"},"acf":[],"_links":{"self":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/20024","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/users\/234"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/comments?post=20024"}],"version-history":[{"count":29,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/20024\/revisions"}],"predecessor-version":[{"id":36268,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/20024\/revisions\/36268"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/media\/20387"}],"wp:attachment":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/media?parent=20024"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/categories?post=20024"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/tags?post=20024"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}