- 1. Explicación de los microservicios
- 2. De la arquitectura orientada a servicios a los microservicios
- 3. Ventajas de los microservicios
- 4. Cuándo utilizar microservicios
- 5. Creación e implementación de aplicaciones basadas en microservicios
- 6. Mejores prácticas de microservicios
- 7. Adopción de microservicios
- 8. Asegurar los microservicios
- 9. Preguntas frecuentes sobre microservicios
- Explicación de los microservicios
- De la arquitectura orientada a servicios a los microservicios
- Ventajas de los microservicios
- Cuándo utilizar microservicios
- Creación e implementación de aplicaciones basadas en microservicios
- Mejores prácticas de microservicios
- Adopción de microservicios
- Asegurar los microservicios
- Preguntas frecuentes sobre microservicios
¿Qué son los microservicios?
- Explicación de los microservicios
- De la arquitectura orientada a servicios a los microservicios
- Ventajas de los microservicios
- Cuándo utilizar microservicios
- Creación e implementación de aplicaciones basadas en microservicios
- Mejores prácticas de microservicios
- Adopción de microservicios
- Asegurar los microservicios
- Preguntas frecuentes sobre microservicios
Los microservicios describen un enfoque arquitectónico nativo de la nube para el desarrollo de software que estructura una aplicación a partir de servicios débilmente acoplados en comunicación entre sí mediante API o protocolos de mensajería. Cada servicio es autónomo y autocontenido y ejecuta un proceso único. A medida que los desarrolladores buscan construir aplicaciones escalables y resistentes, los microservicios se han hecho cada vez más populares.
Explicación de los microservicios
Los microservicios, también conocidos como arquitectura de microservicios, son un tipo de arquitectura de software utilizada en el desarrollo de aplicaciones cloud-native. Las aplicaciones creadas con este diseño constan de componentes desplegables pequeños, independientes y poco acoplados que, en conjunto, proporcionan las capacidades de la aplicación.
Cada servicio de la arquitectura de microservicios realiza una función empresarial distinta y se comunica con otros microservicios a través de interfaces bien definidas, en su mayoría mediante API RESTful.
Alejándose de la aplicación monolítica desarrollada como una sola unidad, los microservicios permiten a los desarrolladores construir con módulos que pueden desarrollar, probar e implementar de forma independiente, lo que acelera el tiempo de comercialización. Dado que la naturaleza de desacoplamiento de los microservicios permite a los desarrolladores introducir nuevo código y funcionalidad con más frecuencia de lo que podrían hacerlo de otro modo, las aplicaciones modernas son capaces de seguir el ritmo de la evolución de las necesidades de los clientes.
Más de tres cuartas partes de las empresas han pivotado hacia los microservicios, sustituyendo sus aplicaciones monolíticas alojadas en servidores web individuales por aplicaciones en contenedores, nativas de la nube y distribuidas en un clúster de servidores anfitriones.
De la arquitectura orientada a servicios a los microservicios
La arquitectura orientada a servicios (SOA) existe desde principios de la década de 2000 como una forma de construir grandes sistemas distribuidos descomponiéndolos en servicios más pequeños y libremente acoplados. La arquitectura de microservicios surgió como una evolución natural de SOA.
El concepto de microservicios fue introducido por Fred George en un taller de 2011 sobre arquitectura de software. George había estado intentando resolver problemas de escalabilidad con SOA mientras trabajaba en un sitio de comercio electrónico y se le ocurrió la idea de construir pequeños servicios autónomos.
La arquitectura de microservicios tomó los principios SOA de orientación a servicios y los perfeccionó para las modernas aplicaciones nativas de la nube. Los servicios de grano grueso de la SOA se convirtieron en "microservicios" granulares de grano fino, lo que los hizo muy eficientes y les proporcionó la flexibilidad necesaria para adaptar una pila tecnológica a un servicio determinado. La arquitectura de microservicios incluso redujo la carga de comunicación al sustituir las engorrosas API SOAP por opciones ligeras, como las API REST o las colas de mensajes.
Los microservicios pronto ganaron popularidad entre los arquitectos de software, y empresas como Netflix, Amazon, The Guardian y Spotify empezaron a adoptar esta arquitectura.

