Blog, Notícias

Reduza, reutilize, rebase: contêineres sustentáveis ​​com Buildpacks

Construções de contêineres podem ser um grande desperdício. Cada atualização do sistema operacional, nova versão de dependência e atualização do conjunto de ferramentas resulta em grandes quantidades de energia usadas para construir e reconstruir nossas imagens de contêiner; muitas vezes desnecessariamente. Pode ser caro em escala, e é por isso que os Buildpacks Cloud Native foram projetados para executar compilações completas apenas quando uma reconstrução é realmente necessária.

Buildpacks transformam o código-fonte do aplicativo em imagens de contêiner. Eles podem ser usados ​​com ou sem Docker para encapsular padrões comuns entre compilações, o que torna a conteinerização mais fácil e mais consistente para desenvolvedores de aplicativos. Buildpacks também fornecem mecanismos avançados de cache e patch que os tornam uma escolha ecologicamente correta para construção de contêineres. Em certos casos, os Buildpacks impedem que muitas imagens sejam reconstruídas. Essa é uma grande mudança em relação a outras tecnologias nativas da nuvem, que podem assumir que recursos de nuvem ilimitados estão disponíveis.

Sobre o impacto ambiental da nuvem nativa

Antes do surgimento do ecossistema nativo da nuvem e do uso generalizado de imagens de contêiner, implantávamos nossos aplicativos em servidores criados a partir de imagens de máquinas que eram atualizadas com pouca frequência e em uma cadência diferente da própria aplicação.

Hoje, muitas aplicações estão acopladas ao sistema operacional e seus pacotes porque utilizam um  Dockerfile para definir suas imagens de contêiner. Como resultado, essas imagens frequentemente precisam de reconstruções para aplicar patches a componentes no nível do sistema operacional ou simplesmente para atualizar ferramentas que nem são usadas pelo aplicativo. Pior ainda, o mecanismo de cache de camadas imposto por  Dockerfile nos obriga a reconstruir frequentemente camadas que nem precisam ser reconstruídas.

O ecossistema nativo da nuvem trouxe grande produtividade e melhorias operacionais para o desenvolvimento de software. Mas perdemos de vista o quanto algumas dessas tecnologias podem ser um desperdício. Os Buildpacks, por outro lado, foram projetados para funcionar em uma escala (ou seja, dezenas de milhões de imagens) onde o desperdício tem custos reais. É por isso que o mecanismo de rebase do Buildpacks requer recursos mínimos.

Reduzir, reutilizar, rebase

As imagens de contêiner criadas a partir de um  Dockerfile exigem uma compilação completa quando uma nova atualização do sistema operacional está disponível, mesmo que seu aplicativo não precise ser recompilado ou reinstalado para funcionar com a atualização (ou seja, a atualização é  compatível com ABI ). Este não é o caso ao usar Buildpacks.

Quando uma nova imagem base do sistema operacional fica disponível para uma imagem gerada por um buildpack, as camadas existentes acima do sistema operacional podem ser reutilizadas. Este processo, ilustrado abaixo, é chamado de rebase. As camadas de aplicação, com exatamente o mesmo SHA, podem ser transferidas para as novas camadas de imagem do sistema operacional.

A atualização do sistema operacional de uma imagem de contêiner requer uma reconstrução se você estiver usando o Dockerfile

O rebase do Buildpacks constrói uma nova imagem de contêiner usando camadas existentes, sem a necessidade de construção

O processo de rebase do Buildpacks, em última análise, constrói uma nova imagem de contêiner usando as camadas existentes e as novas camadas do sistema operacional, sem a necessidade de construção. Basicamente, o rebase de imagens é um processo simples. Ao inspecionar uma imagem de aplicativo, o rebase pode determinar se existe ou não uma versão mais recente da imagem base do aplicativo (localmente ou em um registro). Se existir uma versão mais recente, o rebase atualiza os metadados da camada da imagem do aplicativo para fazer referência à versão mais recente da imagem base. Esta é essencialmente uma operação que edita um arquivo JSON. Leva milissegundos e usa muito poucos recursos de computação.

O Rebase permite que desenvolvedores ou operadores de aplicativos atualizem rapidamente a imagem de um aplicativo quando sua imagem de execução for alterada. Ao usar o rebase da camada de imagem, este comando evita a necessidade de reconstruir totalmente o aplicativo.

Mas rebase não é o único mecanismo Buildpacks que é mais sustentável que  Dockerfile builds. Buildpacks também podem armazenar artefatos de construção em cache para permitir compilação incremental e outras técnicas de economia de recursos. Essas camadas de cache nem sempre serão descartadas quando você precisar de uma reconstrução, como aconteceria com as compilações `Dockerfile“.

Seja tão ecológico quanto seus testes de unidade

As construções de contêineres não são os maiores infratores quando se trata do impacto ambiental do software. A eletricidade necessária para extrair bitcoin é  mais do que utilizada por países inteiros , mas o crescimento do software que utiliza técnicas criptográficas trouxe uma nova consciência de como o nosso código afeta o mundo que nos rodeia. Isso é uma coisa boa.

Temos a responsabilidade de pensar em minimizar os recursos necessários ao software que produzimos. O código que escrevemos tem impacto no mundo e nossas escolhas são importantes.

Para saber mais sobre a relação entre o desenvolvimento de software de código aberto e o meio ambiente, visite o  Grupo Consultivo Técnico de Sustentabilidade Ambiental (TAG).

Artigo originalmente publicado em Blog CNCF

DNX Brasil – Soluções cloud-native

close
Start typing to see posts you are looking for.
Sidebar Scroll To Top
Instagram YouTube linkedin