Construções/testes rápidos, confiáveis e econômicos em grande escala com o EngFlow Remote Execution na AWS

Como estava esse conteúdo?

Mesmo que as organizações de engenharia modernas adotem arquiteturas de microsserviços e decomponham suas aplicações monolíticas, bases de código grandes e complexas são comuns. Mais código leva a ciclos de compilação/teste mais longos, o que degrada a produtividade do desenvolvedor e aumenta os custos. Além disso, orçamentos de computação de integração contínua (CI) finitos causam filas de execução, o que prejudica ainda mais a produtividade da engenharia.

O EngFlow ajuda as organizações modernas a melhorar seus ciclos de construção e teste para maximizar a produtividade das equipes de desenvolvimento de software por meio da execução remota e armazenamento em cache.

Para fornecer uma solução eficiente, confiável e econômica para seus clientes, a EngFlow seguiu as práticas recomendadas do AWS Well-Architected Framework. Nesta publicação, vamos nos concentrar nas práticas que ajudaram a melhorar a relação preço-performance e melhorar a disponibilidade.

Arquitetura do serviço de execução remota EngFlow

Os clientes da EngFlow interagem com o serviço de Execução Remota por meio de um canal seguro e privado, protegido em várias camadas usando diferentes tecnologias de rede, como Network Load Balancer e endpoints, sub-redes e grupos de segurança de nuvem privada virtual (VPC) (consulte a Figura 1).

Os agendadores, que são executados em instâncias do Amazon Elastic Compute Cloud (Amazon EC2) com volumes do Amazon Elastic Block Store (Amazon EBS), dividem cada solicitação de compilação/teste em partes independentes e colocam as tarefas individuais de compilação/teste nas instâncias de trabalho existentes, que atendem aos requisitos de computação/memória do trabalho de compilação/teste. O AWS Auto Scaling é usado para fornecer recursos de autorrecuperação mantendo um número fixo de instâncias do agendador em execução. As instâncias do agendador do Amazon EC2 que falharam são substituídas automaticamente sem a necessidade de intervenção humana.

O software de execução remota da EngFlow distribui ações de compilação/teste em centenas ou até milhares de instâncias do Worker, todas executadas em instâncias do EC2 com volumes montados do EBS. Aqui, a EngFlow usa o AWS Auto Scaling para aumentar e reduzir a capacidade computacional necessária com base na demanda, minimizando o desperdício e maximizando a utilização. Para atender às diferentes necessidades dos clientes e oferecer uma solução econômica, as instâncias Worker podem ser executadas em instâncias sob demanda ou spot do EC2. O EngFlow oferece a capacidade de recorrer às instâncias sob demanda para maior confiabilidade.

A execução remota é combinada com a solução de cache remoto da EngFlow para evitar a duplicação de trabalho. Ao armazenar em cache todos os artefatos de compilação/teste no armazenamento local realizado por uma organização, o EngFlow permite que as equipes baixem artefatos anteriores em vez de reexecutarem a compilação/teste sozinhas. Isso reduz o tempo e o custo por compilação/teste. Conforme as instâncias na nuvem vêm e vão, os artefatos de compilação/teste são sincronizados de forma durável e econômica com o Amazon Simple Storage Service (Amazon S3) para acesso persistente.

Para dar suporte às operações quando implantadas em uma conta de cliente, a solução de execução remota da EngFlow usa serviços padrão da AWS, como logs, métricas e alarmes do Amazon CloudWatch.

Vamos analisar mais detalhadamente como o EngFlow permite compilações rápidas, confiáveis e econômicas na AWS e como eles identificaram áreas para melhorar sua solução de execução remota ao trabalhar na análise do Well-Architected.

Performance

Muitos clientes da EngFlow consideram a velocidade de compilação/teste como uma das principais propostas de valor da EngFlow. Isso se traduz em maior produtividade do desenvolvedor, menor tempo de comercialização e capacidade de realizar mais experimentos ao mesmo tempo, só para citar alguns. Executar uma compilação/teste de CI na nuvem e usar nós de computação distribuídos da última e mais poderosa geração de CPU em vez de uma estação de trabalho local ajudou clientes como a Blue River Technology a obter um ganho de performance nove vezes maior em sua compilação/teste de CI.

Os engenheiros da EngFlow ajudam seus clientes a selecionar a instância EC2 com melhor performance e economia que melhor atenda aos seus requisitos exclusivos, como os processadores AWS Graviton3 de última geração. Eles usam os volumes gp3 do EBS mais recentes, que fornecem a mais recente geração de volumes SSD de uso geral aos clientes para garantir que as construções/testes sejam os mais rápidas possível. Isso foi possível analisando a workload exclusiva do cliente, aproveitando as métricas padrão e personalizadas do CloudWatch.

Além disso, a capacidade de ajustar a configuração do AWS Auto Scaling para instâncias do Worker ajuda a EngFlow a encontrar o equilíbrio ideal entre capacidade e custo para que seus clientes tenham sempre capacidade de computação e armazenamento suficientes para iniciar imediatamente uma nova compilação/teste programada, sem desperdiçar dinheiro com recursos ociosos.

Confiabilidade

A EngFlow tem seguido as práticas recomendadas da AWS para fornecer um serviço confiável desde o início para executar construções/testes críticos para milhares de desenvolvedores.

