Capitulo 1 - Microservicios
A lo largo de los años, se puede observar una creciente popularidad en términos como "diseño de servicios", "software como servicio (SaaS)", "microservicios", "monolitos" y "arquitectura orientada a servicios".
Esto es debido a la creciente demanda de solucionar problemas a través del Software. En este capitulo el libro explica como el uso de microservicios puede beneficiar a su creador, por ejemplo con los SAAS.
El término "software como servicio" (SaaS) se refiere principalmente a un modelo de licencia en el que los usuarios pagan por el uso de un servicio en línea. La mayoría de estos servicios están alojados en la nube y ofrecen diversas formas de interactuar con ellos, como a través de interfaces web o APIs.
Todo esto con el uso de microservicios y sus derivados.
Capitulo 3 - Anatomia de un microservicio
Este capitulo aborda varios aspectos y consideraciones al diseñar microservicios:
Duplicación de Datos
- El autor expresa su aversión hacia la duplicación de datos y sugiere alternativas como objetos virtuales y el uso de caché tanto en el lado del cliente como del servidor.
- Se recomienda pensar en alternativas antes de empezar a copiar datos de otros servicios, ya que podría resultar costoso a largo plazo.
Servicios de Front-end
- Los servicios de front-end existen para contener las aplicaciones de front-end que se renderizan en las máquinas de los usuarios.
- Se discuten diferentes enfoques para la arquitectura de front-end y cómo se pueden estructurar los servicios de back-end para soportarlas.
Servicios Mixtos (Mixed Services)
En el contexto de microservicios, "servicios mixtos" se refiere a sistemas que combinan diferentes tipos de servicios o arquitecturas. Por ejemplo, una aplicación podría tener partes construidas con microservicios y otras partes construidas con una arquitectura monolítica. Este enfoque mixto puede surgir durante la transición de un sistema monolítico a microservicios o cuando diferentes partes del sistema tienen distintos requisitos de escalabilidad y complejidad.
Principios de Diseño (Design Principles)
Los principios de diseño se refieren a las mejores prácticas y patrones que ayudan a construir sistemas escalables, mantenibles y robustos. Algunos principios comunes incluyen:
- Desacoplamiento: Los servicios deben ser independientes y tener la menor cantidad de dependencias entre ellos.
- Cohesión: Cada microservicio debe tener una única responsabilidad y realizar una tarea específica.
- Autonomía: Los microservicios deben ser capaces de operar de forma independiente.
- Resiliencia: Los sistemas deben ser capaces de recuperarse de fallos sin afectar la experiencia del usuario.
Los 12 Factores (12 Factors)
Los 12 factores son un conjunto de principios y mejores prácticas propuestas para construir aplicaciones de software como servicio (SaaS). Estos son:
- Base de Código: Una base de código con múltiples implementaciones.
- Dependencias: Expresar y aislar explícitamente las dependencias.
- Configuración: Almacenar la configuración en el entorno.
- Servicios de Apoyo: Tratar los servicios de apoyo como recursos adjuntos.
- Construir, Lanzar, Ejecutar: Separar estrictamente la etapa de construcción de la de ejecución.
- Procesos: Ejecutar la aplicación como uno o más procesos sin estado.
- Asignación de Puertos: Exportar servicios mediante la asignación de puertos.
- Concurrencia: Escalar mediante el modelo de procesos.
- Desechabilidad: Maximizar la robustez con inicio rápido y cierre ordenado.
- Paridad Dev/Prod: Mantener la paridad entre desarrollo y producción.
- Registros: Tratar los registros como transmisiones de eventos.
- Procesos de Administración: Ejecutar tareas de administración y mantenimiento como procesos únicos.
Capitulo 4 - Comunicación
REST
Representational State Transfer es un estilo arquitectónico para diseñar aplicaciones en red. REST utiliza un conjunto de operaciones predefinidas y se basa en protocolos sin estado, como HTTP. En una API RESTful, los recursos (por ejemplo, datos o servicios) se identifican mediante URL y se pueden acceder o manipular utilizando los métodos estándar de HTTP, como GET, POST, PUT y DELETE.
Comunicación Asincrónica
La comunicación asincrónica se refiere a la transmisión de datos en la cual el emisor y el receptor no necesitan estar sincronizados en el tiempo. En el contexto de microservicios, esto puede implicar que un servicio envía un mensaje a otro servicio y continúa con otras tareas sin esperar una respuesta inmediata.
3. Concepto de Queue (Cola)
Una cola es una estructura de datos que sigue el principio de First-In-First-Out (FIFO). En el contexto de la comunicación entre microservicios, las colas se utilizan para gestionar y procesar mensajes de manera eficiente, permitiendo la comunicación asincrónica entre diferentes servicios.
4. Mejores Prácticas para el Asincronismo con Django
Algunas mejores prácticas incluyen utilizar herramientas y bibliotecas como Celery para gestionar tareas asíncronas, asegurarse de que las tareas asíncronas sean idempotentes y gestionar adecuadamente los errores y reintentos.