Hoja de ruta para la migración de monolitos a microservicios: modernización de aplicaciones empresariales

Si está aquí, lo más probable es que su sistema monolítico se esté convirtiendo más en una carga que en un activo. Ciclos de lanzamiento lentos, problemas de escalabilidad y una arquitectura rígida hacen que sea más difícil mantener el ritmo. Cuanto más crece su aplicación, más frustrante resulta. La nueva tecnología no se integra sin problemas, la agilidad se resiente y la fiabilidad empieza a decaer.

Los microservicios pueden cambiar las cosas al modular el sistema, acelerar los despliegues y permitirle escalar exactamente lo que necesita cuando lo necesita. Pero aquí está el truco: migrar no consiste sólo en dividir el código. Si no lo planifica bien, puede acabar teniendo más complejidad, pesadillas de integración y costes inesperados.

En este artículo, te guiaré a través de una hoja de ruta real para pasar del monolito a los microservicios. Nada de palabrería, solo pasos prácticos, lecciones aprendidas a base de nuestros arquitectos de solucionesy estrategias que realmente funcionan. Vamos a ello.

Pasos para migrar de una arquitectura monolítica a una de microservicios

Paso 1: Planificación de una migración de monolito a microservicio

He visto a muchas empresas pensar que los microservicios son la solución mágica, solo para acabar con más complejidad, flujos de trabajo rotos y costes por las nubes. Y si hay algo que he aprendido es que lanzarse directamente a la tecnología sin un plan sólido es una vía rápida hacia el caos.

Resulta tentador empezar a desmontar un monolito y poner en marcha los servicios, pero antes de tocar el código, trabajamos con los clientes para planificar el por qué, el cuándo y el cómo de la migración. De este modo, cada paso adelante aporta realmente valor.

Establecer los objetivos correctos: ¿por qué migrar?

Cada vez que un cliente nos plantea cambiar de un monolito a microservicios, le pregunto qué es lo que le lleva a tomar esa decisión. Las respuestas varían, pero la mayoría de las veces oigo que es porque sus competidores lo están haciendo. Y, sinceramente, no es una buena razón. Lanzarse a los microservicios sin un objetivo claro normalmente sólo conduce a más dolores de cabeza, no a un progreso real.

Así que antes de dar el paso, pregúntese:

  • ¿Qué espera conseguir?
  • ¿Ha considerado alternativas al uso de microservicios?
  • ¿Cómo sabrá si la transición está funcionando?

Si no está 100% seguro, no se preocupe. Le ayudaremos a definir las métricas clave y los resultados empresariales por adelantado, para que cada decisión tecnológica mueva la aguja.

Microservicios: ¿aptos para todos? No siempre

Los microservicios aportan modularidad, escalabilidad independiente e innovación más rápida. Pero no son la panacea. A algunas empresas les va bien un monolito, sobre todo si su aplicación es sencilla, estable y no cambia mucho.

Imaginemos un pequeño portal de empleados o un sistema de inventario que sólo utilizan unas pocas personas. Si funciona bien y no necesita actualizaciones constantes, dividirlo en microservicios podría añadir un montón de complejidad sin ningún beneficio real.

Por eso no promovemos los microservicios porque sí. En su lugar, analizamos lo que usted necesita específicamente y si los microservicios le aportarán beneficios reales. Si es así, perfecto: vamos a por ello. Si no, buscamos una solución mejor.

Evaluar el monolito: sepa a qué se enfrenta

Una vez que hemos decidido que los microservicios son el movimiento correcto, nos gusta hacer un chequeo completo de su sistema para ver cómo está todo conectado. Buscamos puntos lentos, posibles problemas de dependencia y dónde viven todos los datos críticos.

Saltarse este paso es arriesgado. Si no sabes lo que hay bajo el capó, podrías tumbar accidentalmente todo el sistema como si fueran fichas de dominó. Al trazar un mapa de lo que funciona, lo que se retrasa y lo que podría romperse, creamos un plan de migración inteligente que aborda las áreas más críticas en primer lugar, minimizando los riesgos, evitando el tiempo de inactividad y haciendo que la transición sea lo más suave posible.

Elegir la estrategia de migración adecuada

A estas alturas, ya lo habrás adivinado, no soy partidario de derribar todo un monolito de la noche a la mañana. Es demasiado arriesgado, demasiado perturbador y no suele merecer la pena el estrés. En su lugar, opto por un enfoque paso a paso que te proporcione ganancias rápidas mientras mantienes tus operaciones estables.

