Microservicios: Arquitectura de software y Frameworks de código abierto
Continuando con el tema de la evolución y de los cambios de paradigmas y métodos de trabajo acontecidos en el área del desarrollo del software, que hace poco tocamos en los artículos llamados “Desarrollo del Software: Un repaso histórico hasta nuestros días”, “Interoperabilidad a través de la Nube: ¿Cómo lograrlo?” y “XaaS: Computación en la Nube – Todo como un Servicio”, hoy hablaremos sobre los Microservicios.
Los Microservicios son una moderna arquitectura de software, no un API (Interfaz de Programación de Aplicaciones / Application Programming Interface) o una tecnología en sí, la cual puede instalarse y utilizarse. Las arquitecturas de software, también conocidas como patrones de software, son ajenas por completo a los lenguajes de programación, pues estás nada más establecen la forma en la que las tecnologías deben funcionar y no como son implementadas.
Introducción
Los Microservicios pueden ser vistos como una evolución de la Arquitectura SOA (Service-Oriented Architecture), la cual guía a los desarrolladores a crear aplicaciones más modulares, que sean funcionales y autónomas, con un alta capacidad de ser reutilizadas de una forma eficaz, tal como se hace de forma análoga, cuando optimizamos la utilización de algún hardware, en el que se despliega solo lo realmente necesario, en lugar de desplegar todo su potencial por completo sin necesidad.
La Arquitectura de Microservicios, en la practica no ha llegado a masificarse tanto como en la teoría, es decir, es más conocida que usada. Sin embargo, cada día más, muchos desarrolladores están implementandola por ser un modelo de desarrollo de software que mejora la variables tiempo, rendimiento y estabilidad dentro de los proyectos donde se aplica. Además su sencilla escalabilidad asociada la hace especialmente adecuada en los desarrollos en los que la compatibilidad multiplataforma (Web, Móvil, Wearables, IoT) es imprescindible.
Pero, mientras SOA es una Arquitectura de más alto nivel, es decir, una Arquitectura donde se construyen aplicaciones basadas en servicios, donde un servicio es la unidad más pequeña y funcional de trabajo dentro de una aplicación creada, la Arquitectura de Microservicios también nos permite crear servicios, pero estos servicios están diseñados de forma muy pequeña y especifica para que cumplan una funcionalidad muy precisa y puntual, de forma tal, que puedan ser desacoplados del resto de aplicaciones y funcionar de una forma totalmente autónoma del resto de la aplicación donde fue creada.
¿Que son las Arquitecturas (Patrones) de Software?
Para entender bien la Arquitectura de Software de los Microservicios es bueno conocer puntualmente un poco sobre todas las más conocidas Arquitecturas de Software existentes. Hay muchas existentes, tal como se puede ver en el sitio de Oodesign o simplemente en Wikipedia, pero según el famoso libro llamado “Libro de Diseño de Patrones” (Design Patterns Book) los patrones existentes pueden ser clasificados como:
Creacionales
Aquellos que tratan con las formas de crear instancias de objetos y cuyo objetivo es abstraer el proceso de instanciación y ocultar los detalles de cómo los objetos son creados o inicializados. En está clase se encuentran los siguientes:
- Abstract Factory
- Builder
- Factory Method
- Prototype
- Singleton
Estructurales
Aquellos que describen como las clases y objetos (simples o compuestos) pueden ser combinados para formar grandes estructuras y proporcionar nuevas funcionalidades. En está clase se encuentran los siguientes:
- Adapter
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Proxy
Comportamiento
Aquellos que nos ayudan a definir la comunicación e iteración entre los objetos de un sistema. El propósito de este patrón es reducir el acoplamiento entre los objetos. En está clase se encuentran los siguientes:
- Chain Of Responsibility
- Command
- Interpreter
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Template Method
- Visitor
Otros
Los anteriores patrones de diseño expresaban esquemas que definen estructuras de diseño con las que construir sistemas de software. Pero cuando deseamos expresar mejor un esquema organizativo y estructural fundamental para los sistemas de software creados, solemos encontrar esta otra clasificación:
- Arquitectura en pizarra
- DAO: Data Acces Object
- DTO: Data Transfer Object
- EDA: Arquitectura dirigida por eventos
- Invocación implícita
- Objetos desnudos
- Programación por capas
- Peer-to-peer
- Pipeline
- SOA: Arquitectura orientada a servicios
- Tres niveles
También existe el “Modelo Vista Controlador” que es muy conocido y usado, y se divide a su vez en:
- Modelo/Vista/Controlador
- Modelo/Vista/Presentador
- Modelo/Vista/Presentador con Presentador del Modelo
- Modelo/Vista/Vista-Modelo
- Modelo/Vista/Presentador con Vista Pasiva
- Modelo/Vista/Presentador con Controlador Supervisor
Siendo el “Modelo Vista Controlador” uno de los más conocidos e implementados en la actualidad, el mismo se encuentra insuficiente para dotar de las funcionalidades requeridas a una aplicación corporativa, y esta es una de las principales razones por las cuales, la Arquitectura de Microservicios está reemplazando a la del Modelo-Vista-Controlador (MVC).
Ventajas de la Arquitectura de Microservicios
Cuando una plataforma web hace uso de la Arquitectura de Microservicios suele tener las siguientes ventajas:
- Resolver fácilmente cada inconveniente o problema presentado abordando cada pequeño Microservicio involucrado en una situación especifica.
- Mitigar fallas generales o globales de los servicios, ya que cuando un Microservicio falla no afecta a los demás, debido a que son totalmente independientes.
- Facilitar el lanzamiento e incorporación de completas o especificas funcionalidades o servicios, ya que se pueden añadir o quitar y actualizar cada Microservicio por separado y progresivamente.
- Mejorar el acceso a las aplicaciones o servicios creados desde todo tipo de dispositivo y plataforma.
- Aumentar la versatilidad de la plataforma, ya que los Microservicios pueden estar distribuidos en diferentes servidores y estar escritos en diferentes lenguajes.
Frameworks de Código Abierto
Existen muchas opciones de código abierto que los desarrolladores de software pueden utilizar para desarrollar soluciones que formen parte de las Arquitecturas de Microservicios. Específicamente para Java que es una tecnología muy usada para ello, existen las siguientes:
- Cricket
- Dropwizard
- Eclipse MicroProfile
- Helidon
- Jersey
- Payara Micro
- Play
- Restlet
- Spark
- Spring Boot
- Squash
- Swagger
- Telepresence
- WildFly Thorntail
- Zipkin
Ejemplos de Web con Arquitecturas de Microservicios
Entre la gran cantidad de sitios webs que prestan servicios de aplicaciones a gran escala y han implementado progresivamente la Arquitectura de Microservicios para mejorar el mantenimiento y la escalabilidad de su plataforma de servicios y productos haciéndola simple, efectiva y rápido podemos mencionar tres grandes de la industria que son:
- Amazon
- Ebay
- Netflix
Conclusión
Queda claro que los Microservicios aportan mucho en materia de Desarrollo de Software moderno basado en la Web, pero también implican abordar muchos retos nuevos que solucionar. Problemas que no solo tienen que ver con que Framework aprender y trabajar eficientemente, sino como estos nuevos desarrollo se complementan e implementan en los departamento de TI, quienes a fin de cuenta son los que los ponen en línea y gestionan, y tienen un voto de peso en las decisiones finales sobre cada desarrollo. Pero está Arquitectura está aquí y ha venido para quedarse por un buen tiempo.
El artículo Microservicios: Arquitectura de software y Frameworks de código abierto aparece primero en Microservicios: Arquitectura de software y Frameworks de código abierto.