Microservicios Y Contenedores

Artigo em espanhol

El término microservicio surgió en una conferencia de arquitectos de software en mayo de 2011 para representar un estilo de arquitectura de sistemas, y no exactamente el tamaño de los servicios que la componen, como el nombre podría dar a entender. La propuesta de la arquitectura de sistemas orientada a los microsistemas es desarrollar sistemas que sean más flexibles, escalables y con un mantenimiento más sencillo que las arquitecturas de sistemas monolíticos normalmente utilizados. La filosofía de esta arquitectura es “hacer una cosa y hacerla bien”, donde los servicios se centran en realizar una sola función.

Naturalmente, el objetivo de las empresas es acompañar la evolución del mercado y evolucionar siempre para conseguir cada vez más excelencia, reducción de costos y agilidad en la creación de nuevos productos y servicios que las diferencien en el mercado. Para ello, la arquitectura de las aplicaciones también necesita evolucionar. ¿Y qué es importante en estas aplicaciones?

  • Deben ofrecer a los clientes una experiencia de usuario rica, interactiva y dinámica en diversas plataformas, que incluye los dispositivos móviles.
  • Deben ser altamente escalables, altamente disponibles y debe ser posible ejecutarlos en ambientes de nube.
  • Deben tener actualizaciones suaves, es decir, y lo ideal es que las actualizaciones no ocasionen paradas o inestabilidades que perjudiquen a los usuarios.

La arquitectura orientada a microservicios viabiliza la construcción de sistemas que poseen todos estos atributos, a diferencia de las aplicaciones monolíticas. Los microservicios permiten:

  • Disponer de nuevos procesos o servicios sin impacto en los procesos y servicios existentes.
  • Cambios en procesos y servicios sin la necesidad de parar todo el sistema.
  • Optimización del uso de la infraestructura de nube.
  • Reducción de la complejidad de mantenimiento.

De esta manera, la implementación de nuevos servicios por el equipo de desarrollo a lo largo del ciclo de vida de la aplicación se vuelve mucho más simple y rápida.

Cómo funciona la Arquitectura de Microservicios

La arquitectura de microservicios se utiliza para desarrollar una aplicación como un conjunto de pequeños servicios, cada uno funcionando en su propio proceso. Cada servicio se desarrolla en torno a un conjunto de reglas de negocio específico, y se implementa de forma independiente. Con ello, se logra romper algunas barreras existentes en el modelo de arquitectura monolítica:

  • Mantenimiento y Evolución de los Servicios más Estables. Los desarrolladores tratarán de códigos que ejecuta una sola función, y cada servicio individual no crece indefinidamente con el crecimiento del sistema.
  • Servicios con bajo nivel de Acoplamiento e Interdependencia. De esta forma, el mantenimiento en un servicio no interfiere directamente en otras funcionalidades del sistema.
  • Escalabilidad del Sistema.Se obtiene con el deploy y la replicación de micro servicios a través de la infraestructura de servidores, máquinas virtuales y contenedores de forma independiente. Esto hace que el crecimiento y la posibilidad de adaptación del sistema mucho más flexible.
  • Reducción de Costos. Como cada aplicación sólo utiliza los servicios que necesita, los costos se asocian directamente a la funcionalidad ya la carga de uso del sistema, no siendo necesario cargar costos asociados a funcionalidades no utilizadas.
  • Flexibilidad de la Tecnología. No es necesario atar a los desarrolladores a una tecnología específica, ya que hay un bajo acoplamiento entre los servicios. De esta forma, se puede utilizar la mejor tecnología para atender a cada caso, además de la posibilidad de evolucionar el sistema continuamente, disminuyendo el riesgo de la obsolescencia tecnológica.
  • Facilidad para Introducir Cambios en la Producción. Los cambios en el sistema se realizan a través de los cambios y las evoluciones realizadas en los servicios. Por lo tanto, no hay un sistema que debe reiniciarse para continuar funcionando. El equipo de desarrollo que necesitará acompañar el cambio será el equipo responsable de los servicios que están siendo alterados.

“El desarrollo de plataformas de gestión (tales como OpenShift, Docker y Kubernetes) simplificó significativamente la configuración de los contenedores.” – Lenildo Morais, Maestro en Ciencia de la Computación por el Centro de Informática de la Universidad Federal de Pernambuco

La lógica detrás de los Contenedores

Para entender lo que son contenedores, nada mejor que usar la propia comparación que dio origen a su nombre. Pensemos entonces en la facilidad que el advenimiento del contenedor trajo al transporte marítimo. Imagínese que los funcionarios de un puerto necesitan trasladar dentro de un barco un cargamento con 60 mil televisores. ¿Cómo hacer ese transporte hasta la embarcación? Uno a uno?