Una de mis estrategias favoritas es el patrón Strangler Fig, que permite que tu antiguo sistema y los nuevos microservicios coexistan hasta que estés preparado para el traspaso completo.

La bifurcación por abstracción es práctica cuando hay que hacer cambios dentro del propio monolito: añadimos una capa, movemos los componentes uno a uno y retiramos lo viejo sin reventar las cosas.

Si la fiabilidad es fundamental, la ejecución en paralelo mantiene ambos sistemas en funcionamiento, comparando los resultados antes de comprometerse por completo.

Y si no puedes meterte con el monolito, Change Data Capture nos permite rastrear los cambios en la base de datos para mantener los microservicios sincronizados.

No hay un método único, todo depende de tu configuración. Nuestro equipo también elige qué partes migrar primero, centrándose en las que tendrán un mayor impacto. Por ejemplo, un sistema de pago de comercio electrónico que gestiona miles de pedidos diarios o un motor de análisis de datos que se actualiza constantemente. De este modo, obtendrá beneficios reales rápidamente y mantendrá la cordura en sus operaciones.

Alineación de equipos y procesos

Incorporación de microservicios también significa cambiar la forma de trabajar de los equipos. En lugar de que un equipo enorme se encargue de un monolito, sugiero pasar a equipos más pequeños y multifuncionales en los que cada uno se encargue de un microservicio específico. De esta forma, las decisiones se toman más rápido y todo el mundo sabe exactamente de qué es responsable.

Además, nuestros expertos incorporan los principios de DevOps y la automatización desde el primer día para que el despliegue de nuevas funciones sea fluido y sin complicaciones.

"Pasar de un monolito a microservicios no es solo un retoque técnico: afecta a la velocidad de desarrollo, la estabilidad del sistema y la capacidad de ampliación. Sin un plan bien trazado, los costes pueden dispararse y las integraciones pueden convertirse en un verdadero quebradero de cabeza. En Innowise, hacemos que la transición sea suave y eficiente, para que pueda mantener las cosas ágiles y centrarse en el crecimiento de su negocio."

Dmitry Nazarevich

CTO

Paso 2: Identificación y definición de microservicios

Una vez que hemos trazado la estrategia de migración, la siguiente gran pregunta es cómo dividir el monolito en microservicios sin hacer un desastre. He visto empresas que intentan desacoplar todo a la vez o que eligen módulos al azar para dividirlos. De cualquier manera, esto lleva a una pérdida de tiempo, dependencias rotas y meses de frustrante retrabajo.

Mi regla de oro: hay que centrarse en el negocio. Esto significa que cada microservicio debe corresponder a una función empresarial real, no a un trozo de código aleatorio.

Encontrar los límites naturales del servicio

Uno de los errores comunes que vemos es dividir un monolito en capas técnicas. Me refiero a separar el frontend, el backend y la base de datos en diferentes servicios. Es una forma segura de acabar con microservicios muy acoplados y demasiado parlanchines que no escalan bien. En su lugar, utilizamos el diseño orientado al dominio (DDD) y los contextos delimitados para dividir las cosas de una manera que realmente tenga sentido.

Tomemos una plataforma de comercio electrónico. En lugar de dividirla en un servicio genérico de front-end y un servicio de back-end, la separamos en funciones empresariales reales como el procesamiento de pedidos, la gestión de inventarios, los pagos y la gestión de usuarios. Cada servicio posee su propia lógica y sus propios datos, lo que les permite evolucionar de forma independiente sin romper todo lo demás.

Priorizar los servicios para la migración

No soy partidario del enfoque "big bang". Intentar migrar todo a la vez es buscarse problemas. En su lugar, nos centramos en lo que hay que romper primero mirando:

  • Dependencias mínimas. Los módulos menos enredados son más fáciles de separar sin romperlo todo.
  • Impacto empresarial. Todo lo relacionado con los ingresos o la experiencia del cliente suele ser prioritario.
  • Cambios frecuentes. Los servicios que se actualizan constantemente son los que más se benefician de la flexibilidad de los microservicios.

