Los microservicios son una de las últimas innovaciones en el desarrollo de aplicaciones. Dentro de este mercado tan competitivo, la innovación y la mejora de la arquitectura de las aplicaciones se ha convertido en una obligación para cualquier empresa que tenga una aplicación u ofrezca un servicio.
Las arquitecturas monolíticas se están quedando rápidamente obsoletas en un contexto en el que el público demanda mejoras continuas y nuevos servicios. Incluso en los propios marketplaces de aplicaciones, tener actualizaciones periódicas cuenta con un factor de posicionamiento. Es decir, una aplicación en la que se innove de forma continua, tendrá una mayor visibilidad respecto a otra que no lo haga.
La innovación se ha convertido en algo constante, que debe ser parte de la cultura de la empresa. Actualmente, la innovación no es algo que tenga un final, sino que se trata de un desarrollo continuo, en el que hay que trabajar de manera constante.
En este artículo, vamos a profundizar en cómo los microservicios en una opción muy recomendable de enfrentar esta necesidad de innovación ágil en el desarrollo de aplicaciones, con opciones, ventajas, desventajas y ejemplos.
¿Qué son los microservicios?
Antes de profundizar más, es importante entender a qué nos referimos cuando hablamos de microservicios. Un microservicio es un enfoque arquitectural basado en pequeños servicios independientes, en el cuál cada uno de ellos tiene una funcionalidad de negocio distinta y definida a la perfección.
Es decir, cada microservicio es independiente de los otros microservicios que forman la aplicación, permitiendo un desarrollo, implementación y escalabilidad de forma totalmente autónoma, sin depender de los demás.
Esto permite que cada microservicio pueda desarrollarse en paralelo, aún en los casos en que tengan algún tipo de interdependencia entre ellos. Como consecuencia, se minimizan los tiempos de desarrollo.
Otra característica clave es que cada uno de estos microservicios pueden desarrollarse en tecnologías independientes. Así, se puede elegir la mejor opción de tecnología para cada funcionalidad, pudiendo actualizarse o migrarse en el futuro sin afectar al resto de la aplicación.
Esto permite a las organizaciones estar en la vanguardia tecnológica, probando y adoptando nuevas tecnologías emergentes de manera más controlada, sin tener que desarrollar la aplicación al completo y asegurando su funcionalidad en todo momento.
Características de los microservicios
Una vez entendido qué son los microservicios, vamos a pasar a explicar sus características en la actualidad. Esas cualidades que hacen que podamos ser más ágiles y mantenernos en la vanguardia tecnológica.
La característica principal es la posibilidad de paralelizar diferentes partes del desarrollo de la aplicación. Al trabajar en las funcionalidades de manera independiente, los equipos de trabajo pueden trabajar sin depender de otros equipos.
De hecho, este era el problema principal que se encontraba de manera habitual en el desarrollo tradicional de software. Al haber tanta interdependencia, era habitual los bloqueos en el trabajo, impidiendo optimizar los procesos.
Como podemos ver en la imagen, en la arquitectura monolítica tradicional, todo estaba encuadrado en una única aplicación, parte web, lógica de negocio, capa de acceso a datos. Sin embargo, en la arquitectura mediante microservicios la capa de negocio se puede separar en diferentes microservicios en función de las diversas funcionalidades que se requieran para hacerlos lo más independientes posibles
Tampoco podemos obviar la integración y entrega continua como sus características principales. Esto es lo que permite implementar y actualizar sus diferentes partes de manera independiente. En la práctica, lo que supone es reducir los tiempos a nivel comercial. La aplicación puede ir actualizándose poco a poco, sin tener que esperar que esté todo el desarrollo, con una mejora del rendimiento y de las características de la misma de forma continua.
Por último, la posibilidad de usar cualquier tecnología, base de datos o lenguaje de programación es otra característica crucial. Esto es lo que permite a las empresas innovar y estar a la vanguardia, adoptando la tecnología más adecuada para cada funcionalidad de la aplicación o servicio ofrecido.
Al final, lo que suponen los microservicios es mejorar la arquitectura de software de forma continua, la eficiencia operativa de la organización y la agilidad empresarial.
OpenShift, la herramienta clave en microservicios
Aunque no es la única herramienta que utilizamos en los proyectos de los diferentes clientes de Serbatic, OpenShift es una de nuestras principales aliadas a la hora de innovar en microservicios.
Se trata de una plataforma de aplicaciones centrada en el desarrollo, ubicada en la nube y basada en Kubernetes. Perteneciente a Red Hat, se trata de un software crucial para construir aplicaciones si el objetivo es la búsqueda de la escalabilidad y la descentralización.
Mediante el uso de la misma, los programadores pueden gestionar de manera sencilla cada aspecto y microservicio de cada aplicación.
En resumen, podemos ver el programa como un ayudante que facilita el trabajo, haciéndose cargo de las partes más complicadas a la hora de ejecutar aplicaciones.
A continuación, vamos a adentrarnos un poco más en los ventajas y desventajas de OpenShift a la hora de adoptar microservicios.
Beneficios de adoptar microservicios con OpenShift
Respecto a las principales ventajas de OpenShift, podemos destacar las siguientes:
- Adopción de tecnologías actuales: OpenShift se basa en tecnologías de contenedores vanguardistas como Kubernetes, Docker y otros proyectos de código abierto relacionados, lo que facilita su eficiencia.
- Automatización y eficiencia operativa: Openshift proporciona herramientas avanzadas de automatización para la integración continua (CI) y la entrega continua (CD), así como para la gestión de recursos y la escalabilidad automática.
- Flexibilidad y portabilidad: Es una plataforma muy flexible que puede ejecutarse en muchos entornos, incluyendo nubes públicas, privadas e híbridas, así como en servidores locales. Esto permite a las organizaciones adaptarse a sus necesidades específicas, independientemente de cuáles sean.
- Seguridad y cumplimiento normativo: OpenShift ofrece características avanzadas de seguridad, como control de acceso basado en roles (RBAC), aislamiento de red y cifrado de datos, que ayudan a proteger las aplicaciones y los datos sensibles. Además, cumple con la mayoría de los estándares de cumplimiento normativo, lo que facilita su adopción en entornos empresariales que requieren altos niveles de seguridad y cumplimiento.
- Capacidad de ajuste: Las aplicaciones que se ejecutan en Red Hat OpenShift puede ajustarse a miles de instancias en cientos de nodos en cuestión de segundos.
- Portabilidad de los contenedores: Las imágenes de contenedores garantizan la portabilidad entres las estaciones de trabajo del desarrollador y los entornos de producción de Red Hat OpenShift.
Desventajas de adoptar microservicios con OpenShift
Sin embargo, no todo son ventajas. Adoptar OpenShift también tiene algunos inconvenientes que es importante tener en cuenta.
- Coste: El coste de implementación y mantenimiento de OpenShift puede ser significativamente alto, especialmente para PyMEs o startups. Además de los costes de licencia de la plataforma, también hace falta infraestructura y personal especializado requerido para su operación y mantenimiento.
- Curva de aprendizaje: OpenShift es una plataforma muy útil, pero no es sencilla de implementar.
- Complejidad: La gestión de múltiples servicios desplegados de manera independiente, asegurando la comunicación entre ellos, implementando estrategias de CI/CD (Integración Continua/Despliegue Continuo) adecuadas, y monitoreando y escalando los servicios según sea necesario, pueden representar desafíos significativos por su complejidad. Es una herramienta muy útil, pero requiere formación y atención al detalle.
- Requisitos de infraestructura: Para trabajar con OpenShift es necesario contar con hardware de alto rendimiento, una red bien configurada y almacenamiento de alta velocidad. Se trata de una exigencia técnica de alto nivel, que no todas las organizaciones pueden asumir.
- Dependencia del proveedor: Por otra parte, al tratarse de un software privado, aunque utilice herramientas de código abierto, esto genera una dependencia del proveedor. Cambios en el soporte, desarrollo del producto o en su política de precios puede tener un impacto inesperado en cualquier organización que utilice esta herramienta.
- Personalización limitada: Aunque OpenShift ofrece una amplia gama de características y configuraciones, no ofrece la oportunidad de personalizar las mismas según necesidades concretas. En casos muy específicos de necesidades especiales, puede que no tenga la característica requerida.
Ejemplos de uso de microservicios
Ahora que conocemos qué son los microservicios y cómo podemos trabajarlos con OpenShift, con sus ventajas e inconvenientes, vamos a profundizar con dos ejemplos de uso.
El primero de ellos es Netflix, que ha sido el gran promotor de los microservicios. En segundo lugar, vamos a mencionar uno de nuestros últimos trabajos con una gran aseguradora española.
Netflix, el ejemplo paradigmático
Netflix se ha convertido en un ejemplo paradigmático en la industria tecnológica gracias a su papel fundamental en la promoción y práctica de la arquitectura de microservicios. Su enfoque ha servido de modelo a seguir para otras organizaciones, contribuyendo significativamente a establecer mejores prácticas en el desarrollo de software a gran escala.
Desde sus inicios, Netflix optó por una estrategia pionera, alejándose de la arquitectura monolítica tradicional. En su lugar, decidió descomponer su sistema en servicios independientes y altamente especializados. Esta decisión ha sido crucial para su capacidad de escalar y mantener su plataforma de transmisión de video de manera eficiente.
La arquitectura de microservicios adoptada por Netflix ha demostrado ofrecer una escalabilidad y flexibilidad inigualables. Permite a la compañía ajustar y escalar sus servicios de forma independiente en respuesta a la demanda variable.
Esto implica que Netflix puede asignar recursos específicamente a los servicios que los necesitan, optimizando la eficiencia y reduciendo los costes operativos. Además, la naturaleza modular de esta arquitectura facilita la implementación de cambios y actualizaciones de manera rápida y segura, lo que agiliza el proceso de desarrollo.
Otro aspecto destacable de la arquitectura de Netflix es su resiliencia y tolerancia a fallos. Al dividir su sistema en microservicios, la compañía puede aislar y manejar problemas específicos con mínima interrupción del servicio. Si un microservicio falla, el impacto se limita a ese servicio en particular, permitiendo que el resto del sistema continúe operando normalmente.
Por último, la estrategia de Netflix mejora significativamente la experiencia del usuario y facilita la entrega continua. Al tener los servicios separados, es posible realizar pruebas en producción de nuevas funcionalidades sin afectar el rendimiento general. Esto no solo mejora la experiencia del usuario, sino que también permite a Netflix innovar de manera constante, adaptándose rápidamente a las necesidades cambiantes de sus usuarios.
Zuul de Netflix, el componente esencial
En la arquitectura de microservicios de Netflix, un componente crítico es Zuul, que actúa como un enrutador y proxy de puerta de enlace. Esta herramienta desempeña un papel esencial al proporcionar enrutamiento dinámico, filtrado, y monitoreo de tráfico para aplicaciones distribuidas.
Gracias a Zuul, Netflix puede dirigir de manera eficiente las solicitudes de los clientes hacia los servicios más apropiados dentro de su infraestructura de microservicios. Este enfoque asegura que cada solicitud sea procesada de la manera más eficaz posible, mejorando la experiencia del usuario final y la eficiencia operativa.
Aquí hay algunas características y aspectos importantes sobre Zuul:
- Enrutamiento dinámico: Zuul permite enrutar solicitudes de clientes a diferentes servicios en función de ciertos criterios, como la URL, el tipo de solicitud o los encabezados HTTP. Esto permite una distribución flexible y dinámica del tráfico entre los microservicios, lo que facilita la construcción de aplicaciones escalables y flexibles.
- Filtrado: Zuul permite aplicar filtros a las solicitudes y respuestas HTTP que pasan a través de él. Estos filtros pueden ser utilizados para tareas como autenticación, autorización, transformación de solicitudes y respuestas, registro y monitorización del tráfico, entre otros. Esto proporciona una capa adicional de seguridad y funcionalidad a las aplicaciones distribuidas.
- Proxy inverso: Zuul actúa como un proxy inverso, ocultando la topología de la red interna de Netflix y proporcionando una interfaz unificada para los clientes externos. Esto facilita la administración de la infraestructura subyacente y simplifica la exposición de servicios a través de la red.
- Integración con Eureka: Zuul está integrado con Eureka, que es el servicio de descubrimiento de servicios de Netflix basado en la arquitectura de microservicios. Esto permite a Zuul descubrir dinámicamente los servicios -disponibles y enrutar las solicitudes a las instancias adecuadas en función de la carga y la disponibilidad.
- Escalabilidad y tolerancia a fallos: Zuul está diseñado para ser altamente escalable y tolerante a fallos. Puede manejar grandes volúmenes de tráfico y distribuirlo de manera eficiente entre los servicios subyacentes. Además, Zuul puede detectar y mitigar automáticamente los fallos de los servicios, proporcionando una experiencia de usuario más robusta y confiable.
Optimizando el servicio interno de una aseguradora líder
Más allá de Netflix, que dio comienzo a la innovación en microservicios, la aplicación de los mismos lo podemos ver en todo tipo de grandes empresas. Desde importantes entidades bancarias a marketplaces internacionales, pasando por las principales aseguradoras del mercado.
En este caso, vamos a desarrollar el trabajo que realizamos desde Serbatic a una de estas aseguradoras, para poder entender en la práctica qué supone trabajar con microservicios.
Dentro de la intranet de la aseguradora, una de las partes principales es la gestión de asistencia en carretera, cuando un vehículo ha sufrido un accidente o, simplemente, no puede continuar circulando por cualquier motivo.
Hasta ese momento, la gestión por parte de la aseguradora era manual. Es decir, una operadora tenía que utilizar una lista de proveedores y de ahí seleccionar la grúa, el taxi, una reparación in situ, etc., según lo que fuera más conveniente en cada caso.
Gracias al uso de microservicios, este proceso se hace ahora automáticamente, con solo pulsar un botón cada vez, mejorando la eficiencia de la atención en carretera.
Además, se han automatizado otros servicios como el uso de chófer para pasar la ITV, gestión de multas o la gestión del coche de sustitución, entre otros.
El servicio dado por Serbatic a través de microservicios no se queda ahí, sino que también entra en un portal de proveedores para facturación o la posibilidad de gestionar el alta de un expediente de asistencia a través de la aplicación móvil o la web.
En definitiva, el uso de microservicios ha permitido a esta aseguradora optimizar el trabajo interno, siendo mucho más eficientes, lo que también ha conllevado una mayor satisfacción del cliente final, que ha visto cómo sus problemas se resuelven con mayor rapidez.
Microservicios con OpenShift, una oportunidad de crecimiento
Adoptar una arquitectura de microservicios utilizando OpenShift, junto con prácticas de integración continua, es fundamental para las empresas que buscan mantener su competitividad e impulsar la innovación en el mercado. Esta estrategia permite una transformación continua, habilitando a las organizaciones para adaptarse rápidamente a las cambiantes demandas del mercado y a las expectativas de los consumidores.
La arquitectura de microservicios, por su naturaleza, promueve la modularidad, lo que significa que las aplicaciones pueden desarrollarse, probarse, desplegarse y actualizarse en segmentos más pequeños y manejables. Esto no solo acelera el tiempo de salida al mercado de nuevas características, sino que también mejora la capacidad de respuesta frente a los problemas.
OpenShift facilita esta modularidad al proporcionar un entorno de contenedores que automatiza la entrega y el despliegue de aplicaciones, lo que permite una integración y entrega continuas eficientes. Los equipos de desarrollo pueden colaborar más efectivamente, con ciclos de feedback más cortos y sin las limitaciones de los entornos de desarrollo tradicionales.
Esta colaboración es crucial para impulsar la innovación, ya que permite que los equipos se concentren en mejorar y expandir funcionalidades sin estar restringidos por infraestructuras rígidas.
En resumen, la combinación de microservicios con OpenShift y la integración continua es una estrategia muy útil para las empresas permitiéndoles ser líderes en innovación y eficiencia operativa.
Julio Diéguez Rodríguez
Tech Consultant