Libro: Designing Microservices with Django

By rogerarjona Nov. 4, 2023, 4:53 a.m. Django Microservices Monolith

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:

  1. Base de Código: Una base de código con múltiples implementaciones.
  2. Dependencias: Expresar y aislar explícitamente las dependencias.
  3. Configuración: Almacenar la configuración en el entorno.
  4. Servicios de Apoyo: Tratar los servicios de apoyo como recursos adjuntos.
  5. Construir, Lanzar, Ejecutar: Separar estrictamente la etapa de construcción de la de ejecución.
  6. Procesos: Ejecutar la aplicación como uno o más procesos sin estado.
  7. Asignación de Puertos: Exportar servicios mediante la asignación de puertos.
  8. Concurrencia: Escalar mediante el modelo de procesos.
  9. Desechabilidad: Maximizar la robustez con inicio rápido y cierre ordenado.
  10. Paridad Dev/Prod: Mantener la paridad entre desarrollo y producción.
  11. Registros: Tratar los registros como transmisiones de eventos.
  12. 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.