DevOps, SRE e Engenharia de Plataforma
Eu compilei este tópico no Twitter e, de repente, chamou bastante atenção. Então, aqui, vou tentar elaborar um pouco mais sobre o assunto. Talvez seja útil para alguém tentando tomar uma decisão de carreira ou apenas melhorar a compreensão geral dos títulos mais badalados da indústria.
Durante minha carreira, eu costumava trabalhar em equipes e empresas onde, como desenvolvedor, eu subia código para um repositório e só esperava que funcionasse bem quando algum administrador de sistema mítico eventualmente o levasse para produção. Eu também estava em configurações em que precisaria provisionar servidores físicos na segunda-feira, descobrir a estratégia de implantação na terça-feira, escrever alguma lógica de negócios na quarta-feira, lançá-la na quinta-feira e combater um incidente de produção na sexta-feira. E tudo isso sem sequer estar ciente da existência de títulos extravagantes como DevOps ou engenheiro SRE.
Mas então as pessoas ao meu redor começaram a falar de DevOps e SRE, comparando-os entre si e compilando
listas incríveis de
recursos. Novas oportunidades de trabalho começaram a surgir e eu rapidamente entrei no trem da SRE. Então, abaixo está minha experiência de estar envolvido em todas as coisas de SRE e Engenharia de Plataforma do ponto de vista do antigo desenvolvedor de software. E sim, acho que é aplicável principalmente para empresas onde o produto é algum tipo de serviço voltado para a web. Este é o tipo de empresa em que trabalhei dez anos. Pessoas que fazem software embarcado ou implementam bancos de dados provavelmente vivem em realidades totalmente diferentes.
O que é Desenvolvimento
Este é o mais simples de explicar. Desenvolvimento - trata-se de programação de aplicativos, ou seja, escrever a lógica de negócios do seu produto principal. Esta é a única atividade entre as três que estão sendo discutidas aqui que gera dinheiro diretamente para a empresa.
A única coisa que traz retorno para uma empresa são as vendas, todo o resto são despesas
Na minha opinião, o desenvolvimento é super quente! Como desenvolvedor, você rapidamente começa a pensar que é a pessoa mais importante do mundo. Sem o seu código, não há nada. Mas, aparentemente, apenas escrever código muitas vezes não é suficiente. O código precisa ser entregue à produção e executado lá.
Eu carregava o título de Desenvolvedor de Software (ou Engenheiro de Software) desde o início da minha carreira em 2011. E ainda me lembro da dor muito vividamente - sempre desejei ter controle sobre a implantação do meu código. E raramente tive. Em vez disso, haveria algum procedimento obscuro quando alguém, geralmente nem mesmo seu colega sênior, teria acesso aos servidores de produção e implantaria o código lá para você. Portanto, se depois de enviar as alterações para o repositório, você tiver o azar de notar um bug apenas na versão de produção do seu serviço, precisará implorar por um lançamento extra. Definitivamente foi uma merda.
O que é DevOps
Eu nem vou tentar citar a definição oficial aqui. Em vez disso, vou compartilhar a experiência em primeira mão. Para mim, o DevOps foi uma mudança cultural que deu às equipes de desenvolvimento mais controle sobre o envio do código para a produção. A implementação pode variar. Eu estive em configurações onde os desenvolvedores teriam apenas permissão sudo em servidores de produção. Mas provavelmente a abordagem mais comum é fornecer às equipes de desenvolvimento algum tipo de pipeline de CI/CD.
Em um mundo GitOps ideal, os desenvolvedores ainda estariam apenas enviando código para repositórios. No entanto, haveria um botão mágico em algum lugar à disposição da equipe que colocaria a nova versão do sistema ou talvez até forneceria uma nova infraestrutura para cobrir os novos requisitos.
A ideia original do DevOps é provavelmente muito mais ampla do que apenas isso. Mas pelo que vejo nas descrições de trabalho, o que ouço de recrutadores tentando me caçar para uma posição de DevOps e o que consegui reunir de meus colegas com o título de engenheiro de DevOps, na maioria das vezes, trata-se de criar um maneira de implantar coisas produzidas pelo Desenvolvimento. Em configurações mais avançadas, o DevOps também pode se preocupar com outras coisas, melhorando a velocidade de desenvolvimento. Mas o próprio DevOps nunca se preocupa com a lógica de negócios do aplicativo real.
O que é SRE
Há uma
excelente série de livros do Google explicando a ideia da Engenharia de Confiabilidade do Site e, o que é ainda mais importante para mim, compartilhando algumas práticas reais de tecnologia conduzidas pelos SREs do Google. Em particular, diz que o SRE é apenas uma das maneiras de implementar a cultura DevOps - class SRE implements DevOps {}.
Essa explicação não me ajudou muito. Mas o que era ainda mais intrigante, subconscientemente, eu sempre me empolgava ao ler as descrições de trabalho do SRE e ficava entediado rapidamente com as de DevOps... Então, havia claramente uma diferença, mas, por muito tempo, não consegui destilar.
Claro, isso é apenas sobre minhas preferências pessoais, mas sempre que alguém menciona a configuração de um pipeline de CI/CD, eu sempre fico deprimido. E as descrições de trabalho do DevOps hoje em dia estão cheias de tais responsabilidades. Não me entenda mal, os pipelines de CI/CD são incríveis! Fico sempre feliz quando tenho a chance de usar um. Mas configurá-los não é uma coisa que eu goste mais. Pelo contrário, quando alguém me pede para entrar e dar uma olhada em uma produção sangrenta, seja perseguindo um bug, um vazamento de memória ou degradação de desempenho, estou sempre mais do que feliz em ajudar.
Desenvolver código e enviá-lo para produção ainda não fornece uma visão completa. Alguém precisa manter a produção viva e saudável! E é assim que vejo o lugar do SRE no meu modelo de mundo.
O livro SRE do Google se concentra no monitoramento e alerta, definindo SLOs de seus serviços e rastreamento de orçamentos de erros, resposta a incidentes e postmortems. Estas são as coisas que se precisa aplicar para tornar a produção confiável. O Facebook tem uma função famosa de Engenheiro de Produção, mas é muito difícil distingui-la de uma função típica de SRE, julgando apenas pela descrição do trabalho.
Aqui também está um ótimo tweet que meio que confirma minha sensação de que o foco principal do SRE é a produção.
Minha resposta muito simplificada quando alguém diz qual é a diferença entre SRE e DevOps.
* SRE = focado principalmente na produção
* DevOps = focado principalmente em CI/CD e velocidade do desenvolvedor
E mais um:
Eu gosto disso! Minha resposta típica é:
O SRE funciona da Produção para trás.
O DevOps funciona desde o desenvolvimento. Em algum lugar no meio, eles se encontram.
Assim, o DevOps mantém a produção atualizada. A SRE mantém a produção saudável.
UPD :
Bruce Dominguez publicou recentemente um artigo com algumas reflexões sobre o que diferencia as equipes de SRE das equipes de operações ou engenharia de plataforma, e isso ecoou minha experiência.
O ROAD to SRE descreve as principais áreas de foco de uma equipe SRE (e na minha opinião, a ordem importa):
- Response - configurando uma cultura eficiente de resposta a incidentes
- Observability - instrumentação, monitoramento e alerta
- Availability & Reliability - SLI/SLOs e gerenciamento de falhas
- Delivery - construção, provisionamento e implantação eficientes (IaC, CI/CD, etc. )
UPD 2 : Um artigo recente
SRE vs. DevOps: Qual é a diferença entre eles? por
spacelift.io pessoal reforça minha opinião sobre o assunto. Em grande medida, as informações do artigo repetem minha experiência pessoal.
O que é Engenharia de Plataforma
Quando eu era o único engenheiro em uma startup, uma parte decente do meu trabalho era transformar alguns recursos genéricos que eu alugava do provedor de infraestrutura em algo mais adaptado às necessidades da empresa. Então, eu tinha vários scripts para provisionar um novo servidor, alguma compreensão de como fornecer conectividade de rede entre nossos servidores em diferentes data centers, algumas habilidades para replicar a configuração de produção no teste e talvez até escrever um ou dois daemons para ajudar me com coleta de log. Eu realmente não entendia, mas essas coisas constituíam nossa Plataforma.
Ingressar em uma empresa muito maior e começar a consumir recursos relacionados à infraestrutura me fez perceber que há uma terceira área de foco que pode estar bem próxima de DevOps e SRE. Chama-se Engenharia de Plataforma.
Do meu entendimento, a Engenharia de Plataforma se concentra no desenvolvimento de um ecossistema que pode ser usado com eficiência dos pontos de vista de Dev, Ops e SRE.
Pode haver bastante escrita de código na Engenharia de Plataforma. Ou pode ser principalmente sobre como configurar as coisas. Mas, novamente, não se trata da lógica de negócios principal do seu produto - trata-se de tornar uma infraestrutura básica mais adequada às necessidades do dia-a-dia.
A Engenharia de Plataforma não é sobre desenvolvimento de infraestrutura. A Engenharia de Plataforma consiste em permitir que outros façam o que quiserem. Twitter era uma plataforma magnífica nos primeiros dias, nada a ver com infra.
Para ser honesto, não vejo uma contradição entre minha maneira de ver a Engenharia de Plataforma e a explicação deste tweet. O desenvolvimento precisa de infraestrutura para executar o código. Portanto, se a Engenharia de Plataforma visa permitir que outros façam o que quiserem, pelo menos em parte, ela deve se preocupar com o desenvolvimento da infraestrutura.
Tenho a sensação de que em uma configuração maior, quando uma empresa teria milhares de servidores bare metal em seus próprios data centers, uma Engenharia de Plataforma começaria gerenciando essa frota de máquinas. Assim, algum tipo de software de inventário pode precisar ser instalado ou mesmo desenvolvido internamente. A instalação de sistemas operacionais e pacotes básicos nos servidores que estão sendo provisionados provavelmente também cairia na responsabilidade da Engenharia de Plataforma.
Felizmente, as nuvens fizeram a Engenharia de Plataformas operar em camadas muito mais altas. Todas as tarefas básicas de gerenciamento de frota já estão resolvidas para você. E até mesmo a orquestração de suas cargas de trabalho é resolvida por projetos como Kubernetes ou AWS ECS. No entanto, a solução é bastante genérica, enquanto suas equipes provavelmente implantarão microsserviços bastante semelhantes. Portanto, fornecer a eles um modelo de projeto padrão que seria integrado às métricas da empresa e aos subsistemas de coleta de logs tornaria as coisas muito mais rápidas.
E os títulos?
Até agora, eu estava deliberadamente evitando falar sobre papéis e títulos. Desenvolvimento, Operações, SRE e Engenharia de Plataforma para mim são áreas de foco. E, em muito menor grau, sobre títulos. Uma pessoa pode ser um Dev esta semana, depois um Ops na próxima semana e um SRE na semana seguinte.
Pela minha experiência, a separação entre Dev, Ops, SRE e PE fica mais aparente quando o tamanho da empresa aumenta. Um tamanho de empresa maior geralmente significa mais especialistas e menos generalistas. É assim que você acaba com equipes SRE dedicadas e um departamento de Engenharia de Plataforma. Mas é claro que não é uma regra estrita. Por exemplo, com meu título de SRE, passei um ano fazendo todas as coisas de SRE verdadeiro (SLO, monitoramento, alerta, resposta a incidentes) e depois fiz a transição para a Engenharia de Plataforma, onde faço mais desenvolvimento de infra do que o SRE tradicional. YMMV.
Para onde vai a segurança?
Quando meu tópico se tornou viral no Twitter, alguém me perguntou como a segurança se encaixa nessa imagem. E essa é realmente uma pergunta muito boa! Mas não tenho uma resposta simples. Para mim, uma abordagem razoável é tornar a segurança um tema transversal em todos os Dev, Ops, SRE e PE. Diferentes preocupações de segurança podem ser abordadas em diferentes camadas usando ferramentas diferentes. Por exemplo, o desenvolvimento pode se preocupar em evitar injeções de SQL, enquanto o pessoal da plataforma pode fortalecer a rede configurando algumas políticas sofisticadas de cilium.
Em vez de conclusão
Não se esqueça, todas as coisas acima são minhas opiniões
Sharing my understanding of DevOps, SRE, and Platform Engineering based on the first-hand experience in SRE and PE domains.
iximiuz.com