O Que É Fan-Out / Fan-In em Pipelines de CI?
Fan-out divide um estágio em muitos jobs paralelos; fan-in espera todos eles e junta os resultados. Juntos, eles permitem que o CI vá para o largo em busca de velocidade e depois estreite para um único veredito.
Fan-out/fan-in é o formato fundamental de um pipeline paralelo. É como você reduz o tempo de relógio distribuindo o trabalho entre jobs, terminando ainda assim com um único resultado agregado que serve de gate.
Fan-out
Um único ponto do pipeline se ramifica em muitos jobs independentes que rodam concorrentemente - dividindo uma suíte de testes em shards, buildando vários targets ou executando uma matrix. Cada ramo é isolado e progride em seu próprio runner.
Fan-in
Depois do trabalho paralelo, um único job depende de *todos* os jobs do fan-out e roda apenas quando eles terminam. Ele agrega as saídas - mesclando relatórios de teste, combinando coverage ou simplesmente atuando como o gate que só fica verde se todo ramo passou.
jobs:
test:
strategy: { matrix: { shard: [1, 2, 3, 4] } }
report:
needs: test # fan-in: waits for all shardsPor que usar
- Velocidade: N shards paralelos terminam em cerca de 1/N do tempo serial.
- Um único gate de fan-in dá um pass/fail claro para todo o estágio.
- A agregação (coverage, relatórios) acontece em um só lugar.
Armadilhas
Fan-out multiplica os minutos faturáveis e pode inundar um pool de runners, causando enfileiramento. O job de fan-in é um ponto de sincronização - ele só é tão rápido quanto o ramo mais lento, então uma divisão desbalanceada (um shard muito mais pesado que os demais) desperdiça o paralelismo. Balanceie os shards.
Principais conclusões
- Fan-out executa muitos jobs independentes em paralelo; fan-in junta seus resultados.
- Ele troca mais minutos faturáveis por menos tempo de relógio.
- O job de fan-in é um gate e um ponto de sincronização - só tão rápido quanto o ramo mais lento.
- Balanceie os shards para que um ramo pesado não anule o paralelismo.