Skip to main content
Version: Next

Rendimiento y Recursos

Optimización del rendimiento y recursos

Optimizar la plataforma

Antes de realizar cualquier ajuste, es recomendable realizar mediciones sobre el desempeño actual, ejerciendo cargas de trabajo en los diferentes procesos (subir un archivo de determinado tamaño, enviar a autorizar/firmar, incorporar a un expediente, previsualizar, etc).

Es fundamental lograr establecer los parámetros de operación para evitar asignar recursos excesivos y que esto provoque otros inconvenientes (falta de memoria ram, paginación a disco, saturación de CPU, entre otros).

Escalabilidad

SUDOCU es escalable en diferentes formas:

  • vertical, mediante el incremento de recursos disponibles (CPU, RAM, etc.) al servicio en particular
  • horizontal, mediante el despliegue de instancias adicionales del servicio en particular

Escalabilidad horizontal

Se refiere a desplegar múltiples instancias de un mismo servicio de un módulo. Por ej, escalar el servicio idp del módulo arai-usuarios. Normalmente no presenta límites en cuanto al número de nodos a escalar.

En Docker Swarm, se logra incrementando el número de contenedores para un servicio definido mediante una configuración del estilo:

    ...
deploy:
mode: replicated
replicas: 2
restart_policy:
condition: any
delay: 10s
max_attempts: 4
window: 120s

La entrada replicas permite establecer la cantidad de contenedores a generar.

El efecto se verá reflejado en el número de réplicas del servicio, o lo que es lo mismo la cantidad de contenedores en ejecución.

Atención

No todos los servicios funcionan en forma correcta al ser escalados horizontalmente.

ServicioEscalableCondiciones requeridasObservaciones
cache
api-serverConfig y carpetas temporales y de adjuntos compartidasCon api-worker
api-server2Config y carpetas temporales y de adjuntos compartidasCon api-worker
api-workerConfig y carpetas temporales y de adjuntos compartidasCon api-server
pdf

Escalado vertical de api-server Se recomienda que los valores de deploy mínimos de api-server sean los siguientes:

    ...
deploy:
resources:
limits:
cpus: '2'
memory: 4096M
reservations:
cpus: '0.1'
memory: 20M

Aumento de memoria heap en Node.js

Si el api-server, de acuerdo a la demanda, experimenta caídas repentinas del servicio, es necesario configurar la variable de entorno --max-old-space-size en el deploy del api-server, en la sección environment.

    ...
environment:
NODE_OPTIONS: "--max-old-space-size=8192"

Escalabilidad vertical

Se logra modificando la asignación de los recursos de CPU y RAM para un servicio en particular.

En Docker Swarm, se debe modificar los valores en las secciones similares a:

    ...
deploy:
resources:
limits:
cpus: '0.25'
memory: 128M
reservations:
cpus: '0.1'
memory: 20M

La entrada reservations especifica los valores "iniciales" de recursos asignados, mientras que la entrada limits permite configurar el valor máximo. Docker Swarm no asigna recursos pasado este valor.

Alta Disponibilidad

Muchas veces se requiere que un servicio esté disponible sin importar si sufre inconvenientes.

En parte, esto se logra:

  • mediante escalado horizontal, desplegando múltiples instancias del mismo servicio
  • disponiendo de diferentes nodos del cluster Docker Swarm, de modo que si uno cae otro pueda asumir el servicio
  • tolerancia a caídas de diferentes servicios críticos, sin cortes del servicio o pérdidas de datos

Actualmente lograr alta disponibilidad o HA puede requerir cambios en el código, principalmente en el manejo de sesiones de usuario distribuidas.