Este enfoque nos ayuda a conseguir resultados rápidos y a mostrar el valor desde el principio, lo que facilita la aceptación por parte del equipo. Por ejemplo, en un sistema de RRHH empresarial, el procesamiento de nóminas podría ser un gran microservicio, ya que maneja cálculos complejos y específicos de una región. ¿Pero un directorio de empresas estático? Probablemente no merezca la pena la sobrecarga adicional y pueda permanecer en el monolito durante un tiempo.

Evitar la trampa del monolito distribuido

Lo último que queremos es convertir un monolito en microservicios y acabar con un montón de servicios que dependen demasiado unos de otros. Para evitar esto, nosotros:

  • Defina API claras (REST, gRPC o basadas en eventos) para que los servicios se comuniquen sin problemas y sin idas y venidas innecesarias.
  • Asegúrese de que cada servicio es propietario de sus datos: nada de bases de datos compartidas que crean cuellos de botella.
  • Mantenga las dependencias al mínimo para que los servicios puedan actualizarse sin romper todo lo demás.

Al mantener los servicios débilmente acoplados, podemos actualizarlos o modificarlos sin preocuparnos de romper todo lo demás.

Implicar a los equipos

Como he dicho antes, los microservicios realmente brillan cuando cada equipo es dueño de su servicio de principio a fin. Se obtiene una retroalimentación más rápida, más responsabilidad y menos idas y venidas entre los equipos. En Innowise, ayudamos a las empresas a configurar sus equipos para que los desarrolladores, los operadores, el control de calidad y todos los demás puedan trabajar juntos sin problemas.

Descomponga su monolito en microservicios y supere los picos de tráfico.

Paso 3: Gestión de datos en microservicios

Una vez dividido el monolito en microservicios, la primera pregunta suele ser qué hacemos con los datos. En una configuración monolítica, todo está vinculado a una gran base de datos, que funciona hasta que deja de hacerlo. En una configuración de microservicios, esa base de datos compartida se convierte rápidamente en un cuello de botella, ralentizándolo todo e imposibilitando el escalado independiente de los servicios.

Por eso abogo por un modelo de datos descentralizado, en el que cada microservicio sea propietario de sus propios datos. Si se hace bien, permite que cada servicio crezca, se adapte y escale sin tropezar constantemente con los demás.

Abandonar la base de datos monolítica

Una base de datos masiva e integral puede parecer lo más fácil, pero en una configuración de microservicios se convierte rápidamente en un cuello de botella. Cada servicio tiene necesidades diferentes, y meterlo todo en una única base de datos solo crea obstáculos. El escalado se complica, las dependencias se acumulan e incluso los pequeños cambios pueden causar problemas en todo el sistema.

Por eso nos dividimos en otros más pequeños, específicos de cada servicio, para que cada microservicio:

  • Controla sus propios datos. Se acabaron los conflictos y los cambios accidentales de otros equipos.
  • Escala por sí sola. Los servicios no tienen que pelearse por los recursos de la base de datos.
  • Puede cambiar libremente. Actualizar un servicio no supone el riesgo de romper todo el sistema.

De este modo, todo es más flexible, se evita que los equipos se pisen los unos a los otros y se evita el cuello de botella de la base de datos que ralentiza a todo el mundo.

Migración de datos

Traslado de datos de un monolito no es el momento de darle al interruptor. Una migración a lo loco es arriesgada, así que prefiero un enfoque gradual, paso a paso.

Por lo general, esto significa crear nuevas tablas o bases de datos para cada microservicio y mantenerlas sincronizadas con el sistema antiguo mediante la Captura de Datos de Cambios (CDC) o escrituras duales. De este modo, cada servicio se apropia gradualmente de sus datos, sin tiempos de inactividad ni sorpresas desagradables.

Mantener la coherencia de los datos

En un monolito, tienes una gran base de datos compartida y transacciones ACID que aseguran que todo se actualiza (o falla) a la vez. Pero con los microservicios, cada servicio gestiona sus propios datos, por lo que las actualizaciones no se producen de forma instantánea en todo el sistema.

En lugar de actualizaciones directas, los servicios se comunican mediante mensajería asíncrona. Si se realiza un pedido, el servicio de pedidos lanza un evento y el servicio de inventario escucha para ajustar las existencias. Esta configuración permite que todo funcione sin problemas, incluso si un servicio se cae temporalmente.

Por supuesto, eso significa gestionar la coherencia de forma inteligente. En Innowise, utilizamos operaciones idempotentes para evitar duplicados, mecanismos de reintento para manejar contratiempos y colas de letras muertas para detectar fallos. De este modo, sus datos siguen siendo precisos, incluso cuando las cosas no salen según lo planeado.

