O Que É o Critical Path de um Pipeline? A Cadeia Mais Longa
O critical path de um pipeline é a cadeia mais longa de jobs dependentes; ele define o piso de quão rápido o pipeline inteiro pode terminar.
Não importa quantas máquinas você jogue em um pipeline, ele não pode terminar mais rápido do que sua cadeia de dependências mais longa. Essa cadeia é o critical path. Cada job nele deve esperar pelo anterior, então suas durações se somam. Encontre o critical path e você terá encontrado a única coisa limitando a velocidade do seu pipeline.
Por que a cadeia mais longa manda
Jobs fora do critical path executam em paralelo e terminam cedo; eles não estendem o tempo total. Jobs no critical path executam em sequência, então suas durações se somam. O pipeline só termina quando o último job dessa cadeia conclui.
Encontrando o critical path
Trace o grafo de dependências do início ao fim e encontre o caminho cuja duração total de jobs é a maior. Esse caminho, não qualquer job lento isolado, determina o tempo de execução mínimo.
Um exemplo rápido
Se build (5m) -> test (10m) -> deploy (3m) é a cadeia mais longa, o pipeline leva pelo menos 18 minutos mesmo se dez outros jobs executarem em paralelo ao lado. Acelerar um job paralelo não muda nada; acelerar o test muda tudo.
Encurtando o critical path
- Divida um job crítico lento em shards paralelos (fan-out).
- Faça cache do trabalho para que um step crítico seja pulado quando inalterado.
- Remova dependências desnecessárias que forçam a serialização.
- Mova trabalho não essencial para fora do critical path.
O critical path e os runners
O tempo de fila em um job crítico estende todo o critical path, então um job esperando por um runner é tão custoso quanto um job lento. Runners gerenciados (Latchkey) reduzem o tempo de fila em jobs críticos mantendo capacidade aquecida pronta, para que o critical path seja tempo de execução, não espera.
Principais conclusões
- O critical path é a cadeia mais longa de jobs dependentes em um pipeline.
- Ele define o tempo de execução mínimo; jobs fora do caminho não o estendem.
- Acelere, faça sharding ou cache do critical path para tornar o pipeline mais rápido.