Introducción
El desarrollo de software empezó utilizando una arquitectura monolítica que agrupaba todas sus funciones y servicios dentro de un único y centralizado componente.
A lo largo de los años se ha ido alejando de esta arquitectura tradicional por sus complejidades con un código estrechamente acoplado e interconectado, sobre todo al crecer los proyectos en complejidad, número de desarrolladores, usuarios y cargas de trabajo.
Esto resultó en la adopción de microservicios, que son escalables, eficientes y que permiten la computación distribuida a través de múltiples servicios más pequeños, además de facilitar el trabajo colaborativo entre los diferentes desarrolladores.
En los últimos años se ha popularizado el uso de los microservicios, dado que la evolución es un proceso natural así que los nanoservicios han aparecido como otro patrón de diseño con el objetivo de superar la complejidad que se encuentra en los microservicios.
¿Qué es un Nanoservicio?
Los nanoservicios son todo lo que nos gusta de los microservicios, pero más pequeños. Uno de los problemas de los microservicios es que, aunque son más pequeños que los monolitos, pero no existe una definición estándar de lo que se supone que es un microservicio, en muchos casos, parecería que un microservicio es solo otro nombre para cualquier servicio web o API.
Un nanosevicio es un componente que se ha diseñado para hacer una sola funcionalidad y que esta publicado como un punto extremo de una API.
los nanoservicios están diseñados para ser detectables, por y para los demás, con el objetivo de vincularse para ampliar sus funcionalidades.
Por diseño un nanoservicio es altamente autónomo, reutilizable y menos complejo que su hermano mayor el microservicio, además se consideran más eficiente que los microservicios por su tiempo de arranque muy bajo y latencia baja entre ellos ya que cada milisegundo cuenta cuando se trata de un número muy elevado de nanoservicios.
Beneficios de los nanoservicios
Los beneficios percibidos de los nanoservicios se extienden más allá de sus ventajas técnicas sobre los microservicios. Al ser más pequeños que los microservicios, hacen posible que varios equipos diferentes trabajen en uno o más servicios en un momento dado, cada servicio puede tener su propio protocolo de seguridad.
Cada nanoservicio puede construirse de acuerdo con su propio cronograma y lanzarse de acuerdo con su propio calendario de lanzamiento independiente.
En teoría, estos lanzamientos más pequeños, más seguros y más frecuentes deberían generar menos cambios importantes.
Una vez publicados, los nanoservicios brindan un nivel adicional de flexibilidad porque le permiten encadenar diferentes servicios para ampliar la funcionalidad.
Cómo elegir la mejor opción ¿micro o nano?
Ambos tipos de servicios están diseñados para hacer frente a las deficiencias de la arquitectura tradicional y hacer frente a los nuevos desafíos de las aplicaciones distribuidas en la nube.
Micro
Cuando se trata de elegir cuál usar, el hecho de que los microservicios hayan existido por más tiempo es una clara ventaja, como resultado, son conocidos por la comunidad de desarrollo y han sido utilizados y probados por importantes empresas de la industria del software.
Hay una gran cantidad de recursos disponibles y funcionan bien con una variedad de tecnologías existentes.
La desventaja es que no siempre son adecuados para todas las aplicaciones, no existe una definición clara entre lo que es y lo que no es un microservicio.
Los microservicios pueden crecer tanto como las soluciones monolíticas que reemplazan, a pesar de estas limitaciones, los microservicios son recomendamos como la mejor opción para muchas organizaciones.
Nano
Los nanoservicios son mucho más nuevos, tienen una serie de claras ventajas. Son más pequeños, más enfocados y proporcionan mayor aislamiento, flexibilidad y altamente escalables.
Además, los nanoservicios pueden descubrir y ser descubiertos por otros servicios.
Otra ventaja clave es que tienen una serie de características integradas que facilitan su implementación.
Los nanoservicios solucionan muchos de los problemas de los microservicios, pero también tienen muchos de los mismos problemas. Dicho esto, los nanoservicios son muy prometedores pero las organizaciones grandes y conservadoras suelen evitarlos, principalmente debido a que no se ha explorado bastante para asegurar su explotabilidad.
Caso de uso BBC NEWS
La BBC tiene una amplia gama de sitios web y aplicaciones, que van desde las enormes noticias globales de la BBC hasta las más especializadas. Crear esta amplia variedad de experiencias, de forma asequible y fiable, es un gran desafío técnico. Para lograr esto, se ha utilizado una arquitectura basada en nanoservicios, pequeños componentes, desarrollados por diferentes equipos, que se unen para crear diferentes experiencias. Es una forma de computación sin servidor y ha producido algunos resultados interesantes.
La BBC tiene más de 1000 nanoservicios en producción. Juntos, crean una variedad de páginas web dinámicas y también API para aplicaciones móviles y de TV.
Tomemos como ejemplo la página de inicio de BBC News. Alrededor de 30 nanoservicios ayudan a crear componentes en esta página.
Algunos son responsables de recopilar los datos, otros son responsables de usar esos datos para crear HTML.
Como podemos observar en la imagen de arriba que cada cuadro azul resalta una parte de la página creada por un nanoservicio, además hay otro que es el responsable de combinarlos para crear la parte superior de la página está marcado en amarillo.
A continuación analizamos la arquitectura de nanoservicios de alto nivel del sitio de la BBC que describe cómo funcionan en conjunto varios servicios más pequeños para mostrar el contenido de la página web.
Se ha creado una plataforma interna que permite cargar nanoservicios, como código. Luego permite ejecutar un nanoservicio bajo demanda, a través de una API RESTful. No hay contenedores ni servidores dedicados a cada nanoservicio, todos se ejecutan en una plataforma compartida que es un conjunto de instancias en la nube de escalado automático.
Si un nanoservicio necesita llamar a otro, la plataforma maneja internamente esa solicitud.
Esto garantiza que la comunicación sea extremadamente rápida y que los errores se puedan manejar de una manera estándar. Para facilitar esta comunicación, se ha utilizado Redis para acceder de forma rápida al caché que funciona también como bus de mensajes.
Plataformas de computación sin servidor para nanoservicios
A continuación veremos plataformas de computación sin servidor que ofrecen los proveedores de la nube más importantes del mercado que se pueden utilizar para publicar nanoservicios:
AWS Lambda: es un servicio informático sin servidor y basado en eventos que le permite ejecutar código para prácticamente cualquier tipo de aplicación o servicio backend sin necesidad de aprovisionar o administrar servidores.
Cloudflare Workers: Almacenamiento de clave-valor sin servidor para aplicaciones en Cloudflare.
Cloudflare Workers KV proporciona acceso a almacenamientos seguros de claves-valor de baja latencia. Los desarrolladores pueden utilizar Cloudflare Workers y Workers KV para aumentar las aplicaciones existentes o para crear aplicaciones completamente nuevas sobre la red global en la nube de Cloudflare.
AWS Fargate : es un motor informático sin servidor de pago por uso que permite centrarse en la creación de aplicaciones sin tener que administrar los servidores.
Azure Functions: es una solución sin servidor que le permite escribir menos código, mantener menos infraestructura y ahorrar costos. En lugar de preocuparse por implementar y mantener servidores, la infraestructura de la nube proporciona todos los recursos actualizados necesarios para mantener sus aplicaciones en funcionamiento.
Google Cloud Functions: es un entorno de ejecución sin servidores para crear y conectar servicios en la nube. Con CloudFunctions, puede programar funciones simples de un solo propósito vinculadas a eventos emitidos desde su infraestructura y servicios de nube. Su función de CloudFunctions se activa cuando ocurre un evento que está bajo observación. Su código se ejecuta en un entorno completamente administrado, sin necesidad de aprovisionar infraestructura ni preocuparse por administrar servidores.
IBM Cloud Functions: es una plataforma de software que proporciona funciones de gestión de acceso e identidad (IAM) para aplicaciones sin servidor que se ejecutan en IBM Cloud. El software Cloud Functions se basa en Apache OpenWhisk.
Alibaba Function Compute: es un servicio de cómputo basado en eventos totalmente administrado. Function Compute le permite concentrarse en escribir y cargar código sin tener que administrar la infraestructura, como los servidores. Function Compute proporciona recursos informáticos para ejecutar código de manera flexible y confiable.
Conclusión
La elección de nanoservicios en lugar de microservicios, o viceversa, siempre diferirá según los casos de uso. Sin embargo, el objetivo final sigue siendo el mismo: adoptar la arquitectura correcta que ayude a la automatización y ayude a desarrollar aplicaciones resistentes, escalables y seguras.
Bibliografía y referencias:
- https://www.bbc.co.uk/blogs/internet/entries/5bdabd53-090e-4611-a5d5-4faea05aeb35
- https://www.alibabacloud.com/es/product/function-compute
- https://cloud.ibm.com/functions/
- https://cloud.google.com/functions?hl=es
- https://aws.amazon.com/es/fargate/?nc2=type_a
- https://www.cloudflare.com/es-es/products/workers-kv/
- https://www.youtube.com/watch?v=lyQw4guIirw&ab_channel=AmazonWebServices