IEBSchool - La Escuela de los Negocios y los Emprendedores

Contenido destacado del mes

Arquitecturas basadas en Microservicios

Microservicios, nuevo paradigma de desarrollo de software El desarrollo de aplicaciones web empresariales está cambiando, realmente, siempre está en continuo cambio, pero, la corriente más reciente es el desarrollo de aplicaciones web bajo arquitecturas basadas en Microservicios. ¿De qué punto … [ leer más ]

Lo más leído

Tags

Arquitecturas basadas en Microservicios

18 mayo, 2016, en Desarrollo por Fátima Casaú Pérez
Tags: ,

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

Microservicios, nuevo paradigma de desarrollo de software

El desarrollo de aplicaciones web empresariales está cambiando, realmente, siempre está en continuo cambio, pero, la corriente más reciente es el desarrollo de aplicaciones web bajo arquitecturas basadas en Microservicios.

¿De qué punto partimos?

Partimos del desarrollo de aplicaciones web tradicionales llamadas monolíticas en las que se pone toda la lógica de la aplicación en un único ejecutable lógico.

Pero este tipo de arquitecturas, según evolucionan las necesidades de software, vemos que genera algunos problemas. A la hora de añadir nuevas funcionalidades ya que hay que modificar el código de la aplicación en conjunto al no estar las funcionalidades aisladas. Esto puede provocar errores en otras partes del código y añadir complejidad. Además, hay que re-desplegar toda la aplicación por cada cambio que se quiera hacer. Todo esto también se traduce en que tardamos más en lanzar una funcionalidad al mercado

Otros problemas estarían relacionados con requerimientos no funcionales. Si queremos escalar la aplicación hay que hacerlo en su totalidad incurriendo en posibles costes innecesarios ya que puede que sólo algunas funcionalidades de la aplicación sean las que necesiten ser escaladas. En cuanto a la respuesta frente a posibles fallos, hay que tener en cuenta que un error o una caída, afectaría a la aplicación también en su totalidad.

Como solución a estos problemas surge el desarrollo de aplicaciones basado en microservicios.

En resumen, la arquitectura de Microservicios es un enfoque de desarrollo de una aplicación como un conjunto de servicios más pequeños, cada uno se ejecuta en su propio proceso y se exponen, normalmente, a través de protocolos HTTP mediante APIs RESTFull. Estos servicios están construidos alrededor de capacidades o funcionalidades de negocio y con independencia de despliegue a través de un sistema de automatización. Además pueden estar escritos en diferentes lenguajes de programación y utilizar diferentes tecnologías de almacenamiento de base de datos. (http://martinfowler.com/microservices/)

http://www.martinfowler.com/articles/microservices.html

Aplicaciones monolíticas vs. Microservicios

Uno de los principios que siguen las arquitecturas basadas en microservicios es el Principio de Responsabilidad Única (Single Responsibility Principle) del que Robert C. Martin habla en su libro Agile Software Development, Principles, Patterns, and Practices y que dice

“A class should have only one reason to change”

Una clase debe tener una y solo una razón para cambiar, es decir, se deben reunir aquellas cosas que cambian por la misma razón y separarlas de aquellas que cambian por otras razones, o lo que es lo mismo, hacer una sóla cosa pero hacerla bien.

Un buen ejemplo de este principio es la filosofía que siguen las utilidades de un sistema Unix como grep, cat, find,… Cada una de estas acciones hace una sola cosa pero se pueden combinar en un shell script y conseguir acciones más complejas.

Ley de Conway (by Melvin Conway)

Es importante destacar que la forma de desarrollar software impacta directamente en la forma de organización de las empresas según la Ley de Conway

Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization’s communication structure.

Cualquier organización que diseñe un sistema (definido ampliamente), producirá un diseño cuya estructura es una copia de la estructura de comunicación de la organización. Esto es: Las empresa tradicionales que desarrollan aplicaciones monolíticas suelen estar formadas por equipos especializados, por ejemplo, especialistas en UX, especialistas en una determinada tecnología de desarrollo, especialistas en gestión de bbdd,… Además, puede darse el caso que ni siguiera dichos equipos estén en la misma ubicación. Esto, inevitablemente hace que cada equipo se encargue de una parte del SW por tanto, tenemos el siguiente esquema:

http://www.martinfowler.com/articles/microservices

Ley de Conway

En cambio, el desarrollo de microservicios es un desarrollo enfocado en capacidades de negocio o funcionalidades, por lo que cada uno de los microservicios debe cumplir todas las fases, mostrar los datos, el desarrollo de la funcionalidad y el acceso a dichos datos, por tanto, se requieren equipos multidisciplinares compuestos por miembros especialistas en cada una de estas áreas incluso especialistas en gestión o de operaciones y centrados en el desarrollo de cada uno de los microservicios:

http://www.martinfowler.com/articles/microservices/

Ley de Conway

Agile Development

La arquitectura de las aplicaciones, además de estar relacionada con la organización de la empresa, también está relacionada con las metodologías y las prácticas que se dan en ella.
El desarrollo de aplicaciones con microservicios facilita el Continuous Delivery, es decir, la entrega continua de los servicios.
Al ser desarrollo muchos más cortos y especializados en una sola funcionalidad que tiene peso por sí misma y puede ser entregada, se facilita la entrega continua de software, por tanto, se consigue reducir el time to market, es decir, salir cuanto antes al mercado y posicionarse frente a los competidores. Pero esto hay que verlo dentro de un marco de trabajo más amplio donde entran en juego las metodologías ágiles, el continuous integration, el continuous deployment y por último, el DevOps.

Ventajas

Eficiencia y simplicidad-> al ser servicios pequeños y especializados
Heterogeneidad -> diferentes microservicios en diferentes tecnologías
Escalabilidad -> eficiente, elástica y horizontal, bajo demanda, lo que permite ahorrar costes
Independencia -> de funcionalidad, funcionalidades aisladas e independientes
Time to market -> cada funcionalidad puede ser tratada y probada por separado y al ser corta puede entregarse en menos tiempo
Alta disponibilidad -> al facilitar las posibilidades de escalado y replicación

Casos de éxito

En ocasiones este tipo de arquitectura se relaciona con pequeños desarrollos, startups o empresas pequeñas pero lo cierto es que estas arquitecturas han sido populares gracias a compañías como Netflix, Facebook, eBay, Amazon, Twitter o Google, que han evolucionado sus arquitecturas de software hacia los microservicios para poder adaptarse de una mejora manera a la evolución, crecimiento y cambios que han sufrido.

Para terminar, a continuación indico un ejemplo de desarrollo de microservicios utilizando Spring Boot como framework:

https://spring.io/guides/gs/accessing-data-rest

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

comentarios para esta entrada