A Evolução do SRE no Google

A Evolução do SRE no Google

Introdução

Quantas vezes já enfrentamos um incidente que parecia resolvido, mas voltou a ocorrer com um impacto ainda maior? Nos sistemas modernos, onde a complexidade reina, essa é uma realidade constante. Como podemos garantir que os SLOs atuais sejam suficientes para avaliar a saúde de componentes em sistemas distribuídos complexos? É isso que o artigo “The Evolution of SRE at Google” nos ensina: repensar a prática de SRE (Site Reliability Engineering) para lidar com sistemas distribuídos e suas interações emergentes.

Neste post, exploramos os principais pontos do artigo, os conectando com referências sólidas dos livros criados por especialistas do Google sobre SRE:

O objetivo deste post é estruturar uma análise baseada no artigo original, conectando as práticas descritas a conceitos modernos de confiabilidade e resiliência em sistemas distribuídos.


Por que a abordagem tradicional de SRE não é suficiente?

Imagine um serviço de autenticação STS (Security Token Service) falhar e impedir a emissão de tokens de segurança, resultando em falhas de autenticação em cascata que afetam a disponibilidade de múltiplos serviços. Essa cascata de erros não é apenas frustrante, mas também revela como os métodos tradicionais de SRE são insuficientes para lidar com a complexidade dos sistemas modernos.

Sistemas modernos não falham apenas por defeitos isolados. Falhas emergentes, causadas por interações inesperadas, são o verdadeiro desafio. Corrigir essas falhas de forma tardia aumenta o impacto e os custos, prendendo equipes em ciclos de reação.

Interações entre peças de um Sistema - STPA Handbook
Interações entre peças de um Sistema - STPA Handbook

Soma-se a este desafio, estabelecer mecanismos de controles eficazes para monitorar e antecipar falhas sistêmicas.

Controle de Interações entre componentes - STPA Handbook
Controle de Interações entre componentes - STPA Handbook

A complexidade dos sistemas distribuídos exige práticas de monitoramento que vão além da observação de métricas isoladas. É fundamental adotar uma abordagem holística que considere as interações entre os componentes para detectar e mitigar riscos emergentes de forma eficaz.

Como resultado, o modelo tradicional de SRE precisa ser ampliado, pois tradicionalmente ele se concentra em duas áreas principais

Monitorar componentes individuais

O capítulo Monitoring Distributed Systems do livro de SRE do Google explica que o monitoramento tradicional tende a se concentrar em métricas de baixo nível, como uso de CPU e memória. Essas métricas, embora úteis, não capturam a saúde do sistema como um todo, nem refletem a experiência real do usuário.

“Monitoramento: coleta, processamento, agregação e exibição de dados quantitativos em tempo real sobre um sistema, como contagem e tipos de consultas, contagem e tipos de erros, tempos de processamento e tempo de vida dos servidores." - Site Reliability Engineering Book

Reagir rapidamente a falhas

De acordo com o capítulo Incident Response do livro Reliability Workbook do Google, o foco em resposta rápida a falhas é essencial para restaurar serviços, mas precisa ser complementado por análises estruturadas pós-incidente para abordar as causas raiz e interações sistêmicas que levam aos incidentes.

“O princípio básico do gerenciamento de incidentes é responder a um incidente de maneira estruturada. Incidentes em larga escala podem ser confusos; uma estrutura que as equipes concordam previamente pode reduzir o caos. Formular regras sobre como comunicar e coordenar seus esforços antes que o desastre ocorra permite que sua equipe se concentre na resolução de um incidente quando ele ocorre.” - Site Reliability Engineering Workbook

Embora essas práticas sejam fundamentais, elas apresentam limitações quando aplicadas a sistemas distribuídos, principalmente devido à complexidade do mapeamento de interações entre componentes e à identificação dos riscos destas Interações.

Propriedades emergentes - STPA Handbook
Propriedades emergentes - STPA Handbook

Nos sistemas modernos, falhas emergentes – como problemas de sincronização entre microserviços – frequentemente escalam de forma imprevisível. Ao não abordar as interações entre componentes, o modelo tradicional de SRE mantém as equipes em um ciclo de reação contínua, aumentando custos e diminuindo a eficiência.

Custo da Reação ao longo do tempo e etapas do projeto - STPA Handbook
Custo da Reação ao longo do tempo e etapas do projeto - STPA Handbook

