Cuando comenzamos a crear una aplicación, por lo general, seleccionamos un único lenguaje de programación y un único manejador de base de datos, de este modo es como conseguimos desarrollar una sola aplicación back-end. No obstante, cuando la aplicación que hemos desarrollado esté llegando a muchos más usuarios, también irá necesitando un mayor número de recursos y nos veremos en la necesidad de ir anexando mucha más funcionalidad.

Esta funcionalidad necesita ser mantenida y es justo en este punto donde la aplicación se va tornando más compleja, debido a que va creciendo tanto en código como en funcionalidad, entonces, es muy probable que tengamos que dividir nuestra aplicación para conseguir administrarla de una manera mucho más eficiente.

Es allí donde surge la alternativa de los microservicios como un modo de poder seccionar una aplicación del back-end en diversas partes que se comunicarán por separado. De esta manera, cada una de estas partes podrán comunicarse entre sí y tener una función específica y cada una podrá ir evolucionando independientemente de las otras, sin interrumpirse.

¿Qué son los microservicios?
Son un tipo de arquitectura que sirve para diseñar aplicaciones desglosando sus funciones principales en servicios independientes, los cuales idealmente funcionarán separados (y también, fallarán por separado) sin afectar a los demás.

Cabe destacar que esta arquitectura es una de las más recomendadas para las grandes aplicaciones, porque además es posible desarrollarlas en distintos lenguajes de programación, incluso en distintas bases de datos. Esta es una de las formas en las que se puede crear una aplicación gigante y conseguir administrar su complejidad con todo éxito.

¿Para qué sirven los microservicios? ¿Necesito microservicios para mi App?
Los microservicios son usados para el desarrollo de software que requieran un alto nivel de escalabilidad y disponibilidad, de desarrollo ágil y que además, sean fáciles de mantener, en otras palabras, suelen usarse para aplicaciones que sean realmente grandes.

Esta arquitectura de microservicios es perfecta para este tipo de aplicaciones enormes y va dirigida especialmente a aquellas que ya se encuentren funcionando y que necesiten una mejor forma de administrarse para continuar creciendo, debido a que están generando una mayor masa de usuarios que a su vez, generan un mayor volumen de datos. Un ejemplo de las llamadas aplicaciones enormes pueden ser Amazon, Ebay, Netflix, Uber, entre otras.

Para saber si tu app necesitará microservicios, considera simplemente si está comenzando a expandirse, si empieza a tener grandes requisitos de escalabilidad, portabilidad, flexibilidad y disponibilidad. Pero si apenas estás comenzando con una aplicación, probablemente te convenga más aplicar una arquitectura monolítica a tu proyecto.

Principales ventajas

  • Con el crecimiento de la aplicación, la complejidad de su gestión no se torna más difícil como sucede con una arquitectura monolítica donde a medida que se expande la aplicación, crece también el número de líneas, la documentación se hace cada vez más complicada y parece imposible realizar modificaciones complejas; además, surge el inconveniente de que nuevos desarrolladores no puedan empezar a trabajar en el proyecto. Todas estas cuestiones que solían ser un problema con los microservicios se han resuelto perfectamente.
  • Es posible mantener equipos de desarrollo que trabajen conjuntamente en un mismo proyecto sin ninguna dificultad. Por ejemplo se pueden tener microservicios desarrollados en javascript utilizando mongoDb con un equipo especializado para ello, pero también es posible tener otro microservicio desarrollado por un equipo Java que utilice MySQL u Oracle como base de datos, sin problemas para juntar su trabajo y hacer que funcione dentro de la misma aplicación.
  • Favorece en gran medida la reutilización de código de los cuales muchos pueden ser productos ya empaquetados para usar o puede tratarse de desarrollos propios que también podrán servir para distintas aplicaciones dentro de una misma empresa.
  • La reducción del time to market es otra de sus ventajas. Gracias a los microservicios es mucho más rápido desarrollar funcionalidades que lleguen más rápido al cliente o al usuario final.
  • Los microservicios apoyan la evolución del proyecto de una manera más sencilla, ya que es más fácil hacer modificaciones aisladas porque al final cada microservicio tiene una funcionalidad documentada y expuesta normalmente con una Api, por lo que es bastante fácil hacer modificaciones a un pequeño componente para refactorizarlo o para optimizarlo, a diferencia de una arquitectura monolítica.
  • Además, los microservicios permiten una escalabilidad mucho más eficiente, habilita al desarrollador para instalar únicamente una parte de la aplicación. Por ejemplo, si se cree que una ecommerce recibirá un gran número de llamadas, solo será necesario escalar la parte de front-end y la parte de back-end puede quedar sin escalar, sin contar que existen un montón de soluciones para la escalabilidad y la alta disponibilidad de cualquier aplicación usando microservicios.

Algunas desventajas

  • Dificultad para organizar el trabajo al inicio en los equipos de desarrollo móvil: En aplicaciones pequeñas puede ser mucho más fácil desarrollar una arquitectura monolítica que una arquitectura de microservicios, donde será más complicado de levantarla y mucho más complejo para gestionarla.
  • Requiere complejas pruebas de integración.
  • Mayor complejidad para lograr la eficiencia en los equipos de desarrollo de software: naturalmente al tener microservicios surgen nuevas necesidades, por ejemplo al tener una gran variedad de servicios se necesitará de un “orquestador”, un software especializado que ya tenga la configuración de toda la aplicación, donde en cualquier momento se pueda presionar un botón y el software levantará todos los microservicios y los configurará para que marchen todos a un mismo ritmo.
  • Otra de las necesidades que surgen al tener microservicios es un servicio de registro y descubrimiento sobre todo si tu aplicación posee propiedades de escalabilidad y elasticidad, es decir en cualquier momento puede necesitarse qué cierto servicio escale en función a la demanda o cuando los desarrolladores así lo requieran.
  • Registros de log centralizados para integrar todos los elementos: es necesario un servicio de configuración central de manera que no sea necesario configurar servicio por servicio, sino que se pueda tener un servicio centralizado para que cuando se levante un servicio en particular, este registro se disponga a buscar cuál es la configuración que le corresponde.
  • Si se cuenta con un gran número de servicios, integrarlos y gestionarlos puede resultar muy complejo: en este sentido, la comunicación en las arquitecturas de microservicios es mucho más compleja ya que se dispone de una comunicación síncrona y asíncrona.

Conclusión
A medida que avanza el conocimiento humano sobre el software, muchas compañías tecnológicas encuentran maneras cada vez más ingeniosas y creativas para aumentar la calidad y eficiencia del resultado final, logrando así que el usuario final obtenga un producto de calidad.
El asunto a considerar, es que los consumidores y usuarios se vuelven cada vez más exigentes y demandan productos superiores, formando un círculo virtuoso al cual es difícil seguirle el ritmo.

Para conocer más sobre cómo podemos optimizar tu aplicación móvil, visita nuestra sección Mobility.