Home / Artigos / Aceleração de CI com o Cache Remoto do Turborepo: Uma Abordagem Inovadora
Negócios
Aceleração de CI com o Cache Remoto do Turborepo: Uma Abordagem Inovadora
Explorando como o cache remoto do Turborepo pode otimizar pipelines de integração contínua e acelerar o desenvolvimento.
Redação Agentrix • • 3 min de leitura
A velocidade e a eficiência são fundamentais no desenvolvimento web, especialmente quando se trata de pipelines de Integração Contínua (CI). Um pipeline lento pode se tornar um gargalo significativo, dificultando a capacidade de iterar rapidamente e receber feedback em tempo hábil. Essa realidade motivou a equipe da Mercari a explorar soluções que pudessem acelerar esses processos, levando à implementação do cache remoto do Turborepo.
O Turborepo se destaca como uma ferramenta poderosa para gerenciar monorepos, oferecendo paralelização eficiente de tarefas e capacidades de cache. No entanto, um desafio importante surgiu: o cache local do Turborepo não pode ser reutilizado entre diferentes fluxos de trabalho, uma vez que a maioria dos runners de CI, incluindo o GitHub Actions auto-hospedado, são efêmeros.
Essa limitação exigiu uma estratégia de cache adaptada às necessidades específicas da equipe.
A implementação do cache remoto do Turborepo permitiu que a equipe compartilhasse um único cache entre múltiplos pipelines de CI, evitando trabalhos redundantes e reduzindo significativamente os tempos de construção. Embora a Vercel ofereça essa funcionalidade como um recurso gerenciado, a equipe da Mercari não a utiliza, tornando essencial a implementação de um cache remoto auto-hospedado.
O projeto de cache remoto do Turborepo é composto por dois componentes principais: um servidor de cache remoto e um armazenamento para salvar os artefatos em cache. A equipe adotou uma das várias implementações comunitárias disponíveis para o servidor de cache, iniciando assim o processo de implementação.
Durante a avaliação da arquitetura do servidor de cache remoto, três abordagens principais foram consideradas. A primeira opção envolvia a implantação do servidor como um microserviço no Google Kubernetes Engine (GKE). Embora essa abordagem estivesse alinhada com as práticas padrão da empresa, ela apresentava desafios significativos relacionados à latência e custos de transferência de dados.
A separação geográfica entre o cluster de CI, localizado nos EUA, e o cluster GKE, hospedado no Japão, resultou em latência aumentada e custos de transferência de dados que foram considerados excessivos. Além disso, o uso de um único servidor de cache para todos os repositórios levantou preocupações sobre poluição de cache e gerenciamento de permissões.
A segunda abordagem, que envolvia a execução do servidor de cache no Cloud Run, era popular na comunidade. Essa solução minimizaria os custos de transferência de dados, mas ainda apresentava desafios relacionados à poluição de cache e à necessidade de múltiplas instâncias do Cloud Run para garantir a segurança e a separação dos artefatos entre repositórios.
Por fim, a equipe explorou a possibilidade de utilizar o GitHub Actions para reduzir a latência e aproveitar a identidade de carga de trabalho existente em seus runners auto-hospedados. Essa abordagem, embora não convencional, revelou-se a mais eficiente em termos de custo e desempenho, levando à criação de duas ações personalizadas do GitHub para fornecer capacidade de cache autoatendida.
Os testes iniciais do cache remoto do Turborepo foram realizados em um monorepo da equipe, onde as melhorias observadas foram modestas devido ao já rápido tempo de construção. No entanto, ao aplicar essa solução em um repositório maior e bem modularizado, a equipe conseguiu reduzir em aproximadamente 50% a duração das tarefas do Turbo e em 30% a duração total do trabalho.
Esses resultados, embora promissores, dependem fortemente do número de aplicações ou pacotes internos alterados em um determinado commit. Em alguns casos, um grande número de alterações pode resultar em desempenho mais lento, principalmente devido ao tempo de inicialização do servidor de cache remoto, que é de cerca de 10 segundos. Para resolver isso, a equipe está considerando desenvolver um servidor de cache remoto leve para minimizar a latência de inicialização.
Apesar de alguns desafios, o projeto do cache remoto do Turborepo resultou em uma ferramenta autoatendida que pode reduzir significativamente o tempo de CI, permitindo que as equipes se movam mais rapidamente. A modularização eficaz continua sendo crucial para otimizar as melhorias de velocidade.
A experiência adquirida durante este projeto destacou a importância da colaboração entre as equipes de produto e plataforma. A construção de uma solução de cache remoto que agora está disponível como uma ferramenta autoatendida foi um passo importante, mas a interação contínua com as equipes de produto foi fundamental para iterar com base no feedback real dos usuários.
Em conclusão, a implementação do cache remoto do Turborepo não apenas melhorou a eficiência dos pipelines de CI, mas também proporcionou uma valiosa lição sobre a importância da colaboração e da adaptação às necessidades específicas de cada equipe. À medida que as empresas buscam maneiras de acelerar seus processos de desenvolvimento, soluções como essa podem se tornar essenciais para manter a competitividade no mercado atual.
O projeto do cache remoto do Turborepo é um exemplo claro de como a inovação e a adaptação podem levar a melhorias significativas na eficiência operacional, refletindo uma tendência crescente no setor de tecnologia em busca de soluções que promovam agilidade e eficiência.