Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SLA 99,99 - RubyConf 2022

SLA 99,99 - RubyConf 2022

Poucos livros ensinam como transitar de uma simples aplicação para uma aplicação robusta que atende milhares de requisições por minuto. Aqui vamos falar algumas estratégias utilizadas para garantir velocidade de desenvolvimento e disponibilidade do serviço: migrations em 3 etapas, feature flags, e infraestrutura 100% redundante. Ainda assim, as coisas podem dar errado, tentar se recuperar o mais rápido possível, gerenciar a expectativa dos clientes e reduzir estresse da equipe são fundamentos essenciais para um bom SLA.

Daniel Libanori

September 09, 2022
Tweet

More Decks by Daniel Libanori

Other Decks in Programming

Transcript

  1. Daniel Libanori ♦ Trabalho com Ruby desde 2006 🎓 Formação:

    UFSCar e USP 󰞦 Passei por agências, startups e trabalhei autônomo Em 2010 junto com Marcelo Kramer e Michael Bernstein fundei a Clicksign
  2. Startup de assinatura digital Pioneira no Brasil Full remoto pré-pandemia

    Mais de 300 colaboradores Mais de 70 cidades Nas 5 regiões do Brasil Portugal, EUA e outros
  3. 🔐 | Trust 👥 | Empatia 🚀 | Proatividade 🎨

    | Capricho 󰟑 | Ritmo 🧐 | Visão Crítica Cultura e Valores
  4. Travessia Ubatuba - Cape Town Fevereiro de 2022 Atlântico Sul

    Veleiro de ~10m 5 tripulantes: 2 homens e 3 mulheres 35 dias seguidos de mar 6.200 km Ondas de 7 a 9 metros Ventos de +115 km/h
  5. O que a vela me ensinou sobre SLA Nervosismo não

    ajuda Trabalho em equipe “Quem tem um não tem nenhum” A direção é mais importante que a velocidade Planejar, fazer, checar e ajustar
  6. SLA (Service level Agreement) Definição dos resultados a serem obtidos

    Tempo de execução da atividade a ser desenvolvida Definir os responsáveis pelas atividades e o envolvimento que terão Definir as ferramentas que serão utilizadas Detalhar qual será a qualidade do trabalho que deverá ser entregue;
  7. Cenário “Não pode cair!” Clientes de grande porte Bilhões de

    registros Risco: contratos de R$ 1,00 até R$ 10.000.000,00 Operação “normal”: +30k reqs/min Não existe meia-noite Time distribuído geograficamente Alta expansão nos últimos anos
  8. Estratégias Minimize o tempo de deploy Dê atenção às migrations

    Deixe o trabalho duro para depois Tenha em mente a possibilidade de rollback Desligue parcialmente sua aplicação Tenha no mínimo dois Timeout pra tudo
  9. Minimize o tempo de deploy Construa tudo antes: imagens, assets

    etc Mude o comportamento por feature flags invés de imagens Controle o comportamento “por conta”
  10. Migrations problemáticas Se houver manipulação de dados pode demorar Banco

    sendo alterado com a aplicação funcionando pode dar ruim Rollback pode levar a inconsistências Rollback pode demorar tanto quanto a migration
  11. Safe Migrations: DDL & DML DDL • Deploy • Metainformações

    • O mais rápido possível DML • Runtime • Informações • O mais seguro possível
  12. safe-pg-migrations Lock timeout statement timeout no dll transaction safe: add_column,

    add_index, remove_index, add_foreign_key retries verbose
  13. Mas a gente não faz com rake task… cada conta

    tem um número aleatório entre 0 e 1: feature level migramos os clientes por fatia de feature level contas mais propensas à risco possuem feature level mais baixo contas menos propensas à risco possuem feature level mais alto cada migração pode ser encapsulado numa transação nossas regras de negócio permitem este approach
  14. Feature flags • Pete Hodgson em martinfowler.com • Categorias: ◦

    Release toggles ◦ Ops toggles ◦ Permission toggles ◦ Experiment toggles • Dinamismo • Duração • Vale uma talk!
  15. Ops Toggles Desligam parte da aplicação Sem prazo para serem

    retiradas Dinâmicas Podem ser globais ou per conta Reduzem a turbulência ou Ao menos permitem um “pouso seguro”
  16. Exemplos Estamos com problemas de indexação em contas grandes. Podemos

    desabilitar a barra de busca para apenas algumas contas.
  17. Desafios Estratégias de migrations (DDL) em multi-tenant Gerenciamento de feature

    toggles Instalações locais e multi cloud Expansão da equipe