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.
No todos los servicios funcionan en forma correcta al ser escalados horizontalmente.
| Servicio | Escalable | Condiciones requeridas | Observaciones |
|---|---|---|---|
| cache | Sí | ||
| api-server | Sí | Config y carpetas temporales y de adjuntos compartidas | Con api-worker |
| api-server2 | Sí | Config y carpetas temporales y de adjuntos compartidas | Con api-worker |
| api-worker | Sí | Config y carpetas temporales y de adjuntos compartidas | Con api-server |
| Sí |
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.