Este proyecto es 100% experimental. No intente instalar el controlador en ningún entorno de producción o compartido.
El objetivo del controlador temporal de trabajadores es facilitar la ejecución de trabajadores en Kubernetes y al mismo tiempo aprovechar el control de versiones de trabajadores.
Las restricciones deterministas de Temporal pueden causar dolores de cabeza al implementar o revertir cambios en el código del flujo de trabajo.
El enfoque tradicional del determinismo del flujo de trabajo es identificar nuevos comportamientos detrás de las comprobaciones de versiones. Con el tiempo, estas comprobaciones pueden convertirse en una fuente de deuda técnica, ya que eliminarlas de forma segura de una base de código es un proceso cuidadoso que a menudo implica consultar todos los flujos de trabajo en ejecución.
Worker Versioning es un enfoque alternativo que permite que las ejecuciones del flujo de trabajo sean estrictas para los trabajadores que ejecutan una revisión de código específica. Esto permite que un autor de flujo de trabajo omita las comprobaciones de versiones en el código y, en su lugar, ejecute varias versiones de su trabajador en paralelo, confiando en Temporal para mantener las ejecuciones de flujo de trabajo fijadas a los trabajadores que ejecutan código compatible.
Este proyecto tiene como objetivo proporcionar automatización que simplifique la contabilidad en torno al seguimiento de qué versiones de trabajadores aún tienen flujos de trabajo activos, la gestión del ciclo de vida de las implementaciones de trabajadores versionadas y la llamada a API temporales para actualizar la versión predeterminada después de una implementación.
Registro de nuevas versiones de trabajadores.
Creación de recursos de implementación de trabajadores versionados.
Eliminación de implementaciones de trabajadores inalcanzables
Implementaciones manuales, azules/verdes y progresivas de nuevas versiones para trabajadores
Escalado automático de implementaciones de trabajadores
Transferencia automatizada a versiones de trabajadores compatibles
Análisis canario de nuevas versiones de trabajadores.
Cancelación opcional después del tiempo de espera para flujos de trabajo en versiones anteriores
Pasar la señal ContinueAsNew
a flujos de trabajo en versiones anteriores
Para ser compatible con este controlador, los trabajadores deben configurarse utilizando estas variables de entorno estándar:
WORKER_BUILD_ID
TEMPORAL_HOST_PORT
TEMPORAL_TASK_QUEUE
TEMPORAL_NAMESPACE
Cada uno de estos se configurará automáticamente en el entorno de la plantilla del pod y no es necesario especificarlos manualmente fuera de la especificación TemporalWorker
.
Cada recurso TemporalWorker
gestiona uno o más recursos Deployment
estándar. Cada implementación administra pods que a su vez sondean Temporal en busca de tareas ancladas a sus respectivas versiones.
diagrama de flujo TD
wd[Trabajador temporal]
subgrafo "Versión de trabajador más reciente/predeterminada"
d5["Implementación v5"]
rs5["ReplicaSet v5"]
p5a["Pod v5-a"]
p5b["Pod v5-b"]
p5c["Pod v5-c"]
d5 --> rs5
rs5 --> p5a
rs5 --> p5b
rs5 --> p5c
fin
subgrafo "Versiones de trabajador obsoletas"
d1["Implementación v1"]
rs1["ReplicaSet v1"]
p1a["Pod v1-a"]
p1b["Pod v1-b"]
d1 --> rs1
rs1 --> p1a
rs1 --> p1b
dN["Implementación..."]
fin
wd --> d1
wd --> dN
wd --> d5
p1a-. "versión de encuesta v1" .-> servidor
p1b-. "versión de encuesta v1" .-> servidor
p5a-. "versión de encuesta v5" .-> servidor
p5b-. "versión de encuesta v5" .-> servidor
p5c-. "versión de encuesta v5" .-> servidor
servidor["Servidor temporal"]
CargandoCuando se implementa una nueva versión de trabajador, el controlador de trabajador automatiza el registro de una nueva versión de trabajador predeterminada en Temporal.
A medida que los flujos de trabajo más antiguos terminan de ejecutarse y las versiones de trabajo obsoletas ya no son necesarias, el controlador de trabajo también libera recursos al eliminar implementaciones antiguas.
diagrama de secuencia
numeración automática
participante Dev como desarrollador
K8 participantes como Kubernetes
participante Ctrl como WorkerController
participante T como Temporal
Dev->>K8s: Crear TemporalWorker "foo" (v1)
K8s-->>Ctl: Notificar a TemporalWorker "foo" creado
Ctl->>K8s: Crear implementación "foo-v1"
Ctl->>T: Registrar v1 como nuevo valor predeterminado
Dev->>K8s: Actualizar TemporalWorker "foo" (v2)
K8s-->>Ctl: Notificar a TemporalWorker "foo" actualizado
Ctl->>K8s: Crear implementación "foo-v2"
Ctl->>T: Registrar v2 como nuevo valor predeterminado
Ctl->>Ctl: ejecutar la detección de cambios importantes entre v1 y v2
Ctl->>T: Si las versiones son compatibles, combine v1 y v2.
API temporal de encuesta en bucle
Ctl-->>T: Espere a que se cierren las ejecuciones del flujo de trabajo v1
fin
Ctl->>K8s: Eliminar implementación "foo-v1"
CargandoEste proyecto se encuentra en etapas muy iniciales; como tal, aún no se solicitan contribuciones de código externo.
¡Los informes de errores y las solicitudes de funciones son bienvenidos! Por favor presente un problema.
También puede comunicarse con @jlegrone
en Temporal Slack si tiene preguntas, sugerencias o está interesado en hacer otras contribuciones.