Paso 4: Implantación e integración

Muy bien, ahora que hemos establecido unos límites de servicio claros y un plan de migración de datos sólido, es hora de arremangarse y convertir la estrategia en acción. Veamos cómo hacerlo realidad.

Creación de microservicios escalables y resistentes

Nuestro equipo de desarrollo construye microservicios utilizando herramientas modernas como Spring Boot y Node.js, asegurándose de que están construidos para escalar y manejar los desafíos del mundo real. Para que todo funcione sin problemas, utilizamos patrones de diseño inteligentes como disyuntores para gestionar los picos de tráfico y la degradación gradual para evitar fallos en cascada. De este modo, aunque un servicio tenga un problema, el resto del sistema seguirá funcionando sin problemas.

Mantener vivo el legado (por ahora)

¿Apagar tu monolito de la noche a la mañana? Nada de eso. En su lugar, establecemos capas de integración mediante API RESTful y agentes de mensajes como RabbitMQ o Apache Kafka para mantener sincronizados los nuevos microservicios y los sistemas existentes. Estos actúan como puentes que permiten que todo se comunique sin problemas y sin romper los flujos de trabajo.

Y cuando tiene sentido, también incorporamos pasarelas API para potenciar y asegurar las interacciones, garantizando una transición fluida sin tiempo de inactividad.

Adoptar la contenedorización

Contenemos sus microservicios con Docker para que sean rápidos, flexibles y fáciles de gestionar. Con Kubernetes a cargo de la orquestación, el escalado en momentos de mucho trabajo o el despliegue de actualizaciones en diferentes entornos es muy sencillo. Esta configuración mantiene todo coherente, predecible y rentable, para que sus operaciones de TI nunca se sientan como un juego de azar.

Automatización con canalizaciones CI/CD

Nuestro equipo configura canalizaciones CI/CD con herramientas como Jenkins, GitLab CI o CircleCI para gestionar las pruebas, la construcción y los despliegues de forma automática. Se acabaron las actualizaciones manuales y los simulacros de última hora. Los errores se detectan pronto, las versiones salen más rápido y el sistema se mantiene sólido como una roca.

Construyamos un ecosistema de microservicios tolerante a fallos para su empresa.

Paso 5: Pruebas, despliegue y supervisión

Sin las salvaguardas adecuadas, incluso el sistema mejor diseñado puede sufrir cuellos de botella, fallos inesperados o simplemente bloquearse en el peor momento. Por eso nuestro equipo adopta un enfoque sin atajos, automatizando todo y detectando los problemas antes de que se conviertan en realidad.

Pruebas automatizadas

Las pruebas no son sólo el paso final, sino que forman parte de todo el proceso. Nuestro equipo de AQA utiliza conjuntos de pruebas automatizadas de varios niveles para detectar fallos en una fase temprana, de modo que nada se escape.

  • Pruebas unitarias. Cada microservicio tiene su propia comprobación con JUnit, Mocha y PyTest. Si algo falla, lo detectamos de inmediato.
  • Pruebas de integración. Las API, las dependencias y el flujo de datos deben sincronizarse. Nuestros expertos utilizan Postman, REST-assured y WireMock para asegurarse de que así sea.
  • Pruebas de contrato. Los microservicios tienen que seguir las reglas del juego. Con Pact, los mantenemos a raya y evitamos que se rompan las conexiones entre servicios. 
  • Pruebas de extremo a extremo. Ejecutamos escenarios reales, desde la interfaz de usuario hasta el backend, utilizando Selenium, Cypress y Playwright. De este modo, todo el sistema funciona como se espera.
  • Pruebas de carga y estrés. Nuestro equipo pone el sistema al límite con JMeter, Gatling y Locust para ver cómo aguanta el tráfico intenso.

Implantaciones sin riesgos

Nadie quiere que un mal lanzamiento haga caer su sistema, frustre a los usuarios o merme los ingresos. Por eso, nuestro equipo mantiene las implantaciones seguras, controladas y preparadas para el desmantelamiento con estrategias de eficacia probada.

  • Canarias libera. En lugar de dar el salto a todo el mundo a la vez, empezamos poco a poco, lanzando primero las actualizaciones a un pequeño porcentaje de usuarios. Si todo va bien, seguimos adelante. Si algo falla, nuestros expertos lo arreglan antes de que nadie se dé cuenta.

