Este repositorio contiene una guia propia sobre lo aprendido en el curso: Microservices and Serverless.
- Microservicios
- Serverless
- OpenShift
Establecen un conjunto de caracteristicas determinantes en el ciclo de vida del software, agrupandolas en: Code, Deploy, Operate, que permiten guiar al desarrollador en la creación de aplicaciones eficientes y seguras.
- Siempre deberia usar un sistema de gestión de versiones.
- Deberia haber una relacion de uno a uno entre la aplicación desplegada y el código, facilitando el mantenimiento.
- Pueden hacer despliegues de multiples instancias de la aplicación.
- Diversos despliegues pueden tener multiples versiones (stages).
- Asumir que la aplicación es tan confiable como su dependencia menos confiable.
- Declarar explicitamente todas las dependencias
- Build: Complilar la aplicación en una unidad ejecutable denominado build.
- Release: Unir dicho build con un conjunto de configuraciones necesarias para desplegar dicha aplicación como una version única y lista para funcionar.
- Run: Ejecutar la aplicación.
- Minimizar las diferencias entre los ambientes de producción y desarrollo para acelerar la implementación de nuevas funcionalidades a producción.
- Usar los mismos servicios de backend para minimizar los errores entre los ambientes (bases de datos, terceros, etc)
- Mantener todo aquello configurable y que pueda variar en el tiempo fuera del codigo fuente a traves de archivos de configuración.
- Guardar la información sensible en variables de configuración.
- Una aplicación no deberia distinguir entre un servicio local y uno de terceros.
- El acceso a los servicios deberia poder ser cambiado sin afectar el codigo fuente subsecuente (contratos e interoperabilidad).
- Deberian ser las aplicaciones sin estado (stateless) y no compartir nada.
- No deberian compartir memoria o sistemas de archivos.
- El acceso y el almacenamiento de los datos deberia estar centralizado.
- Deberia exponer los servicios a traves de exponer un puerto de servicio (80 por ejemplo).
- Otras aplicaciones podrian hacer usos de los servicios mediante los puertos expuestos.
- Una aplicación deberia escalar (horizontalmente)
- Una aplicación deberia escalar y esto no deberia afectar la relación que tiene con otros servicios o dependencias.
- Una aplicación deberia estar diseñada para estar funcional en el menor tiempo posible.
- Deberia poder integrar y desplegar cambios de formar rapida y sencilla.
- Deberia escalar de forma facil.
- Una aplicación no deberia preocuparse por almacenar logs, en cambio deberia un ambiente o infraestructura tratar los logs (lanzados al std ouput) como un stream de datos.
- Idelmente los logs deberia ser analizados con una herramienta para dicho proposito (Sentry, Datadog).
- Una aplicación debe diseñarse para correr procesos de administración como migraciones de bases de datos.
- Dichos procesos de administración deben ejecutarse sobre un release y configuración establecida.
Los microservicios son una arquitectura de software que se basa en la idea de que cada componente funcional de un sistema puede ser mdoelado como un componente independiente, permitiendo asi construir aplicaciones más grandes, resilientes y desacopladas.
Los microservicios corresponden a reglas de negocio y exprensan la necesidad de un servicio, con un determinado trabajo a realizar, como procesar un pago, la gestion de los usuarios, de las ordenes, el inventario, etc. Todos ellos componentes aislados pero partes de un mismo sistema.
Los microservicios comunmente permiten a otros componentes consumirlos mediante una interfaz de comunicación, como REST o Grpc.
- Permite la interoperabilidad entre los microservicios.
- Permite mantener la experticia de un equipo de desarrollo.
- Permite escalar de forma independiente.
- Logra desacoplar un sistema en diversos componentes independientes.
- Permite que cada microservicio se ejecute en su propio entorno y se actualice a su ritmo.
- Disminuyen los riesgos de fallos al reducir la dependencia del sistema.
-
Monolito: representa un unico proceso o sistema fuertemente acoplado a un conjunto de componentes y/o tecnologías que tiene como ventaja ser facil y rapido de implementar.
-
SOA: representa un sistema de software que se compone de una o más aplicaciones que se comunican entre sí mediante una interfaz de comunicación, comunmente visto en arquitecturas de sofwtare empresarial de alto nivel.
-
Microservicios: representan una aplicación o un conjunto de aplicaciones que se comunican entre sí mediante una interfaz de comunicación, comunmente visto en arquitecturas de sofwtare empresarial de alto nivel.
Cada uno tiene sus propios beneficios y desventajas y dependerá de los atributos de calidad la arquitectura adecuada, sim embargo esto no impide que se pueda empezar con una y luego cambiar.
- SPA: Single Page Application: Aplicación web que carga una sola página web en el navegador, permite cargar y actualizar la interfaz de usuario de forma dinámica y focalizada.
- BFF: Backend for Frontend: Es una solución que permite especializar la experiencia de usuario segun la plataforma (mobile, web, etc), es a menudo una capa intermedia entre el frontend y el backend.
- Strangler: Es una arquitectura que busca el desarrollo modular y progresivo a través de la creación de microservicios, generalmente se usan sub-dominios o enrutamiento para separar los microservicios y es utilizado para convertir de forma controlada una aplicacion monolitica en una arquitectura microservicios.
- Service Discovery: Es un proceso que permite a los microservicios de descubrir y comunicarse con otros microservicios, es una forma de comunicación entre microservicios.