Este projeto é 100% experimental. Não tente instalar o controlador em nenhum ambiente de produção e/ou compartilhado.
O objetivo do Temporal Worker Controller é facilitar a execução de trabalhadores no Kubernetes e, ao mesmo tempo, aproveitar o controle de versão do trabalhador.
As restrições determinísticas temporais podem causar dores de cabeça ao implementar ou reverter alterações no código do fluxo de trabalho.
A abordagem tradicional ao determinismo do fluxo de trabalho é bloquear novos comportamentos por trás das verificações de versão. Com o tempo, essas verificações podem se tornar uma fonte de dívida técnica, pois removê-las com segurança de uma base de código é um processo cuidadoso que geralmente envolve a consulta de todos os fluxos de trabalho em execução.
O controle de versão do trabalhador é uma abordagem alternativa que permite que as execuções do fluxo de trabalho sejam fixas aos trabalhadores que executam uma revisão de código específica. Isso permite que um autor de fluxo de trabalho omita verificações de versão no código e, em vez disso, execute várias versões de seu trabalhador em paralelo, contando com Temporal para manter as execuções de fluxo de trabalho fixadas em trabalhadores que executam código compatível.
Este projeto tem como objetivo fornecer automação que simplifique a contabilidade em torno do rastreamento de quais versões de trabalho ainda têm fluxos de trabalho ativos, gerenciando o ciclo de vida de implantações de trabalho com versão e chamando APIs temporais para atualizar a versão padrão após uma implantação.
Registro de novas versões de trabalho
Criação de recursos de implantação de trabalhador com versão
Exclusão de implantações de trabalho inacessíveis
Lançamentos manuais, azuis/verdes e progressivos de novas versões de trabalho
Dimensionamento automático de implantações de trabalhadores
Rollover automatizado para versões de trabalho compatíveis
Análise canário de novas versões de trabalhadores
Cancelamento opcional após tempo limite para fluxos de trabalho em versões antigas
Passando o sinal ContinueAsNew
para fluxos de trabalho em versões antigas
Para serem compatíveis com este controlador, os trabalhadores precisam ser configurados usando estas variáveis de ambiente padrão:
WORKER_BUILD_ID
TEMPORAL_HOST_PORT
TEMPORAL_TASK_QUEUE
TEMPORAL_NAMESPACE
Cada um deles será definido automaticamente no ambiente do modelo de pod e não precisa ser especificado manualmente fora da especificação TemporalWorker
.
Cada recurso TemporalWorker
gerencia um ou mais recursos Deployment
padrão. Cada implantação gerencia pods que, por sua vez, pesquisam o Temporal em busca de tarefas fixadas em suas respectivas versões.
fluxograma TD
wd[TrabalhadorTemporal]
subgrafo "Versão do trabalhador mais recente/padrão"
d5["Implantação v5"]
rs5["ReplicaSet v5"]
p5a["Pod v5-a"]
p5b["Pod v5-b"]
p5c["Pod v5-c"]
d5 --> rs5
rs5 --> p5a
rs5 --> p5b
rs5 --> p5c
fim
subgráfico "Versões de trabalho obsoletas"
d1["Implantação v1"]
rs1["ReplicaSet v1"]
p1a["Pod v1-a"]
p1b["Pod v1-b"]
d1 -> rs1
rs1 --> p1a
rs1 --> p1b
dN["Implantação..."]
fim
wd --> d1
wd --> dN
wd --> d5
p1a-. "versão da enquete v1" .-> servidor
p1b-. "versão da enquete v1" .-> servidor
p5a-. "sondagem versão v5" .-> servidor
p5b-. "sondagem versão v5" .-> servidor
p5c-. "sondagem versão v5" .-> servidor
servidor["Servidor Temporal"]
CarregandoQuando uma nova versão do trabalhador é implementada, o controlador do trabalhador automatiza o registro de uma nova versão do trabalhador padrão no Temporal.
À medida que os fluxos de trabalho mais antigos terminam de ser executados e as versões de trabalho obsoletas não são mais necessárias, o controlador de trabalho também libera recursos excluindo implantações antigas.
diagrama de sequência
numeração automática
participante Dev como desenvolvedor
participante K8s como Kubernetes
participante Ctl como WorkerController
participante T como Temporal
Dev->>K8s: Crie TemporalWorker "foo" (v1)
K8s ->>Ctl: Notificar TemporalWorker "foo" criado
Ctl->>K8s: Criar implantação "foo-v1"
Ctl->>T: Registra v1 como novo padrão
Dev->>K8s: Atualizar TemporalWorker "foo" (v2)
K8s ->>Ctl: Notificar TemporalWorker "foo" atualizado
Ctl->>K8s: Criar implantação "foo-v2"
Ctl->>T: Registra v2 como novo padrão
Ctl->>Ctl: Executa a detecção de alterações significativas entre v1 e v2
Ctl->>T: Se as versões forem compatíveis, mescle v1 e v2.
API temporal de pesquisa em loop
Ctl-->>T: Aguarde o fechamento das execuções do fluxo de trabalho v1
fim
Ctl->>K8s: Excluir implantação "foo-v1"
CarregandoEste projeto está em fase muito inicial; como tal, contribuições de código externo ainda não estão sendo solicitadas.
Relatórios de bugs e solicitações de recursos são bem-vindos! Registre um problema.
Você também pode entrar em contato com @jlegrone
no Temporal Slack se tiver dúvidas, sugestões ou estiver interessado em fazer outras contribuições.