Supongamos que una empresa minorista quiere lanzar un programa de fidelización basado en puntos, pero su sistema de pedidos es demasiado complejo para modificarlo con seguridad. Una empresa minorista quiere lanzar un programa de fidelización basado en puntos, pero su sistema de pedidos es demasiado complejo para modificarlo con seguridad. Para ir sobre seguro, primero lo probamos con un grupo reducido. Si todo va bien, lo ampliamos.

  • Despliegues azul/verde. Nuestro equipo gestiona dos entornos activos al mismo tiempo:
    • Azul (versión actual): la versión estable que está activa;
    • Verde (versión actualizada): la nueva versión, probada y lista para funcionar.

Cuando estemos seguros de que la versión verde es sólida, cambiamos el tráfico al instante. Si algo se tuerce, volvemos al azul. Sin tiempo de inactividad, sin estrés.

Por ejemplo, una plataforma de viajes quiere añadir precios en tiempo real, pero alterar su antiguo sistema podría arruinar las reservas. En lugar de ir a por todas, nuestro equipo va de azul a verde, enviando primero a un pequeño grupo de usuarios a la nueva configuración. Si todo va bien, cambiamos a todos. Si las cosas se tuercen, retrocedemos al instante.

  • Banderas de características y pruebas A/B. A veces, desplegarlo a 100% de usuarios no es lo más adecuado. Los indicadores de funciones nos permiten activar o desactivar funciones de forma dinámica, de modo que podemos probarlas en producción sin afectar a todo el mundo. También utilizamos pruebas A/B para comparar varias versiones de funciones en condiciones reales antes de lanzar una versión completa.

Imagine una empresa de comercio electrónico que pone en marcha un motor de recomendación basado en IA. En lugar de activarlo para todo el mundo, utilizamos banderas de características para activarlo primero para los clientes habituales. Si el compromiso y las ventas aumentan, lo ampliamos; si no, lo desactivamos al instante.

Al mismo tiempo, nuestro equipo realiza pruebas A/B, comparando el sistema antiguo con el nuevo y realizando un seguimiento de las métricas clave, como el valor del carrito y las tasas de conversión. Estos datos nos ayudan a afinar la IA antes de lanzarla a gran escala.

Supervisión proactiva y registro en tiempo real

Los microservicios generan toneladas de datos, por lo que es imprescindible vigilar el estado del sistema en tiempo real. Nuestro equipo configura una monitorización multicapa con herramientas como Prometheus, Grafana y New Relic para realizar un seguimiento de la velocidad, el uso de memoria y los errores. De esta manera, podemos detectar problemas antes de que se conviertan en un dolor de cabeza. Con ELK Stack, Fluentd y otros, también recopilamos todos los registros (básicamente, el rastro digital de sus aplicaciones) en un solo lugar, para que no se nos escape nada. Y si algo va mal, las alertas automáticas hacen que nuestros ingenieros se pongan manos a la obra lo antes posible.

Copia de seguridad y recuperación de datos

Seamos realistas, ningún sistema es 100% a prueba de fallos. El hardware se estropea, el software falla y las ciberamenazas nunca dejan de evolucionar. Por eso es imprescindible proteger los datos. Por eso, nuestro equipo establece estrategias automatizadas de copia de seguridad para que sus datos críticos estén seguros y sean fáciles de recuperar.

  • Instantáneas automáticas. Utilizamos AWS RDS, Google Cloud SQL y Azure Backup para tomar instantáneas continuas de su base de datos. Si algo se rompe, puede volver instantáneamente a una versión estable con un tiempo de inactividad mínimo.
  • Almacenamiento georredundante. Una copia de seguridad no es suficiente. Nuestros expertos reparten las copias entre distintos centros de datos, de modo que aunque uno falle o sufra un ciberataque, tus datos seguirán estando seguros y accesibles.
  • Copias de seguridad incrementales y recuperación puntual. En lugar de hacer una copia de seguridad enorme que tarda siglos, utilizamos copias de seguridad inteligentes que sólo capturan los cambios recientes. Y con la recuperación puntual, podemos rebobinar la base de datos a cualquier momento antes de que se produzca un problema, lo que evita borrados accidentales o corrupción de datos.
  • Recuperación en caso de catástrofe. Un sólido plan de recuperación ante desastres evita que los pequeños problemas se conviertan en crisis. Si algo falla, los sistemas automáticos de conmutación por error te cambian a una copia de seguridad, para que tu empresa siga funcionando sin problemas.