Quantas vezes não vimos um incidente ser resolvido e surgir novamente, em uma forma ligeiramente diferente? Isso ocorre porque o problema real não foi abordado, apenas seus sintomas.

Visão sistêmica

A simplicidade e a clareza nas interações entre componentes são fundamentais para a confiabilidade do sistema como um todo. Portanto, a robustez individual de cada componente é menos crítica do que a forma como eles interagem de maneira coesa e bem definida.

O STPA Handbook (Capítulo 1) destaca que métodos tradicionais de análise de segurança, como árvores de falhas (FTA) e análise de modos de falha e efeitos (FMEA), baseiam-se na suposição de que acidentes são causados por falhas de componentes individuais. No entanto, em sistemas modernos, os acidentes frequentemente resultam de interações inseguras entre componentes que estão funcionando conforme projetado.

“Em sistemas modernos, no entanto, os acidentes frequentemente resultam de interações inseguras entre componentes que estão todos funcionando conforme projetado.” – STPA Handbook

Esse cenário evidencia que, em sistemas modernos, a confiabilidade depende mais das dinâmicas entre os componentes do que de sua robustez isolada. Assim, adotar uma visão sistêmica é essencial para antecipar comportamentos inesperados e projetar sistemas mais resilientes.


A Introdução do Framework STAMP no Google

Para lidar com a complexidade crescente, o Google adotou o framework STAMP (System-Theoretic Accident Model and Processes), desenvolvido pela Professora Nancy Leveson. O STAMP amplia o foco das análises de falha ao considerar: Interações entre componentes, Comportamento emergente, e Influências humanas e organizacionais.

Note

Pense no STAMP como uma lente de aumento. Ele amplia nosso campo de visão, mostrando como interações invisíveis entre componentes podem levar a acidentes que passam despercebidos pelos métodos tradicionais.

O artigo original descreve como o STAMP foi integrado às práticas de SRE do Google para identificar e mitigar riscos antes que eles se materializem.

Overview do Framework STAMP
Overview do Framework STAMP
Conceitos-Chave

O framework STAMP fornece uma visão ampliada das interações sistêmicas, permitindo que equipes de SRE identifiquem riscos antes que eles se materializem. Esse modelo não apenas muda a forma como falhas são analisadas, mas também redefine o papel do SRE como estrategista de confiabilidade.

O STPA Handbook oferece uma análise detalhada de cada etapa do processo, incluindo exemplos práticos de diversos setores.

Overview do método STPA
Overview do método STPA

Com o STAMP, as equipes de SRE passam de “resolvedores de problemas” para “estrategistas de confiabilidade”, capazes de antecipar riscos antes que eles se materializem.

O CAST Handbook descreve uma abordagem estruturada para identificar as questões que precisam ser abordadas durante uma investigação de acidentes e determinar por que o acidente ocorreu.

“O CAST considera fatores sistêmicos e organizacionais, permitindo uma análise mais abrangente do que métodos tradicionais.” – CAST Handbook.

Componentes básicos do CAST
Componentes básicos do CAST

Essas metodologias além de auxiliar na identificação de falhas, também promovem uma compreensão mais profunda das relações entre tecnologia, processos e pessoas. Ao aplicá-las, é possível transformar o aprendizado de incidentes em estratégias práticas para prevenir recorrências, criando sistemas mais robustos e resilientes desde a concepção até a operação.

E os livros do Google?

No capítulo Postmortem Culture: Learning from Failure do Site Reliability Engineering Book, é destacada a importância de uma análise pós-incidente detalhada para compreender as causas subjacentes e implementar ações preventivas.

“Os objetivos principais de escrever um postmortem são garantir que o incidente seja documentado, que todas as causas raiz contribuintes sejam bem compreendidas e, especialmente, que ações preventivas eficazes sejam implementadas para reduzir a probabilidade e/ou impacto de recorrência.” – Site Reliability Engineering Book

Note

Embora o capítulo não mencione especificamente o framework CAST, a ênfase na compreensão das causas contribuintes e na prevenção de recorrências está alinhada com os objetivos do CAST, que visa analisar falhas sistêmicas de forma abrangente.