Figura 1: La arquitectura de microservicios es la base de los beneficios asociados a la aplicación moderna y nativa de la nube.
Ventajas de los microservicios
Los microservicios proporcionan un marco para crear aplicaciones nativas de la nube que pueden adaptarse a los requisitos cambiantes de la empresa. Las innumerables ventajas se derivan de la arquitectura de la aplicación.
Agilidad
La arquitectura de microservicios se presta al desarrollo y la implementación independientes. A diferencia de las aplicaciones monolíticas, en las que cambiar una línea de código implica actualizar toda la aplicación, los desarrolladores pueden modificar o sustituir servicios sin afectar al sistema distribuido. La posibilidad de implementar servicios individuales facilita la adición de nuevas funciones o la reversión de cambios en una aplicación.
Escalabilidad
Escalar una aplicación entera no es lo óptimo. Con los microservicios, sólo se escalan los componentes que lo requieren. Los desarrolladores pueden abordar un servicio individual según sea necesario, lo que en última instancia facilita un mejor rendimiento bajo cargas pesadas, el uso eficiente de los recursos y menores costes de infraestructura.
Elección
En la arquitectura de microservicios, la aplicación nativa de la nube no comparte una pila y una base de datos comunes. Los desarrolladores pueden elegir las herramientas que prefieran y las tecnologías para satisfacer los distintos requisitos de los servicios individuales.
Integración
Los desarrolladores pueden escribir microservicios en cualquier lenguaje - y conectarlos a microservicios programados en cualquier lenguaje. Es más, los microservicios pueden ejecutarse en cualquier plataforma, lo que los hace disponibles para integrarse con sistemas heredados.
Reutilización del código
La arquitectura de microservicios permite a los desarrolladores construir servicios modulares que pueden reutilizar en distintas aplicaciones. Al trabajar con componentes reutilizables, los programadores reducen el tiempo de desarrollo y mejoran la calidad del código, ya que invierten en una cultura de "escribir una vez, reutilizar a menudo".
Tolerancia a fallos
La arquitectura de microservicios promueve la resiliencia. Con servicios diseñados para funcionar de forma autónoma, el fallo de un solo servicio rara vez cierra la aplicación, como suele ocurrir con las aplicaciones monolíticas.
Colaboración
La arquitectura de microservicios permite a los equipos trabajar en diferentes servicios simultáneamente, lo que se traduce en un tiempo de comercialización más rápido. Mientras que los desarrolladores toman decisiones sin necesidad de coordinarse con otros equipos, los microservicios también fomentan la colaboración entre equipos, ya que cada uno es responsable de desarrollar y mantener una parte del todo. Esto puede conducir a una mejor alineación con los objetivos empresariales y a un uso más eficiente de los recursos.
Iteración continua
La aplicación construida con microservicios está hecha para evolucionar. Los desarrolladores pueden implementar rápidamente los microservicios básicos como producto mínimo viable y actualizar la aplicación a medida que los equipos completan los servicios adicionales. Las nuevas tecnologías pueden incorporarse al diseño a medida que vayan surgiendo. La aplicación basada en microservicios permanece en proceso, avanzando continuamente hacia la perfección teórica.
Cuándo utilizar microservicios
Aunque los microservicios basados en contenedores aportan muchas ventajas, no siempre son la arquitectura de aplicaciones más adecuada. Cuando tome decisiones de ingeniería de software, piense en sus objetivos para la aplicación, así como en los obstáculos y necesidades de desarrollo que prevé con vistas a la vida útil de la aplicación. Los microservicios funcionan mejor con aplicaciones complejas. Los escenarios para considerar el uso de microservicios incluyen:
Grandes aplicaciones
Si está construyendo una aplicación grande y compleja, los microservicios le permitirán dividir la aplicación en piezas manejables, lo que facilitará su desarrollo, implementación y mantenimiento.
Complejidades del calendario
La arquitectura de microservicios puede dar cabida a servicios independientes con diferentes ritmos de desarrollo. Incluso si un servicio sufre un retraso inesperado, el proyecto puede continuar sin implicaciones globales para el calendario de desarrollo de la aplicación.
Actualizaciones frecuentes
La arquitectura de microservicios es ideal para aplicaciones que requerirán actualizaciones frecuentes, ya que los servicios independientes permiten a los desarrolladores modificar el módulo en lugar de la aplicación.
Alta escalabilidad
Si su aplicación tiene que gestionar un gran volumen de tráfico o necesita escalar rápidamente, los microservicios son esenciales. Esto resulta especialmente útil si necesita escalar partes específicas de la aplicación, en lugar de escalar toda la aplicación.
Varios equipos
Si tiene varios equipos de desarrollo trabajando en la misma aplicación, los microservicios le ayudarán a mantener la agilidad y la eficiencia. Cada equipo puede trabajar en su microservicio, utilizando la pila tecnológica que le funcione, sin preocuparse del resto de la aplicación.
Arquitectura descentralizada
Si desea construir una aplicación con una arquitectura descentralizada, los microservicios son autónomos y pueden implementarse en diferentes ubicaciones, incluso entre distintos proveedores de servicios en la nube.
Nube híbrida
Si está planificando una arquitectura de nube híbrida, en la que algunos servicios seguirán ejecutándose in situ y otros en la nube, los microservicios le ayudarán a gestionar la complejidad de la aplicación.

