Zaroz
Unidades que controla tu código

El contrato de unidad v1

El contrato es la superficie estable entre la plataforma y tu proceso. Se publica como JSON Schemas (borrador 2020-12) y se versiona con un entero mayor.

Entorno

VariableValor
ZAROZ_CONTRACT_VERSION1
ZAROZ_DIR/zaroz
ZAROZ_UNIT_ID, ZAROZ_UNIT_KEYel id y la clave de la unidad
ZAROZ_WORKLOADel slug del Workload
ZAROZ_PRIVATE_NAME<clave>.<workload>, cómo llegan a esta unidad sola otros Workloads del proyecto
ZAROZ_PROJECT_ID, ZAROZ_REGION, ZAROZ_SERVICE_INSTANCE_IDdónde corre
MEMORY_LIMIT_MIBel límite de memoria de la unidad
ZAROZ_API_URLsolo cuando el Workload tiene un principal de servicio

Los valores por unidad se fijan al crear el pod, porque la clave de una unidad nunca cambia. Solo los pods que llevan el agente o un principal reciben las variables nuevas: un Workload que no usa estas funciones se ejecuta igual que antes.

Archivos en /zaroz

RutaEsquemaNotas
contract.jsoncontract.schema.json{version: 1, agent_version}
unit.jsonunit.schema.jsonidentidad; labels se actualiza en vivo
user-data.jsonuser-data.schema.jsonel valor JSON o null
allocation.jsonallocation.schema.jsonnull o {id, allocated_at, generation}
state.jsonstate.schema.json{draining: false} o {draining: true, reason}
signals/solo escritura: ready, accepting, idle, busy, shutdown
signal.socksignal-response.schema.json, accepting-request.schema.json, error.schema.jsonHTTP/1.1 sobre un socket Unix
credentials/tokensolo con un principal; rotado, léelo en cada petición

Cada archivo se escribe de forma atómica. Mira Señales para saber cómo usarlos.

Eventos

El sobre de GET .../units/events y de las entregas de webhooks es event.schema.json. Mira Eventos. data está tipado por tipo de evento.

La regla de versionado

  • Dentro de una versión mayor los cambios son solo aditivos: campos opcionales nuevos, archivos nuevos, señales nuevas, tipos de evento nuevos. Quien consume debe ignorar lo que no conoce.
  • Quitar o renombrar un campo, o cambiar un tipo o un significado, es una versión mayor nueva, que se elige por Workload con contract_version en la política (por defecto, la más reciente).
  • La versión mayor anterior se sigue sirviendo al menos 12 meses después de que salga la siguiente.
  • El agente incluye los esquemas de cada versión mayor admitida y valida contra ellos cada archivo que escribe y cada evento. El emisor de eventos del kernel se prueba con los mismos archivos.

Garantías

Las garantías del ciclo de vida (ready significa ready, allocate es atómico, drenar antes de matar, detenida no cuesta nada, rechazo rápido, fuera del balanceo en aproximadamente un segundo, los eventos nunca se saltan) están en Unidades que controla tu código. Cada una la comprueba la suite de conformidad abierta.

Last modified on