Resiliência em microservices cache distribuído, feedback e tuning na Globo.com Agenda Contexto Introdução Casos de uso Perguntas De onde viemos G1 Globo Esporte GShow Techtudo Para onde vamos G1 Globo Esporte GShow Techtudo Monolito Micro-serviços Resiliência Resiliência Resiliência ● Não é uma flag que ativa a resiliência de sua aplicação Resiliência ● Não é um único ponto de controle ● Nada é 100% resiliente ● Não é determinístico Substantivo feminino 1. Propriedade que alguns corpos apresentam de retornar à forma original após terem sido submetidos a uma deformação elástica; 2. Capacidade de se recobrar facilmente ou se adaptar à má sorte ou às mudanças; Resiliência Resiliência Resiliência Capacidade de superar adversidades Promovendo resiliência Passo 3 Passo 1 Identifique o perfil da aplicação Passo 2 Ordene os principais pontos de falha Proponha soluções que promovam a resiliência Passo 1 Negócio Passo 2 Negócio Os conteúdos devem estar sempre atualizadas e nunca deixar de ser entregue aos usuários. Passo 3 Vários níveis de cache do conteúdo Negócio O Expurgo é proativo Passo 1 Platform as a service Cloud Passo 2 Cloud Se minha aplicação saturar algum recurso computacional eu preciso distribuir a carga Passo 3 Elasticidade automatizada CPU: 50% Cloud CPU: 95% CPU: 85% CPU: 50% CPU: 50% Passo 1 Aplicação Accounts Passo 2 Aplicação Se os micro-serviços que eu integro falharem como eu garanto minha autenticação Passo 3 Quebra de circuito (Circuit breaker) Aplicação x% de falha envia email para garantir autenticação Passo 1 Clientes APIs Passo 2 Clientes Se o meu serviço ficar indisponível o que meus clientes devem fazer Passo 3 Clientes devem fazer Clientes Retry Backoff Cache Passo 1 Sistema Operacional Varnish Passo 2 Sistema Operacional À medida que o acesso aumentava, tivemos paginação em disco e problemas com conexões Passo 1 CacheOS User space Sistema Operacional Kernel space Tunning de memória Tunning TCP/IP Passo 1 Serviço Passo 2 Serviço Como adicionar novas aplicações sem alterar meus serviços atuais? Passo 3 ● ● Serviço Agregação de APIs Reforço na disponibilidade de seu BFF Passo 1 Monitoração Passo 2 Monitoração Como maximizar o tempo de detecção e recuperação de falhas? Passo 3 Sistemas de feedback ● ● ● ● Monitoração Zabbix Sentry Páginas de status - cachet Measures (Kibana as a service) Passo 1 Arquitetura APIs Passo 2 Arquitetura Como garantir que mudanças possam acontecer sem impactar meus clientes? Passo 3 Tenants Arquitetura APIs G1 GE GS Passo 1 Algoritmo APIs Passo 2 Algoritmo Como contabilizar votos de maneira a minimizar o tempo de resposta Passo 3 Buffer em memória ... 1000 votos ou 10 segundos Algoritmo ● Baixo processamento ● 16 mil votos simultâneos (BBB17) ● 141 milhões de votos totais (BBB17) ● Kernel time_wait de 60s para 15s Passo 1 Rede Passo 2 Rede Como distribuir um micro-serviço de modo a maximizar a disponibilidade? Passo 1 Balanceamento de carga Rede Resumindo Promover uma aplicação resiliente é uma tarefa evolutiva Cache Negócio Tunning Circuit breaker Cloud Aplicação Clientes SO Serviço Feedback Monitoração Arquitetura Buffer Algoritmo Rede Tenants Elasticidade Retry BFF Load balancer Resumindo Promover uma aplicação resiliente é uma tarefa evolutiva Passo 3 Passo 1 Identifique o perfil da aplicação Passo 2 Ordene os principais pontos de falha Proponha soluções que promovam a resiliência https://talentos.globo.com Dúvidas? https://blog.pantuza.com https://github.com/pantuza https://twitter.com/gpantuza