Figura 2: Llamadas a la API que representan solicitudes de clientes enrutadas por la puerta de enlace de la API a los endpoints de los microservicios internos.
Creación e implementación de aplicaciones basadas en microservicios
La arquitectura de microservicios requiere una planificación cuidadosa. Ciertas tecnologías y prácticas comunes al entorno de producción permiten a los desarrolladores desarrollar, mantener y operar eficazmente aplicaciones basadas en microservicios.
DevOps
Las prácticas DevOps, incluida CI/CD, son esenciales para el enfoque arquitectónico de los microservicios. A diferencia de las aplicaciones monolíticas, los microservicios son sistemas distribuidos inherentemente complejos con numerosas partes móviles y pilas tecnológicas independientes. Esta complejidad requiere una colaboración frecuente entre los equipos de desarrollo y operaciones para garantizar que los componentes se integran a la perfección.
Las prácticas de DevOps proporcionan las herramientas de colaboración, comunicación y automatización necesarias para unir eficazmente a los equipos a lo largo de todo el ciclo de vida del desarrollo de software.
Entrega continua
La entrega continua va de la mano de los microservicios, permitiendo a los desarrolladores lanzar actualizaciones de software con frecuencia y fiabilidad haciendo uso de herramientas de automatización de la infraestructura, como servidores de integración continua, canalizaciones de implementación y marcos de pruebas automatizados para agilizar el proceso de CI/CD.
La entrega continua es especialmente importante para garantizar que cada servicio pueda actualizarse y liberarse independientemente de los demás microservicios.
REST
Los microservicios se comunican con microservicios -y la mayoría lo hacen dentro de aplicaciones web-, lo que hace que REST sea complementario. REST, o transferencia de estado representacional, es un patrón de diseño arquitectónico para construir API RESTful, que permiten a los servicios comunicarse a través de HTTP en formatos estándar, como XML, HTML y JSON. Pero las API de REST son fundamentales para las aplicaciones basadas en microservicios por varias razones.
Las API REST son ligeras y agnósticas con respecto a la plataforma, lo que significa que proporcionan una interfaz estandarizada que permite que los microservicios se comuniquen, independientemente de su tecnología subyacente. Dado que las solicitudes contienen la información necesaria para completarlas, las API de REST no requieren contexto almacenado en el servidor. Pueden gestionar grandes volúmenes de solicitudes sin comprometer el rendimiento, y los servicios de una arquitectura de microservicios basada en REST pueden evolucionar de forma independiente, comunicándose eficazmente de forma apátrida.
Contenedores
Aunque los microservicios dan a los equipos la opción de elegir el lenguaje y el marco de su servicio, trabajar con varios lenguajes en la misma canalización de CD plantea retos. Contenedores abstraen la variación entre servicios, ya que cada microservicio se convierte en una unidad autónoma empaquetada con su código base, base de datos y dependencias. La tubería de CD, ahora homogénea, puede realizar pruebas coherentes de cada contenedor.
Los servicios pueden interactuar sin interferir entre sí cuando están separados por contenedores y, una vez implementados, los contenedores proporcionan un entorno de ejecución ligero y portátil que permite que los servicios funcionen de forma coherente en todas las plataformas. Herramientas como Docker y Kubernetes se utilizan ampliamente para gestionar microservicios en contenedores.
Orquestador de Kubernetes
Una herramienta de orquestación como Kubernetes puede abstraer la infraestructura subyacente y automatizar la gestión, implementación y escalado de contenedores en varios servidores. Su extensibilidad también permite a los desarrolladores y operadores utilizar sus herramientas de software comercial y de código abierto preferidas, reduciendo el trabajo manual de la gestión de contenedores.
Sin servidor
La computación sin servidor es otra opción para implementar microservicios. Serverless architectures utilizan plataformas de funciones como servicio (FaaS) para crear unidades de implementación aún más pequeñas y escalar bajo demanda. Aunque las arquitecturas sin servidor pueden aumentar las dependencias de los proveedores, ofrecen una reducción de los costes operativos, la complejidad y los plazos de ingeniería.
Mejores prácticas de microservicios
El diseño de una arquitectura de microservicios requiere una cuidadosa planificación y consideración. Para construir con éxito aplicaciones basadas en microservicios, los desarrolladores deben observar las siguientes buenas prácticas:
- Diseño basado en el dominio : El diseño impulsado por el dominio (DDD) es un enfoque de diseño que se centra en el dominio empresarial y en el comportamiento de la aplicación. Ayuda a los desarrolladores a dividir la aplicación en componentes más pequeños y manejables, lo que facilita su construcción, implementación y mantenimiento.
- Límites del servicio : Al diseñar una arquitectura de microservicios, es esencial definir unos límites de servicio claros. Cada microservicio debe tener una responsabilidad bien definida.
- Pequeños servicios : Mantenga los servicios "micro", centrados en una única responsabilidad. Perder de vista este principio fundamental sacrificará la manejabilidad.
- Diseño de API : Los microservicios se comunican a través de API, así que utilice API coherentes, escalables y seguras que restrinjan el acceso a los datos a las aplicaciones, usuarios y servidores autorizados.
- Gestión descentralizada de datos : Las aplicaciones de microservicios requieren diversas opciones de almacenamiento y bases de datos. Cada microservicio debe tener su propio Almacén de datos. Este enfoque le ayuda a evitar incoherencias en los datos y le permite escalar cada microservicio de forma autónoma. Usted quiere que el equipo de desarrollo elija la base de datos de cada servicio para asegurarse de que se adapta mejor a su proyecto.
- Canales de CI/CD : La implementación de CI/CD le ayudará a encontrar y corregir errores rápidamente, lo que resulta especialmente valioso con múltiples bases de código que gestionar en una arquitectura de microservicios.
- Resiliencia intencionada : Proteja la aplicación de los cierres por fallo de dependencia. No utilice llamadas a procedimientos remotos (RPC) entre microservicios, si es posible, e incorpore funciones como disyuntores para detener los fallos en cascada.
- SOP: Desarrolle procedimientos operativos estándar que definan las convenciones de codificación, las estructuras de directorios y los protocolos de comunicación. Seguir un conjunto de normas dará lugar a microservicios coherentes y manejables.
Adopción de microservicios
eBay, Etsy, Uber... innumerables empresas han desmantelado sus aplicaciones monolíticas y las han refactorizado en arquitecturas basadas en microservicios para capitalizar las ventajas de la escalabilidad, la agilidad empresarial y las ganancias financieras.
Las organizaciones que planean la transición a los microservicios deben adoptar primero DevOps, que le preparará para gestionar las complejidades que encontrará. En un nivel básico, prevea las etapas descritas a continuación cuando trace su proyecto.
Identificar las capacidades empresariales
El primer paso para migrar a una arquitectura de microservicios es identificar las capacidades o características empresariales que su aplicación necesita soportar. Esto le ayudará a definir el alcance de su aplicación e informará sus decisiones sobre qué capacidades deben priorizarse para el desarrollo, así como la forma en que esos microservicios deben diseñarse e integrarse entre sí.
Descomponer la aplicación monolítica
La mayoría de las organizaciones utilizan el diseño dirigido por dominios o la descomposición basada en características para descomponer sus aplicaciones monolíticas.
Una vez identificadas las capacidades empresariales de la aplicación, defina los límites de servicio para cada microservicio, asegurándose de que cada microservicio tiene una responsabilidad distinta y bien definida. Querrá mapear las dependencias entre las capacidades empresariales, los Almacenes de datos y los sistemas externos. Basándose en los contextos delimitados y las dependencias, defina los microservicios que sustituirán a la aplicación monolítica.
Cada microservicio, centrado en una única capacidad empresarial, debe tener interfaces claras. Revise cómo se accede a las entidades de datos y, por último, considere cómo particionar los datos para reducir las dependencias entre servicios.
Definir interfaces de servicio
Implemente las interfaces de servicio para cada microservicio, asegurándose de que la interfaz refleja la responsabilidad exclusiva del microservicio. Puede utilizar diferentes técnicas, como las API RESTful o los protocolos de mensajería, para definir las interfaces de servicio.
Implementación y prueba de los servicios
En función de sus requisitos y conocimientos, elija los lenguajes de programación y los marcos de trabajo para la implementación de los servicios. Itere en el diseño según sea necesario, incluidas las pruebas de las nuevas interfaces, protocolos de comunicación y almacenes de datos.
Contenedorizar los servicios
Una vez que haya implementado y probado los servicios, querrá contenerizarlos utilizando tecnologías de contenedores, como Docker o Kubernetes. La contenedorización le permitirá implementar y gestionar los servicios de forma independiente.
Automatizar la implementación y la orquestación
Automatice la orquestación de los servicios utilizando herramientas como Kubernetes o Docker Swarm. Además de agilizar eficazmente la implementación de servicios, la automatización mediante Kubernetes o Docker mejorará la fiabilidad y disponibilidad de la aplicación. Cualquiera de las dos plataformas puede detectar cuando una instancia de servicio falla o deja de responder y tomar medidas para solucionar el problema. Kubernetes, por ejemplo, puede reiniciar las instancias averiadas o reprogramarlas en otros nodos, mientras que Docker puede migrar automáticamente el contenedor averiado a otro nodo.
Supervisar y gestionar los servicios
Descomponer una aplicación monolítica no es un proceso único. Requiere mantenimiento y actualizaciones a medida que evolucionan las necesidades de la aplicación y de sus usuarios. Supervise los nuevos microservicios y realice un seguimiento de las métricas clave, como el tiempo de respuesta y la utilización de recursos.
Asegurar los microservicios
Las aplicaciones de microservicios altamente distribuidas y nativas de la nube introducen complejidades de seguridad. En lugar de un único punto de entrada, vienen con docenas, si no cientos, de puntos potenciales de vulnerabilidad - y cada uno debe ser asegurado. Las API y las dependencias de código no representan más que dos fuentes de riesgo en la creciente superficie de ataque de la aplicación moderna.
Seguridad de aplicaciones web y API
Las aplicaciones modernas consumen entradas de diversas fuentes: solicitudes web estándar, llamadas a la API de dispositivos móviles, eventos en la nube, comunicación telemétrica de dispositivos de IoT, almacenamiento en la nube, etc. Es más, una sola solicitud web de un cliente (es decir, tráfico norte-sur) puede generar cientos de llamadas API entre microservicios internos (es decir, tráfico este-oeste).
La complejidad de las aplicaciones web centradas en API requiere estrategias escalables, flexibles y multicapa que funcionen para cualquier tipo de carga de trabajo en cualquier tipo de entorno o arquitectura de nube. Asegurar la interfaz web frontend de la aplicación nativa de la nube no es suficiente. Las aplicaciones nativas de la nube requieren una protección de la capa de aplicación para las API nativas de la nube. La seguridad de aplicaciones web y API (WAAS) es esencial.
Dependencias del código y análisis de la composición del software
Los componentes de software de código abierto constituyen aproximadamente el 70% de las aplicaciones nativas de la nube. Aunque esto agiliza el desarrollo, muchos paquetes de código abierto y sus dependencias contienen vulnerabilidades. Además, cada versión de un paquete OSS dependiente puede cambiar una funcionalidad crítica. Sin una visibilidad total, las vulnerabilidades pasan desapercibidas.
Las herramientas independientes de análisis de la composición del software (SCA) sacan a la luz los riesgos del código abierto demasiado tarde en el ciclo de vida del desarrollo, lo que provoca una acumulación de vulnerabilidades que no siempre pueden resolverse. Las herramientas separadas para SCA y IaC security dan lugar a alertas ruidosas sin contexto ni conocimiento de los riesgos interconectados. Dado que las lagunas son inevitables sin cobertura del tiempo de ejecución y de la carga de trabajo, lo mejor es asegurar las aplicaciones nativas de la nube con seguridad nativa de la nube integrada.
De código a nube CNAPP
Al identificar y priorizar los riesgos críticos de toda la aplicación nativa de la nube, una plataforma de protección de aplicaciones nativas de la nube (CNAPP) integra múltiples tipos de seguridad para ofrecer una protección integral del código a la nube: gestión de la postura de seguridad en la nube (CSPM), protección de la carga de trabajo en la nube, gestión de la habilitación de la infraestructura en la nube (CIEM), gestión de la postura de seguridad de Kubernetes (KSPM), seguridad de la infraestructura como código, WAAS, SCA y mucho más.
Los responsables de la seguridad en la nube que exploran la mejor manera de asegurar las rápidas necesidades de desarrollo de las aplicaciones que emplean tecnologías nativas de la nube, como contenedores, microservicios y funciones sin servidor, deberían considerar la adopción de una CNAPP.