El contenedor trajo la posibilidad de agrupar productos en masa, de forma organizada y mucho más práctica. Una vez cargado con los materiales, el simple posicionamiento de ese recipiente dentro del buque con una grúa ya resuelve el problema.

El razonamiento detrás de los contenedores de aplicaciones es rigurosamente el mismo. En lugar de transportar un sistema operativo completo, así como su software, simplemente encapsula su código y sus recursos a un contenedor, que se puede ejecutar en cualquier entorno.

El nuevo rumbo a la Virtualización

Los contenedores se consideran como las nuevas perspectivas de abstracción de infraestructura. Se trata de ambientes portátiles, que permiten empaquetar aplicaciones aisladamente, con enlaces, bibliotecas y todos los demás recursos necesarios para su funcionamiento. Este nuevo nivel de virtualización es particularmente interesante para trabajar la fragmentación de la aplicación en componentes menores – llamados microservicios. Un equipo de desarrollo que maneja esta arquitectura tiene mucho más eficiencia operativa que las que trabajan con aplicaciones monolíticas.

Esto se explica porque, siempre que necesitan desarrollar nuevas características, las monolíticas no logran esquivar la creación y ejecución del despliegue de una nueva versión de la aplicación en el servidor. Estamos hablando de la pérdida de tiempo y de recursos, además de una mayor probabilidad de errores. El enfoque de microservicios proporcionado por los contenedores diluye codificaciones monstruosas de programas que, a lo largo del tiempo, se han vuelto excesivamente complejos, transformando sus comandos en servicios menores y modulares, con pequeños códigos base de cada componente de aplicación. Así es mucho más fácil proporcionar acrecimientos y adaptaciones.

Las ventajas de los contenedores

Los contenedores permiten que los procesos se ejecuten de forma aislada en un host con un mismo sistema operativo. Este agrupamiento de aplicaciones y de sus elementos vinculados mejora significativamente el trabajo de los profesionales de TI, ya que da al equipo la oportunidad de trabajar enfocada en un ambiente específico.

Otro beneficio es que, con la aplicación pulverizada (con las diversas funcionalidades separadas), es posible que partes del software sean administradas por equipos diferentes o incluso por lenguajes distintos. Más un detalle: cómo los contenedores utilizan entornos construidos bajo un mismo sistema operativo, sólo se agregará una capa mínima de datos excedente (como registros y archivos temporales), formando paquetes únicos y ligeros. Se tiene con ello una economía de recursos impresionante.

Además, esta nueva forma de virtualización tiene un aprovisionamiento más rápido que una máquina virtual – máquina virtual (VM). Así, pequeños servicios se realizan en un tiempo mucho menor! La practicidad de no tener que trabajar con varias máquinas virtuales en los servidores significa también el uso racional de la memoria RAM.

Los Contenedores en escala con Kubernetes

Pero ¿cómo gestionar aplicaciones en contenedores? Aquí entra la relación entre Kubernetes y containers. El conjunto de máquinas a través del cual se ejecutan los contenedores se denomina clúster. El cluster, a su vez, necesita recibir algún tipo de gestión, porque hasta hace algunos años la configuración de un contenedor era extremadamente compleja, alejando a los usuarios de este nuevo enfoque. El desarrollo de plataformas de gestión (tales como OpenShift, Docker y Kubernetes) simplificó significativamente la configuración de los contenedores. En este escenario, la capacidad de automatización de Kubernetes merece destaque en función de las facilidades que pueden ser traídas a los equipos de TI.

Desarrollado por Google, Kubernetes es un sistema de código abierto para administración de aplicaciones que ofrece una plataforma para automatización de despliegue, equilibrio de carga, escalado y operación de contenedores. Programado en Go, se trata de un sistema cuyo objetivo esencial es facilitar la implantación de aplicaciones desde la perspectiva de los microseguros. A diferencia de las otras soluciones citadas hasta aquí, Kubernetes va más allá de un mero instrumento de orquestación de contenedores: puede simplemente reducir la necesidad de ese monitoreo por medio de automatizaciones. Esta virtud explica por qué Kubernetes y containers tienen tanto éxito dentro de la comunidad DevOps!

El Kubernetes elimina varias ineficiencias relacionadas con la gestión de contenedores gracias a su organización en pods, las unidades más pequeñas dentro de un clúster, que añaden una capa de abstracción a los contenedores agrupados. Incluso después de que Docker lanzó el modo Swarm, trabajar con Kubernetes sigue siendo bastante beneficioso. Entre las principales ventajas, vale la pena destacar:

  • Automatizar implementaciones y actualizaciones de aplicaciones
  • Escalar las aplicaciones en contenedores con extrema velocidad.
  • Orquestrar contenedores en múltiples hosts.
  • Permitir el uso del hardware de forma optimizada, reduciendo el consumo de recursos.