Já o capítulo Implementing SLOs do Site Reliability Workbook destaca que os SLOs (Service Level Objectives) são fundamentais para decisões baseadas em confiabilidade. Eles ajudam as equipes a identificar riscos de forma proativa e priorizar confiabilidade em detrimento de outros objetivos, garantindo que problemas sejam resolvidos antes de impactarem os usuários.

“Os SLOs estão no centro das decisões de confiabilidade. Eles ajudam as equipes a tomarem decisões baseadas em dados sobre quando priorizar confiabilidade em detrimento de outros objetivos e a identificar problemas de forma proativa antes que os usuários sejam afetados.” - Site Reliability Engineering Workbook

Note

Embora o capítulo não mencione diretamente o STPA, a definição de SLOs para capturar riscos sistêmicos e orientar melhorias proativas está alinhada com práticas como o STPA, que também busca antecipar falhas antes que se manifestem.


Implementação de SLOs aliados ao Framework STAMP

Note

A conexão com SLOs é uma extensão interpretativa, pois o artigo original não menciona explicitamente a relação entre SLOs e o framework STAMP.

Embora o artigo original não conecte explicitamente os SLOs ao STAMP, ambos compartilham um objetivo comum: antecipar e mitigar riscos. Ao definir SLOs que capturam interações sistêmicas e comportamentos emergentes, é possível transformar métricas em ações práticas que previnem falhas.

Mas como poderíamos evoluir a análise de um SLO para capturar melhor os riscos sistêmicos e a experiência do usuário? E como medir a saúde de um sistema distribuído, que depende de dezenas de serviços interconectados? Um SLO tradicional não basta.

Ajustando SLOS para capturar riscos sistêmicos

Um SLO alinhado com o framework STAMP deve capturar a saúde do sistema considerando riscos sistêmicos, interações entre componentes e falhas de controle, em vez de se limitar a métricas isoladas como latência ou disponibilidade. Vejamos a seguir, um exemplo prático:

Exemplo de SLO Alinhado ao STAMP
O que queremos alcançar?
  • Garantir que um sistema de pagamento distribuído processe transações com segurança e confiabilidade, mesmo diante de falhas ou interações complexas.
SLO Tradicional
  • Disponibilidade: O sistema deve estar disponível 99,9% do tempo.

  • Latência: 95% das transações devem ser processadas em menos de 300 ms.

Esses SLOs são úteis, mas não capturam os riscos sistêmicos nem o impacto de interações complexas, que são fundamentais para sistemas distribuídos.

SLO alinhado ao STAMP
  • Controle de Transações Seguras: 99,9% das transações devem ser concluídas sem erros causados por falhas de controle, como duplicidades ou inconsistências entre sistemas.

  • Resiliência a Falhas: Durante falhas simuladas em um ou mais componentes críticos, o sistema deve manter uma taxa mínima de sucesso de 97% em transações válidas.

  • Integridade Operacional: Em cenários de carga elevada, a latência média de efetivação de transação entre serviços não deve exceder 500 ms, para evitar estados inconsistentes.

Como este SLO se alinha ao STAMP?
  • Foco em Controles: O STAMP analisa falhas como resultado de controles inadequados. Este SLO monitora explicitamente se os controles que evitam duplicações ou inconsistências estão funcionando como esperado.

  • Interações Sistêmicas: Ao incluir métricas que avaliam a sincronização entre serviços (ex.: latência de comunicação), o SLO considera interações que podem levar a falhas emergentes.

  • Resiliência Proativa: A exigência de desempenho durante cenários de falhas simuladas reflete a aplicação do STPA (System-Theoretic Process Analysis), que identifica e mitiga riscos sistêmicos antecipadamente.


Construindo Sistemas Resilientes

Outro aspecto relevante para sistemas distribuídos modernos é a validação da resiliência. O artigo “The Evolution of SRE at Google” sugere a simulação de falhas e o entendimento das interações entre componentes.

Testes de Resiliência

No capítulo “Design for Recovery” no livro Building Secure and Reliable Systems, é enfatizada a importância de projetar sistemas com a capacidade de recuperação em mente, antecipando falhas e estabelecendo processos para restaurar o funcionamento adequado, o que é essencial para a resiliência.

Todos os sistemas complexos enfrentam problemas de confiabilidade, e atacantes explicitamente tentam fazer com que os sistemas falhem ou se desviem de sua função pretendida. Durante as fases iniciais do desenvolvimento do produto, você deve antecipar tais falhas e planejar o processo inevitável de recuperação que se segue.” - Building Secure and Reliable Systems

