O Que É Paralelismo em CI?
Paralelismo em CI significa fazer trabalho independente ao mesmo tempo em vários runners, de modo que um pipeline termine no tempo de seu ramo mais lento, e não no total.
Se um pipeline executa tudo um passo após o outro, sua duração é a soma de todos os passos. Quando os passos são independentes, executá-los simultaneamente transforma essa soma em um máximo - o ramo mais lento - que é como as equipes mantêm o feedback rápido à medida que as suítes de teste crescem.
O que pode rodar em paralelo
- Jobs independentes - lint, type-check e testes unitários sem ordenação entre eles.
- Combinações de matrix - cada célula de SO e versão de uma só vez.
- Shards de teste - uma fatia da suíte por runner.
Um pequeno exemplo
Dividir um pipeline de 12 minutos em três jobs independentes - lint (2 min), testes unitários (12 min), build (5 min) - que rodam juntos faz o todo levar cerca de 12 minutos (o mais lento) em vez de 19 (a soma).
Paralelismo vs limites de concorrência
Paralelismo é quanto você poderia executar de uma só vez. Limites de concorrência são quanto você tem permissão para executar - um teto de runners simultâneos vindo do seu plano ou das suas próprias configurações. A vazão real é o menor dos dois.
Quando deixa de ajudar
O paralelismo só ajuda com trabalho independente; um job que precisa esperar por um job anterior não pode se sobrepor a ele. E muitos jobs paralelos curtos pagam cada um um overhead fixo de inicialização, então dividir demais pode custar mais do que economiza.
Custo e capacidade de runners
Mais paralelismo significa mais runners rodando ao mesmo tempo. Na cobrança por minuto, o total de computação é semelhante, mas você precisa de capacidade suficiente de runners concorrentes - e é aí que uma plataforma de runners gerenciada que escala a frota sob demanda evita que os pipelines paralelos fiquem na fila.
Principais conclusões
- Paralelismo executa trabalho independente simultaneamente para reduzir o tempo de relógio.
- A vazão é limitada pelo seu teto de concorrência, não apenas pelo trabalho disponível.
- Apenas passos independentes se paralelizam; dividir demais adiciona overhead de inicialização.