Engenharia de Plataforma: Melhores Práticas e Superando Desafios
Introdução
Olá! Sou Jackson, um Engenheiro de Software Sênior e Arquiteto de Soluções aqui na AITY. Como muitos na área, adoro construir modelos Gundam no meu tempo livre. Pode parecer distante da engenharia de software, mas essa paixão ilustra perfeitamente a diferença entre engenharia de produto e de plataforma.
Na AITY, engenheiros de produto são como aqueles que montam o Gundam: utilizam todas as peças para construir um produto final funcional e divertido. Já os engenheiros de plataforma fornecem as ferramentas necessárias – como alicates e lixas – e talvez até um suporte de exibição. Eles garantem que quem constrói o produto tenha tudo o que precisa, mesmo sem montá-lo fisicamente.
Há cerca de um ano, minha equipe na AITY fez a transição para a organização de infraestrutura, assumindo novos papéis e Áreas de Responsabilidade (AoRs). Antes, lidávamos com problemas de clientes externos, como a criação de novas visualizações de implantação. Agora, nossos clientes como equipe de engenharia de plataforma são internos, o que muda fundamentalmente nossas responsabilidades. Isso exigiu uma reavaliação completa de como abordamos testes de código e solução de problemas.
Seja você um engenheiro de produto ou de plataforma, aqui estão algumas melhores práticas para resolver problemas de plataforma.
Compreendendo Seu Domínio
Um dos passos mais críticos antes de abordar problemas é compreender o domínio. Um “domínio” é a área de assunto técnico e de negócios na qual uma equipe e uma organização de plataforma operam. Isso requer adquirir um entendimento de termos técnicos e como esses sistemas interagem para fornecer soluções rápidas e confiáveis. Veja como se atualizar:
- Converse com seus colegas: Organize uma reunião de transição com uma equipe que tenha mais conhecimento e experiência no assunto. Isso oferece a oportunidade de fazer perguntas sobre terminologia e obter um entendimento mais profundo dos problemas que a equipe abordará.
- Investigue problemas antigos: Um backlog de problemas antigos ou persistentes pode fornecer uma melhor compreensão das limitações atuais do sistema e áreas potenciais de melhoria.
- Leia a documentação: A documentação é uma mina de ouro de conhecimento que pode ajudar a entender como o sistema funciona.
Conectando Conceitos a Habilidades Específicas da Plataforma
Embora o conselho anterior ofereça orientação geral aplicável a equipes de produto e plataforma, as equipes de plataforma – servindo como a camada fundamental – necessitam de um entendimento mais aprofundado.
-
Redes: Entender os fundamentos de rede é crucial para todos os engenheiros, mesmo aqueles não diretamente envolvidos em operações de rede. Isso inclui conceitos como TCP, UDP e balanceamento de carga L4, bem como ferramentas de depuração como
dig. Uma compreensão sólida dessas áreas é essencial para entender como o tráfego de rede impacta sua plataforma.bash dig aity.com -
Sistemas Operacionais e Hardware: A seleção de máquinas virtuais (VMs) ou hardware físico apropriados é vital para escalabilidade e gerenciamento de custos. Fazer escolhas bem informadas para aplicações específicas exige um forte domínio de ambos. Isso está intimamente ligado à escolha do sistema operacional certo para suas máquinas, importante para evitar sistemas com vulnerabilidades ou próximos ao fim da vida útil.
- Infraestrutura como Código (IaC): Ferramentas de automação como Terraform, Ansible e Consul estão se tornando cada vez mais essenciais. A proficiência nessas ferramentas é uma necessidade, pois diminuem significativamente o erro humano durante o provisionamento e modificações de infraestrutura.
- Sistemas Distribuídos: Lidar com problemas de plataforma, particularmente em sistemas distribuídos, exige uma compreensão profunda de que falhas são inevitáveis. Consequentemente, empregar soluções proativas como mecanismos de failover e recuperação é crucial para preservar a confiabilidade do sistema e prevenir experiências adversas para o usuário. A abordagem ideal para isso depende inteiramente do problema específico e do comportamento desejado do sistema.
Compartilhamento de Conhecimento
Ao compartilhar lições e ideias, engenheiros podem introduzir novas perspectivas que levam a avanços e inovações. Dedicar tempo para entender por que um projeto ou solução funcionou ou não, e compartilhar essas descobertas, fornece novas perspectivas que podemos usar no futuro.
Aqui estão três razões pelas quais o compartilhamento de conhecimento é tão importante:
- Trabalho em equipe realiza o sonho: A colaboração geralmente resulta em resolução mais rápida de problemas e fomenta a inovação de novas soluções, pois os engenheiros têm a oportunidade de aprender uns com os outros e expandir ideias existentes.
- Previna a perda de conhecimento: Se não compartilharmos as lições aprendidas, impedimos que a informação seja disseminada pela equipe ou organização. Isso se torna um problema se um engenheiro sair da empresa ou estiver simplesmente indisponível.
- Melhore o sucesso do cliente: Como engenheiros, nossas soluções devem servir eficazmente aos nossos clientes. Ao compartilhar nosso conhecimento e lições aprendidas, podemos ajudar a equipe a construir plataformas confiáveis, escaláveis e seguras, o que nos permitirá criar produtos melhores que atendam às necessidades e expectativas do cliente!
Raio de Impacto
Grandes diferenças começam a aparecer entre a engenharia de produto e a engenharia de infraestrutura quando se trata do raio de impacto e do processo de teste. Com as plataformas sendo os blocos de construção fundamentais de um sistema, qualquer mudança (pequena ou grande) pode afetar uma ampla gama de produtos. Na AITY, minha equipe é responsável por DNS, um serviço fundamental que impacta inúmeros produtos. Mesmo uma pequena alteração neste serviço pode ter repercussões extensas, potencialmente interrompendo o acesso ao conteúdo em nosso site e afetando produtos variados.
- Entenda o raio: Ou entenda as dependências downstream. A comunicação direta com as equipes que dependem do nosso serviço fornece informações valiosas sobre como as mudanças propostas podem afetar outros serviços.
- Postmortems: Ao analisar incidentes passados relacionados à nossa plataforma e perguntar “Qual é o impacto deste incidente?”, podemos obter mais contexto sobre qual mudança ou falha foi introduzida, como nossa plataforma desempenhou um papel nisso e como foi corrigida.
- Monitoramento e telemetria: Condense monitoramento e registro importantes em um meio pequeno e rapidamente digerível para fornecer a saúde geral do sistema. Isso pode ser uma Métrica de Disponibilidade Única (SAM), por exemplo. A capacidade de verificar rapidamente um único painel permite que os engenheiros identifiquem rapidamente a origem de um problema e agilizem o processo de depuração e mitigação de incidentes, em comparação com a busca e interpretação de monitores detalhados ou mensagens de log.
Testando Mudanças
Testar mudanças em um ambiente distribuído pode ser desafiador, especialmente para serviços como DNS. Um passo crucial para resolver essa questão é utilizar um site de teste como uma máquina “real” onde você pode implementar e avaliar todas as suas mudanças.
- Infraestrutura como Código (IaC): Ao usar ferramentas como Terraform ou Ansible, é crucial testar operações fundamentais como provisionamento e desprovisionamento de máquinas. Há circunstâncias em que uma máquina precisará ser reprovisionada. Nesses casos, queremos garantir que a máquina não seja acidentalmente excluída e que mantenhamos a capacidade de criar uma nova, se necessário.
- End-to-End (E2E): Comece a direcionar algum tráfego de rede para esses servidores. A equipe pode então observar o comportamento do host interagindo diretamente com ele, ou podemos avaliar a funcionalidade desviando uma pequena parte do tráfego.
- Auto-recuperação: Queremos testar a capacidade da plataforma de se recuperar de cargas inesperadas e identificar gargalos antes que impactem nossos usuários. A identificação precoce de gargalos ou bugs é crucial para manter a saúde de nossa plataforma.
Idealmente, as mudanças serão implementadas host a host uma vez que o teste esteja completo. Essa abordagem permite o rollback individual da máquina e evita que as mudanças sejam aplicadas a hosts não afetados.
Conclusão
Engenharia de plataforma pode ser difícil. Os sistemas com os quais a AITY opera são complexos, com muitos serviços e partes móveis. No entanto, não há nada como ver tudo funcionando em harmonia. Todo o trabalho árduo que nossas equipes de engenharia realizam nos bastidores realmente compensa quando a plataforma está funcionando sem problemas e as equipes conseguem entregar mais rápido e de forma mais confiável. Isso permite que a AITY seja um pilar sólido para todos os nossos desenvolvedores e clientes, impulsionando a inovação e o sucesso.
Aguardando Login...