Sistemas complexos enfrentam problemas inevitáveis. Mas e se pudéssemos antecipar esses problemas? Ferramentas como o Chaos Engineering permitem exatamente isso: transformar falhas simuladas em aprendizado e melhoria contínua.

Chaos Engineering

Note

A conexão com o Chaos Engineering é uma extensão interpretativa, pois o artigo original não menciona explicitamente a prática.

Embora não mencionado diretamente no artigo original, o Chaos Engineering é uma prática reconhecida para validar a resiliência em sistemas distribuídos. Introduzindo falhas controladas em um sistema para testar sua capacidade de resistir a condições adversas e identificar pontos fracos.

“O Chaos Engineering permite que as organizações criem um plano mais informado sobre como lidar com problemas que ocorrerão no futuro. Organizações que adotam o Chaos Engineering terão planos específicos para muitos incidentes, permitindo reparos mais rápidos e menos tempo de inatividade.” - IBM - What is Chaos Engineering?

Imagine introduzir falhas controladas em no sistema de autenticação STS para verificar a resiliência das aplicações dependentes. Essa abordagem, central no Chaos Engineering, permite identificar vulnerabilidades antes que impactem os usuários.

Vejamos um exemplo prático:

Exemplo de Hipótese
  • Cenário: O STS é responsável por emitir tokens de autenticação e autorização para centenas de serviços interdependentes. Sua falha pode causar indisponibilidade generalizada.

  • Hipótese: Se o STS falhar parcialmente (por exemplo, atraso na emissão de tokens), os serviços dependentes irão continuar operando com tokens em cache ou em um modo de fallback sem comprometer a segurança?

Exemplo de Experimento
  1. Objetivo:

    • Validar a resiliência do sistema frente a falhas parciais ou totais do STS, garantindo que serviços dependentes mantenham a operação com impacto mínimo para o usuário.
  2. Simulação:

    • Introduzir latência artificial no STS para simular uma sobrecarga.
    • Simular uma falha completa no serviço de emissão de tokens.
  3. Métricas observadas:

    • Taxa de Sucesso de Autenticação: Percentual de requisições autenticadas com sucesso pelos serviços dependentes.
    • Tempo Médio de Resposta: Latência observada nos serviços dependentes.
    • Ativação de Circuit Breaker: Quantidade de serviços que ativaram mecanismos de cache ou fallback.
  4. Resultados:

    • Verificar se os serviços mantiveram a operação durante a falha do STS.
    • Identificar componentes que não ativaram o fallback ou foram impactados de forma crítica.
  5. Ações corretivas:

    • Ajustar políticas de cache para prolongar o tempo de validade de tokens em cenários de falha.
    • Implementar mecanismos de failover para um STS secundário.

Essa prática complementa os testes de resiliência, focando na introdução de falhas controladas para avaliar a robustez do sistema e identificar vulnerabilidades. A validação da resiliência é essencial para sistemas distribuídos modernos.


Conclusão: Um novo paradigma para o SRE

A evolução do SRE no Google reforça a necessidade de práticas mais avançadas para lidar com a complexidade dos sistemas modernos. A integração de frameworks como STAMP, aliada a metodologias de resiliência e monitoramento avançado, posiciona o SRE como um pilar estratégico para organizações de tecnologia.

A adoção do STAMP representa uma evolução significativa na prática de SRE. Em vez de apenas reagir a problemas, esse modelo permite que equipes antecipem riscos e projetem sistemas mais resilientes, mudando o papel do SRE de um “resolvedor de incidentes” para um “estrategista de confiabilidade”.

Se o SRE tradicional é o presente, o STAMP e suas práticas proativas são o futuro. Aí ao final de todo este estudo e análise das metodologias, fico me questionando: Estaríamos nós, SREs tradicionais, preparados para essa transformação? 🤔

Principais Lições
  1. Sistemas modernos exigem uma abordagem sistêmica para antecipar falhas.

  2. Ferramentas como STPA e CAST ajudam a entender riscos e causas profundas.

  3. SLOs e monitoramento avançado são indispensáveis para capturar métricas relevantes.

  4. Práticas de resiliência, como Chaos Engineering, são essenciais para validar a robustez.


Referências combinadas

comments powered by Disqus