DesarrolladoresEscalado

Escalado

Una app puede ejecutarse como varias copias en varios servidores. Puedes hacerlo a mano en servidores que ya tienes (varios servidores), o dejar que Hostwolf añada y quite servidores según cambie la carga de CPU (autoescalado). En ambos casos, no guardes estado en el disco propio de la app: pon los datos en una base de datos gestionada, a la que llegan todas las copias.

Varios servidores#

Añade otro de tus servidores de aplicaciones a una app y despliega. Hostwolf hace el build de la imagen una vez, inicia una copia en cada servidor, y el servidor principal (primario) de la app reparte las peticiones entre todas las copias en buen estado. Si una copia se detiene, las peticiones van a las demás.

# The other server's destination (a Docker network on that server)
DEST=$(hw $API/servers/$OTHER_SERVER/destinations | jq -r '.[0].uuid')

hw -X POST $API/applications/$APP/destinations -d "{\"destination_uuid\": \"$DEST\"}"
hw -X POST $API/applications/$APP/start

hw $API/applications/$APP/destinations | jq   # primary + copies

$OTHER_SERVER es un server_uuid de GET /hostwolf/servers. Para dejar de ejecutar una copia en un servidor:

hw -X DELETE $API/applications/$APP/destinations/$DEST
  • Cada servidor debe ser uno de tus servidores de aplicaciones de Hostwolf. El principal no se puede quitar; es donde se hace el build de la app.
  • Durante un despliegue cada servidor reinicia su copia, y mientras tanto las peticiones van a las copias que están activas.
  • Los volúmenes son por servidor: cada copia tiene el suyo. Los datos compartidos van en una base de datos gestionada.
  • En el SDK: applications.addServer(appUuid, serverUuid); en MCP: add_app_server.

Autoescalado#

El autoescalado añade un servidor de aplicaciones cuando la CPU media de la app se mantiene alta, y lo quita cuando baja la carga. Los servidores nuevos se colocan en la ciudad que envía más tráfico, o en las ciudades que permitas. Cada servidor añadido tiene el mismo tamaño que el servidor principal de la app.

hw $API/applications/$APP/autoscaling | jq
{
  "configured": false,
  "blocker": null,
  "policy": {
    "enabled": false, "min_copies": 1, "max_copies": 2, "monthly_cap_usd": 50,
    "allowed_cities": [], "scale_up_cpu": 60, "scale_up_minutes": 2,
    "scale_down_cpu": 15, "scale_down_minutes": 5, "cooldown_minutes": 3
  },
  "cities": [{"id": "vultr:fra", "city": "Frankfurt", "country": "DE", "monthly_price": 18.79, "hourly_price": 0.0257}],
  "status": null
}

Actívalo con PUT. Los campos que omitas conservan su valor:

hw -X PUT $API/applications/$APP/autoscaling -d '{"enabled": true, "max_copies": 4, "monthly_cap_usd": 40}'
CampoSignificadoPor defecto
enabledActivado o desactivadofalse
min_copies / max_copiesCopias que siempre se ejecutan, y el máximo que puede haber (1-100)1 / 2
monthly_cap_usdEl autoescalado deja de añadir servidores cuando las horas autoescaladas de este mes llegan a esta cantidad, y los administradores del equipo reciben un email50
allowed_citiesIds de región donde se pueden añadir servidores; vacío significa cerca de tus visitantes[]
scale_up_cpu / scale_up_minutesAñade un servidor cuando la CPU supere este porcentaje durante este tiempo60 / 2
scale_down_cpu / scale_down_minutesQuita uno cuando la CPU esté por debajo de este porcentaje durante este tiempo15 / 5
cooldown_minutesTiempo mínimo entre dos cambios3

cities, en la misma respuesta, lista los ids de región que acepta allowed_cities para esta app, de la más barata a la más cara, con el precio por hora de un servidor allí. GET /hostwolf/regions?size=s lista todas las ciudades con el precio de cada tamaño; autoscaling: true marca las ciudades que puede usar el autoescalado.

Facturación: los servidores autoescalados cuestan el precio normal por hora (precio mensual ÷ 730), añadido a tu próxima factura de servidores. Cuando las horas autoescaladas de este mes llegan a monthly_cap_usd, no se añaden más servidores y los administradores del equipo reciben un email. status.spend_usd muestra el gasto de este mes hasta ahora, y status.copies lista las copias en ejecución con su ciudad y CPU.

Cuando no se puede activar, blocker (y la respuesta 409 a PUT) dice por qué:

  • el servidor principal de la app no es uno de tus servidores de aplicaciones de Hostwolf, o no está en marcha;
  • la app no tiene ningún puerto definido (ports_exposes);
  • tu equipo no tiene una suscripción de servidor activa a la que sumar las horas.

Un servidor nuevo tarda unos cuatro minutos en incorporarse, así que define min_copies antes de un lanzamiento que tengas previsto.

Despliegues por push con varias copias#

Los despliegues por push y los despliegues desde CI funcionan igual con varias copias: un solo build y luego se actualizan todas las copias, incluidos los servidores que añadió el autoescalado.

¿Atascado, o te falta un endpoint? Escríbenos en app.hostwolf.net/contact o a [email protected].