![Por que a observabilidade não pode medir o que realmente importa](https://optimuscloud.com.br/wp-content/uploads/2024/03/1711734244_Por-que-a-observabilidade-nao-pode-medir-o-que-realmente-150x150.jpg)
Por que a observabilidade não pode medir o que realmente importa
29 de março de 2024![Como construir um aplicativo de bate-papo LLM baseado em RAG com ChromaDB e Python](https://optimuscloud.com.br/wp-content/uploads/2024/03/1711745044_Como-construir-um-aplicativo-de-bate-papo-LLM-baseado-em-RAG-150x150.jpg)
Como construir um aplicativo de bate-papo LLM baseado em RAG com ChromaDB e Python
29 de março de 2024À medida que modernizamos a computação em escala, surgiram ferramentas de gerenciamento de configuração para simplificar e padronizar o gerenciamento da infraestrutura. À medida que as organizações migraram para a nuvem, os requisitos de provisionamento e gerenciamento explodiram exponencialmente, tornando quase impossíveis tarefas anteriormente manuais. O DevOps foi criado para ajudar a implementar as melhores práticas de automação que aprendemos com o software em práticas de infraestrutura.
A mudança para a nuvem e a ascensão do DevOps introduzidas Infraestrutura como código (IaC), permitindo-nos configurar e gerenciar a infraestrutura da mesma forma que gerenciamos nosso software. Infelizmente, a IaC não cumpriu sua promessa de implantar e manter facilmente e rapidamente os recursos da nuvem.
A ascensão e queda do IaC
A infraestrutura como código surgiu em meados dos anos 2000, quando vimos a Amazon Web Services (AWS) lançar a primeira versão do Amazon Elastic Compute Cloud (Amazon EC2) em 2006, e Puppet e Chef introduziram linguagens declarativas específicas de domínio (DSLs). ) para ajudar os administradores de sistema a automatizar a configuração e o provisionamento em 2005 e 2009, respectivamente. De repente, todos podiam usar quantos recursos computacionais precisassem, e novas ferramentas eram necessárias para gerenciar sua infraestrutura nova e mais expansiva.
Quando contêineres, microsserviços e Kubernetes se tornaram mais amplamente usados, em meados e no final da década de 2010, as necessidades de gerenciamento de configuração mudaram novamente. No mesmo ano em que o Kubernetes foi lançado, o Terraform da HashiCorp também foi lançado, oferecendo uma nova maneira de padronizar o provisionamento de nuvem e cunhando a frase “Infraestrutura como Código”.
Desde o início, as ferramentas de gerenciamento de configuração aumentaram a eficiência da configuração e implantação da infraestrutura, permitindo implantações mais rápidas por meio de processos simplificados e fluxos de trabalho automatizados. Ao automatizar tarefas e minimizar erros manuais, a IaC reduziu a sobrecarga operacional associada ao gerenciamento de infraestrutura e reduziu a probabilidade de erros que ocorrem com o gerenciamento manual.
A esperança era que, como a IaC incorporasse as melhores práticas de código, os desenvolvedores pudessem trabalhar junto com administradores de sistema e outros engenheiros de infraestrutura para implantar código sem esforço em escala, permitindo uma colaboração mais estreita entre as equipes de desenvolvimento e operações.
Mas, assim como a IaC expandiu a capacidade de implantação na nuvem, ela adicionou complexidade a essa implantação, combinando equipes com diferentes experiências e conhecimentos e exigindo que encontrassem novas maneiras de trabalhar juntas.
Os desafios com IaC
Apesar dos claros benefícios de escala e automação que acompanham a IaC, ela permanece muito complexa porque a infraestrutura em nuvem é complexa e está em constante mudança. À medida que mais equipes estão envolvidas com o provisionamento de nuvem, elas precisam chegar a um acordo sobre a melhor forma de usar as ferramentas IaC e aprender as nuances de cada uma que escolherem. Com essas pressões adicionais, estão surgindo novas soluções que prometem melhorar a experiência do desenvolvedor sem aumentar o risco. Para criar a próxima geração de soluções, as organizações precisam entender onde realmente estão os problemas para as equipes de desenvolvimento, engenharia de plataforma e segurança.
Obstáculos de aprendizagem
Com diversas ferramentas e estruturas para escolher, aprender novas linguagens e ferramentas pode ser difícil para equipes cuja experiência decorre do provisionamento manual de infraestrutura ou da escrita de código de aplicativo. Além de exigir uma nova linguagem de programação e interface, a maioria das ferramentas IaC define e oferece suporte ao gerenciamento de infraestrutura e recursos usando linguagens declarativas.
Isso significa que as equipes devem aprender como definir o estado desejado do ambiente de infraestrutura, em vez de delinear as etapas necessárias para alcançar um resultado, um desafio tanto para programadores novos quanto para programadores experientes.
Além disso, cada ferramenta IaC se destaca em diferentes categorias, muitas vezes resultando no uso de diversas ferramentas para gerenciar a infraestrutura de maneira eficaz. Ter mais de uma ferramenta pode resultar em mais problemas de complexidade e compatibilidade, e o uso de diversas ferramentas não elimina a necessidade de conhecimento especializado em infraestrutura.
Gargalos e ineficiências
Contrariamente ao objetivo, a IaC pode retardar o ciclo de vida de desenvolvimento de software à medida que diversas equipes trabalham para provisionar recursos de aplicativos em nuvem. Diferentes partes interessadas devem dominar diversas ferramentas e linguagens de IaC, gerenciar infraestruturas complexas com dependências complexas entre recursos e ter o conhecimento especializado necessário para implementar a IaC com segurança. Os engenheiros de plataforma ficam sobrecarregados com solicitações de implantação e precisam vasculhar os arquivos de configuração da infraestrutura para identificar problemas que possam resultar em acesso excessivamente privilegiado, não conformidade ou consumo excessivo de recursos. Esse processo significa que os aplicativos são enviados de forma significativamente mais lenta e frustrante para os desenvolvedores.
Desafios seguindo as melhores práticas
É difícil impor configurações consistentes em vários ambientes, principalmente se houver implantações dispersas em ambientes locais e de nuvem. Para piorar o problema, os codificadores de aplicativos nem sempre são bem versados em práticas recomendadas de segurança e design, enquanto as equipes de operações e os engenheiros de confiabilidade do site podem fazer alterações diretamente em um ambiente de nuvem para garantir alta disponibilidade ou segurança. E embora as ferramentas IaC forneçam modelos para padronizar implantações de aplicativos e serviços em ambientes, desvios de configuração ainda são possíveis. Isso significa que é fundamental detectar, rastrear e remediar essas alterações de configuração em cada ambiente. De alguma forma, as equipes precisam comparar os arquivos IaC que foram criados para a implantação com os que existem no ambiente ativo.
Pressão para entregar aplicativos com rapidez e segurança
Os desenvolvedores são continuamente pressionados para entregar aplicativos e atualizações com mais rapidez. Algumas equipes lançar atualizações semanalmente, enquanto outros lançam código com ainda mais frequência. Mas isso é incrivelmente difícil de fazer sem o contexto em torno de requisitos mais amplos de aplicativos, infraestrutura e negócios. As equipes de plataforma têm a tarefa de fazer revisões de IaC sem as informações necessárias para tomar decisões inteligentes, resultando em atrasos e erros humanos inevitáveis.
E embora os engenheiros de plataforma e as equipes de DevOps estejam criando modelos de ouro projetados para ajudar os desenvolvedores a provisionar infraestrutura em alinhamento com as práticas recomendadas, o desenvolvedor ainda deve aplicar os modelos de forma consistente e entender como criar IaC seguro, consistente e compatível. Isso é pedir muito aos desenvolvedores, que desejam apenas construir um ótimo aplicativo que funcione da maneira que eles o projetaram.
O nascimento da infraestrutura generativa a partir do código
A infraestrutura a partir do código é uma nova maneira de pensar e trabalhar com o provisionamento de infraestrutura, que coloca o código do aplicativo no centro de tudo. Em vez de criar a configuração da infraestrutura usando modelos dourados controlados por versão, você gera a infraestrutura que seu aplicativo precisa com base na versão do aplicativo que está sendo implantada.
Em vez de adequar sua aplicação à sua infraestrutura e tratar a infraestrutura como software, fazendo com que os desenvolvedores aprendam novas linguagens e conceitos de infraestrutura, você ajusta a infraestrutura às necessidades em constante mudança da aplicação, ao mesmo tempo em que aplica os padrões necessários e mantém os benefícios do controle de versão. Essa abordagem melhora significativamente a experiência do desenvolvedor, ajudando-os a simplificar seus processos e acelerar a entrega, sem a necessidade de almoço e aprendizado ou treinamento em workshop, para que os desenvolvedores possam se concentrar no desenvolvimento em vez de no provisionamento.
Alinhando IfC com necessidades em mudança
À medida que a inteligência artificial (IA) e o aprendizado de máquina aumentam a produção dos desenvolvedores e mudam a forma como os aplicativos são criados e mantidos, a indústria precisa de uma solução que possa dimensionar a segurança, a automação e a eficiência com a produção das equipes de desenvolvedores. À medida que os serviços em nuvem lançam novas ofertas e os países adotam mais padrões de segurança cibernética e privacidade de dados, as organizações devem garantir que a infraestrutura que constroem seja otimizada, segura e não atrapalhe a inovação. Mesmo os melhores modelos ficam desatualizados rapidamente e precisam ser atualizados, e não há garantia de que todas as equipes usarão as versões atualizadas.
Ao gerar Infraestrutura a partir do Código, você aplica padrões de ouro (regras, diretrizes e melhores práticas que se aplicam a qualquer infraestrutura) à geração de IaC, o que garante o alinhamento com as melhores práticas, configurações, instalações de software e definições aprovadas pela organização . A saída é então baseada em padrões e livre de erros, permitindo que as equipes de desenvolvimento realmente autoatendam o provisionamento de recursos sem se preocupar se estão colocando a empresa em risco devido a uma configuração incorreta ou vulnerabilidade de segurança, e ignora a tarefa de “verificar, relatar, revisar ”Ciclo oferecido pela maioria das verificações de políticas hoje.
O Ciclo da Complexidade
Vivemos numa era emocionante de inovação quando se trata de provisionamento e gerenciamento de infraestrutura. Vimos muitas ferramentas novas que mudaram a cara da infraestrutura e ajudaram a reduzir a complexidade da implantação de aplicativos. Kubernetes, contêineres e microsserviços facilitam o desenvolvimento e a implantação de software, aumentando a agilidade, a resiliência e a escalabilidade. Estas tecnologias também requerem conhecimentos especializados para as gerir e utilizar de forma eficaz.
Embora o IaC seja, inegavelmente, uma melhoria na configuração manual de centenas de ambientes de nuvem e no local, ou na execução de scripts personalizados que são propensos a quebras, ele adicionou ônus aos desenvolvedores para aprenderem arquiteturas e conceitos de infraestrutura complexos e para adquirirem novas linguagens. bem como mudar a maneira como eles pensam sobre programação. Gerenciar, manter e implantar aplicativos e infraestrutura de forma segura e consistente continua sendo um desafio incrivelmente complicado.
Não é hora de uma nova abordagem, que coloque o código do aplicativo em primeiro lugar?
A postagem Infraestrutura como código está morta: vida longa à infraestrutura do código apareceu pela primeira vez em The New Stack.