Sua configuração do AWS Auto Scaling abrange três zonas de disponibilidade da AWS na região selecionada da AWS para escalar com base na demanda do cliente, resistir a uma interrupção do serviço local e fornecer recursos de autorrecuperação substituindo automaticamente as instâncias do Amazon EC2 que falharam. O Amazon S3 complementa a solução como um serviço de armazenamento durável e altamente disponível para compilar/testar artefatos.

Durante a análise do Well-Architected, a EngFlow descobriu uma área para melhorar a confiabilidade de seus serviços. O Amazon EC2 Auto Scaling usa políticas de encerramento para determinar quais instâncias ele encerra primeiro durante eventos de escalabilidade. As políticas de encerramento definem os critérios de encerramento usados pelo Auto Scaling ao escolher quais instâncias encerrar.

Por padrão, a política de encerramento seleciona a zona de disponibilidade com a maioria das instâncias. Ele encerra a instância que foi iniciada a partir do modelo de execução ou configuração de execução mais antigo. Se as instâncias foram iniciadas a partir do mesmo modelo de execução ou configuração de execução, o Amazon EC2 Auto Scaling seleciona a instância que está mais próxima da próxima hora de cobrança e a encerra.

A EngFlow observou que essa política de encerramento padrão às vezes encerrava instâncias do EC2 que estavam executando um trabalho valioso para nossos clientes. Embora o EngFlow Remote Execution tenha repetido automaticamente o trabalho, isso resultou em execuções mais longas de compilação/teste, custos mais altos e consultas de clientes. Ao criar sua própria política de rescisão personalizada em combinação com o uso da proteção escalável de instâncias, a EngFlow conseguiu aumentar sua confiabilidade e melhorar a eficiência.

Eficiência de custos

Os clientes da EngFlow executam compilações/testes de CI em grande escala, usando centenas ou até milhares de instâncias do EC2 simultaneamente no horário de pico. Essa workload é o ponto ideal para procurar oportunidades de otimização de custos em nome de nossos clientes.

Para economizar até 90% nos custos de computação em comparação com os custos sob demanda, em nossa análise Well-Architected, discutimos com a EngFlow a capacidade de habilitar instâncias spot para sua execução remota, com base na frota spot do Amazon EC2.

“Esse recurso é uma grande oportunidade para que nossos clientes e nós nos tornemos mais econômicos quando executados na AWS. Adoramos implementá-lo. Por design, nossas instâncias do Worker são sem estado e lidam com o encerramento espontâneo com um mecanismo robusto de novas tentativas. As instâncias spot da AWS foram perfeitas, economizando 70% em custos de computação para a EngFlow e nossos clientes, em média.” — Yannic Bonenberger, engenheiro da EngFlow, explicou.

Enquanto trabalhava na integração da Instância Spot, o EngFlow também melhorou a utilização geral dos recursos da instância EC2 ao melhorar nosso algoritmo de agendamento de instâncias Worker, resultando em economia adicional para nossos clientes.

Depois que a EngFlow integrou as instâncias spot, eles ouviram os avisos de interrupção da instância spot, que são emitidos dois minutos antes do Amazon EC2 interromper ou encerrar sua instância spot. Com isso, eles poderiam evitar o agendamento de novos trabalhos de compilação/teste em instâncias que serão recuperadas em breve. Da mesma forma, o Arquiteto de Soluções da AWS também recomendou ouvir as recomendações de rebalanceamento de instâncias do EC2 para evitar o agendamento de novos trabalhos de compilação/teste em instâncias com alta probabilidade de serem recuperadas em breve. Depois de implementar essas recomendações, os clientes da EngFlow observaram menos tentativas de trabalho de compilação/teste devido ao encerramento prematuro das instâncias do EC2.

Uma abordagem promissora para construções/testes modernos

Organizações de tecnologia grandes e ágeis, como plataformas de mídia social, mercados de viagens de curto prazo e fabricantes de automóveis, confiam na plataforma da EngFlow para manter os engenheiros informados e manter a agilidade necessária para o desenvolvimento de software moderno. A AWS está no centro do sucesso da EngFlow, oferecendo arquitetura flexível e eficiência de custos, o que se traduz diretamente em vantagem competitiva para os clientes finais.

“É incrível a quantidade de energia que você tem na ponta dos dedos. É a primeira vez na história que você pode ter 1.000 máquinas como um único desenvolvedor e experimentar algo em grande escala.” — afirma Ulf Adams, CTO da EngFlow.

Christian Mueller

Christian Mueller

Em sua função de Principal Arquiteto de Soluções para um cliente automotivo estratégico na Amazon Web Services (AWS), Christian ajuda esse cliente a aproveitar todo o potencial da Nuvem AWS para torná-lo ainda mais bem-sucedido. Ele está interessado em tudo sobre tecnologia sem servidor e gosta de fazer parte da grande transformação que está acontecendo na indústria automotiva, desde veículos conectados e autônomos até veículos definidos por software.

Luis Pino

Luis Pino

Como Engenheiro de Software na EngFlow, Luis é responsável por garantir que a infraestrutura montada na EngFlow funcione da maneira mais suave possível. Em uma vida anterior, Luis ajudou a desenvolver o Bazel com foco em APIs externas e suporte ao macOS durante seus cinco anos na Google. Ele também é doutor em Ciência da Computação pela École Polytechnique, especializado em verificação formal de software.

Como estava esse conteúdo?