Paso 6: Optimización iterativa y escalado

La migración de monolitos a microservicios no es solo una actualización puntual, sino que necesita un cuidado continuo para rendir al máximo. Estamos aquí para el largo plazo, garantizando que su configuración se mantiene ágil, escala sin problemas y maneja incluso las cargas más difíciles.

Ajuste del rendimiento

Nuestro equipo vigila cada microservicio, ajustando el código, optimizando las consultas a la base de datos y suavizando la forma en que se comunican los servicios para que todo funcione con rapidez.

Escalado inteligente

Analizando el tráfico en tiempo real y los patrones de carga, nuestros especialistas ajustan dinámicamente los recursos, asegurándose de que los servicios de alta demanda reciben el impulso que necesitan sin gastar más de la cuenta.

Mejora continua

Su sistema debe crecer con su empresa. Nuestro equipo realiza un seguimiento del rendimiento en tiempo real, escucha sus comentarios y realiza ajustes inteligentes para mantener su arquitectura segura, eficiente y a prueba de balas.

Documentación clara

A medida que perfeccionamos y ampliamos sus microservicios, mantenemos todo bien documentado. De este modo, las futuras actualizaciones y migraciones se realizarán sin problemas y tu equipo sabrá exactamente qué está pasando.

Prepare su aplicación empresarial para el futuro con una migración inteligente de microservicios.

Modernice sus aplicaciones empresariales con las soluciones de Innowise

La migración de monolitos a microservicios es un paso estratégico para mejorar la agilidad, la escalabilidad y la resistencia. Pero si no se cuenta con un plan sensato, se corre el riesgo de que se produzcan tiempos de inactividad, flujos de trabajo rotos y costes desorbitados. Una migración inteligente requiere definir los límites de los servicios, gestionar los datos correctamente y seguir las mejores prácticas de seguridad e implantación.

En Innowise, ayudamos a las empresas a realizar este cambio con confianza. Con más de 18 años en modernización del software y desarrollo, nos encargamos de todo, desde la evaluación de su configuración y el diseño de una estrategia de migración sólida hasta la creación de microservicios escalables y la renovación del rendimiento. Nuestros arquitectos de soluciones, ingenieros de DevOps y desarrolladores utilizan métodos probados para reducir el riesgo y maximizar el impacto, garantizando que los sistemas de su aplicación escalen y evolucionen con su negocio.

autor
Michael Labutin Jefe de Java, Soluciones ERP
Comparte:
autor
Michael Labutin Jefe de Java, Soluciones ERP

Índice

Contáctenos

Reservar una llamada o rellene el siguiente formulario y nos pondremos en contacto con usted cuando hayamos procesado su solicitud.

    Por favor, facilítenos detalles del proyecto, duración, tecnologías, especialistas informáticos necesarios y otra información relevante.
    Grabe un mensaje de voz sobre su proyecto
    para ayudarnos a comprenderlo mejor.
    Adjunte los documentos adicionales si es necesario
    Cargar archivo

    Puede adjuntar hasta 1 archivo de 2 MB en total. Archivos válidos: pdf, jpg, jpeg, png

    Le informamos de que, al hacer clic en el botón Enviar, el Grupo Innowise procesará sus datos personales de acuerdo con nuestra política de privacidad. Política de privacidad con el fin de proporcionarle información adecuada. Al facilitar un número de teléfono y enviar este formulario, acepta que nos pongamos en contacto con usted por SMS. Pueden aplicarse tarifas de mensajes y datos. Puede responder STOP para no recibir más mensajes. Responda a Ayuda para obtener más información.

    ¿Por qué Innowise?

    2000+

    profesionales de IT

    93%

    clientes recurrentes

    18+

    años de experiencia

    1300+

    proyectos de éxito

    ¡Спасибо!

    Cообщение отправлено.
    Мы обработаем ваш запрос и свяжемся с вами в кратчайшие сроки.

    Gracias.

    Su mensaje ha sido enviado.
    Procesaremos su solicitud y nos pondremos en contacto con usted lo antes posible.

    Gracias.

    Su mensaje ha sido enviado. 

    Procesaremos su solicitud y nos pondremos en contacto con usted lo antes posible.

    flecha