¿Cómo se complementan los Microservicio y los Contenedores?

La forma de desarrollar y entregar nuevas aplicaciones fue modificada por el uso de los microsistemas. Por lo tanto, la administración de la infraestructura utilizada por los diversos paquetes de servicios también necesitaba ser alterada.

Si antes una misma estructura era conectada y demandaba información de la base de datos, exigía el procesamiento de datos y se integra a otras aplicaciones, ahora son varios microses que realizan esas tareas. En este escenario, los contenedores fueron el método encontrado para encapsular los microservicios, simplificar la configuración, parametrización, mantenimiento y administración de los diversos paquetes de aplicaciones similares.

Los contenedores ayudan a crear plantillas replicables de infraestructura, a automatizar las tareas, a reducir el esfuerzo de configurar correctamente cada conjunto de aplicaciones e identificar rápidamente qué componentes necesitan acciones preventivas o correctivas. Las principales ventajas en el uso de los microservicios y contenedores son:

Integración y desarrollo continuo

La metodología tradicional exigía que la empresa esperara semanas o meses para recibir un código inmenso a someterse a la prueba unitaria, luego aplicado al ambiente de prueba para encontrar posibles fallas, hacer la prueba integrada y corregir manualmente los errores de configuración, integraciones o de funcionamiento .Utilizando la integración continua y el desarrollo continuo (Continuous Integration y Continuous Deployment) este obstáculo desaparece.

Al final de cada día, los desarrolladores integran sus trabajos al enviar los códigos escritos a una herramienta de automatización de tareas – un tipo de repositorio unificado que realiza pruebas e identifica errores de escritura, comandos incompatibles o en conflicto, fallas de solicitud y ejecución los comandos, entre otros.

Con este cambio, posibles fallas son detectadas de manera continua y el progreso del sistema queda más garantizado que en la metodología tradicional.

Agilidad

Los microservicios y contenedores garantizan que las nuevas funcionalidades se implementen utilizando partes de servicios disponibles, sin necesidad de reescribir o editar el código. Esto garantiza una evolución gradual y constante del sistema.

Escalabilidad mejorada

En vez de ampliar toda la infraestructura para soportar picos de demandas o nuevas cargas de trabajo, el uso de microservicios y contenedores permite adecuar los recursos utilizados por el servicio con más solicitudes.

Así, la infraestructura de TI puede ser escalada de forma racionalizada, sin grandes inversiones en ítems que no se solicitan en ese momento.

Time-to-Market reducido

Con mayor agilidad para desarrollar y agregar nuevas funcionalidades a las aplicaciones y software y menor necesidad de inversión en infraestructuras complejas y poco escalables, los micros y servicios contribuyen a reducir el tiempo necesario para ofrecer un nuevo software o sistema para el mercado.

Por ejemplo, la empresa puede lanzar el mínimo producto viable (MVP) y, a partir de él, agregar nuevas funciones a su sistema.

Productividad del equipo de desarrolladores

Al simplificar y automatizar la integración, pruebas, diagnósticos y correcciones de los códigos creados por diversos desarrolladores es posible aumentar la productividad del equipo y mantener el foco de todos en las tareas más prioritarias para aquella fase del proyecto.

Mantenimiento y depuración más fáciles

La última gran ventaja de los microservicios y contenedores es la facilidad en eliminar posibles errores y fallas, además de mejorar el desempeño de las aplicaciones al permitir que el equipo diagnostique exactamente qué elemento está actuando de forma inesperada.

¿Cómo adoptar esta práctica en su empresa?

Hay dos formas de adoptar esta estrategia de desarrollo. La primera es contar con una consultoría para ayudar a su equipo interno en los esfuerzos de crear o modernizar las aplicaciones corporativas. La otra sería subcontratar el trabajo de desarrollo, instalación y mantenimiento de la aplicación para una empresa especializada.

El uso de microservicios y contenedores representa la adopción de un nuevo paradigma para el desarrollo de aplicaciones, softwares y sitios. Sin embargo, el 67% de los equipos que usan este modelo alcanzan las ventajas mencionadas en ese post en los primeros 12 meses de su aplicación. Por lo tanto, los esfuerzos tienden a ser muy bien recompensados!

Fonte: Revista Cloud Computing

Autor: Lenildo Morais, Maestro en Ciencia de la Computación por el Centro de Informática de la Universidad Federal de Pernambuco. Gerente de Proyectos de Ustore, empresa del Puerto Digital de Pernambuco.