Sobes.tech
Middle

¿Qué desventajas tienen las aplicaciones con estado?

sobes.tech AI

Respuesta de la IA

  • Complejidad de escalado: Escalar se vuelve una tarea no trivial, ya que requiere mantener y sincronizar el estado entre las instancias de la aplicación.
  • Complejidad de despliegue y gestión: Desplegar y actualizar tales aplicaciones requiere estrategias pensadas para la migración de datos y estados, para evitar pérdidas.
  • Mayor resistencia a fallos: Garantizar alta disponibilidad y resistencia a fallos requiere mecanismos adicionales de replicación y respaldo de estados, lo que aumenta la complejidad del sistema.
  • Dificultades en el escalado horizontal: Añadir nuevas instancias al clúster requiere transferir datos o sincronizarlos, lo que puede causar retrasos y carga en el sistema.
  • Problemas con el balanceo de carga: El balanceo de carga efectivo se complica por la necesidad de dirigir las solicitudes a la instancia que posee el estado necesario.
  • Complejidad en las pruebas: Probar tales aplicaciones requiere mantener y restaurar el estado para reproducir escenarios.

Ejemplo:

# Ejemplo de despliegue de StatefulSet en Kubernetes
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: my-stateful-app
spec:
  serviceName: "my-stateful-service"
  replicas: 3 # Difícil de escalar sin una estrategia pensada
  selector:
    matchLabels:
      app: my-stateful-app
  template:
    metadata:
      labels:
        app: my-stateful-app
  volumeClaimTemplates: # Requiere mantener el estado en volúmenes persistentes
  - metadata:
      name: data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

Tabla comparativa de aplicaciones Stateful y Stateless:

Característica Aplicaciones Stateful Aplicaciones Stateless
Estado Mantienen el estado entre solicitudes/sesiones No mantienen el estado entre solicitudes/sesiones
Escalado Complejo, requiere sincronización de estados Sencillo, añadir nuevas instancias
Resistencia a fallos Requiere replicación y respaldo de estados Más fácil de lograr al no tener dependencias
Despliegue Complejo, requiere migración de datos/estados Sencillo, las instancias son intercambiables
Balanceo Complicado por la necesidad de enrutar según estado Sencillo, cualquier solicitud puede ser atendida por cualquier nodo