Fundaia

Entrar Empezar

Dormir y despertar

Un servicio que lleva un rato sin recibir peticiones se para, y la siguiente petición lo vuelve a levantar. Así la memoria de la máquina queda para lo que se está usando, y un servicio dormido no consume memoria en la factura.

Cómo funciona

  • La pasarela cuenta cada petición que llega a un servicio publicado. Las que contesta ella misma sin dejarlas pasar (una dirección fuera de la lista, el límite de peticiones, la página de mantenimiento o la petición de contraseña) no cuentan: un bot llamando a la puerta no impide que el servicio se duerma.
  • Cada minuto, lo que lleva más de su ventana sin tráfico se duerme. La ventana por defecto es de ocho horas.
  • Cuando llega una petición para un servicio dormido, la pasarela la retiene: arranca el contenedor, espera a que pase la comprobación de salud y entonces la reenvía. Quien la hizo ve una respuesta lenta, no un error. Varias peticiones a la vez despiertan el servicio una sola vez.
  • Un WebSocket cuenta como tráfico: abrir la conexión despierta al servicio y, mientras la conexión mueve datos, no se duerme debajo de ella. Lo mismo una respuesta larga en streaming o una descarga: mientras fluye, cuenta como uso.
  • Nunca se duerme con una petición a medias. Si al vencer la ventana el servicio tiene una petición pública en curso, o un vecino le está pidiendo algo por la red privada, el barrido lo deja para el minuto siguiente.

La primera petición espera al arranque completo: segundos para un servicio Node, bastante más para uno Java.

Qué no se duerme, y qué no despierta

  • Los componentes del catálogo (bases de datos, buckets, agentes…) se crean con el sueño desactivado: una conexión TCP a una base de datos no pasa por la pasarela y no podría despertarla.
  • El tráfico interno no despierta a nadie. Solo la pasarela, con tráfico público, despierta un servicio. Si un servicio privado recibe peticiones de sus vecinos, desactívale el sueño.
  • Despertar arranca el mismo contenedor de antes, con sus variables de entonces. Un cambio de variables se aplica en el siguiente despliegue.

Ajustarlo

En Ajustes → Recursos, o desde la terminal:

fundaia settings tienda api --sleep-after 60    # dormir tras una hora sin tráfico
fundaia settings tienda api --sleep false       # no dormir nunca
fundaia stop tienda api                         # dormirlo ahora

stop hace ahora lo mismo que haría el barrido: el servicio queda Parado y la siguiente petición lo levanta. Para que deje de responder del todo, hazlo privado.

Un horario de encendido

Un servicio que solo se usa en horas de oficina no tiene por qué estar encendido de noche. En Ajustes → Horario eliges las ventanas en las que tiene que estar encendido: los días con las letras L M X J V S D y las horas de cada tramo, y debajo lo lees en palabras («De lunes a viernes, de 08:00 a 20:00»). Se pueden poner varios tramos.

  • Dentro del horario no se duerme, aunque pase su ventana de inactividad.
  • Fuera del horario se duerme en cuanto lleva quince minutos sin peticiones y no tiene nada en vuelo, con la misma regla que el barrido de inactividad. Queda en el historial como hecho por Fundaia.
  • Al empezar el horario se enciende solo, para que la primera visita del día no espere el arranque. Se puede desactivar (Encenderlo al empezar el horario); un servicio sin dominio público se enciende siempre, porque ninguna visita lo despertaría.
  • Fuera de horario una petición lo sigue despertando, igual que al dormir por inactividad: un horario ahorra memoria, no cierra la puerta. Para que no responda, hazlo privado o ponlo en mantenimiento.
  • Las horas son de la zona horaria que elijas, Europe/Madrid si no dices otra, y siguen el cambio de hora. Un tramo que acaba antes de empezar (V 22:00-02:00) termina al día siguiente.
  • Los componentes del catálogo no tienen horario, por lo mismo que no duermen: sus clientes llegan por la red interna y no los despertarían.
fundaia settings tienda api --awake "L-V 08:00-20:00"
fundaia settings tienda api --awake "L-V 08:00-14:00 16:00-20:00; S 10:00-14:00"
fundaia settings tienda api --awake "todos 09:00-18:00" --awake-tz America/Mexico_City
fundaia settings tienda api --awake-prewarm false   # que no se encienda solo al empezar
fundaia settings tienda api --awake off             # sin horario

Para un agente, update_service_settings con awakeSchedule, awakeTimezone y awakePrewarm. Copiar el servicio a otro entorno copia también su horario.