A execução de qualquer plataforma distribuída escalável exige um compromisso com a confiabilidade, para garantir que os clientes tenham o que precisam quando precisam. As dependências podem ser bastante complexas, especialmente com uma plataforma tão grande quanto o Roblox. Construir serviços confiáveis significa que, independentemente da complexidade e do status das dependências, nenhum serviço será interrompido (ou seja, altamente disponível), funcionará sem bugs (ou seja, alta qualidade) e sem erros (ou seja tolerância ao erro).
Por que a confiabilidade é importante
Nossa equipe de Identidade de Conta está comprometida em alcançar maior confiabilidade, pois os serviços de conformidade que criamos são componentes essenciais da plataforma. A quebra de conformidade pode ter consequências graves. O custo de bloquear a operação natural do Roblox é muito alto, com recursos adicionais necessários para se recuperar após uma falha e uma experiência de usuário enfraquecida.
A abordagem típica de confiabilidade concentra-se principalmente na disponibilidade, mas em alguns casos os termos são misturados e mal utilizados. A maioria das medições de disponibilidade apenas avalia se os serviços estão funcionando, enquanto aspectos como tolerância de partição e consistência às vezes são esquecidos ou mal compreendidos.
De acordo com o teorema CAP, qualquer sistema distribuído pode garantir apenas dois desses três aspectos, portanto, nossos serviços de conformidade sacrificam alguma consistência para serem altamente disponíveis e tolerantes a partições. No entanto, nossos serviços sacrificaram pouco e encontraram mecanismos para alcançar uma boa consistência com mudanças arquitetônicas razoáveis explicadas abaixo.
O processo para alcançar maior confiabilidade é iterativo, com medição rigorosa combinando trabalho contínuo para prevenir, encontrar, detectar e corrigir defeitos antes que ocorram incidentes. Nossa equipe identificou forte valor nas seguintes práticas:
- Medida certa – Construir total observabilidade sobre como a qualidade é entregue aos clientes e como as dependências entregam qualidade para nós.
- Antecipação proativa – Executar atividades como revisões de arquitetura e avaliações de risco de dependência.
- Priorizar a correção – Dar maior atenção à resolução de relatórios de incidentes para o serviço e dependências vinculadas ao nosso serviço.
Construir maior confiabilidade exige uma cultura de qualidade. Nossa equipe já estava investindo em desenvolvimento orientado ao desempenho e sabe que o sucesso de um processo depende de sua adoção. A equipe adotou integralmente esse processo e aplicou as práticas como padrão. O diagrama a seguir destaca os componentes do processo:
O poder da medição correta
Antes de se aprofundar nas métricas, há um rápido esclarecimento a ser feito sobre as medições de nível de serviço.
- SLO (Service Level Objective) é o objetivo de confiabilidade que nossa equipe almeja (ou seja, 99.999%).
- SLI (Service Level Indicator) é a confiabilidade alcançada em um prazo (ou seja, 99.975% em fevereiro passado).
- SLA (Service Level Agreement) é a confiabilidade acordada para entregar e ser esperada por nossos consumidores em um determinado prazo (ou seja, 99.99% por semana).
O SLI deve refletir a disponibilidade (sem respostas não tratadas ou ausentes), a tolerância a falhas (sem erros de serviço) e a qualidade alcançada (sem erros inesperados). Portanto, definimos nosso SLI como o “Success Ratio” de respostas bem-sucedidas em relação ao total de solicitações enviadas a um serviço. Respostas bem-sucedidas são aquelas solicitações que foram despachadas em tempo e forma, o que significa que não conectividade, serviço ou erros inesperados aconteceram.
Este SLI ou Índice de Sucesso é coletado do ponto de vista dos consumidores (ou seja, clientes). A intenção é medir a experiência real de ponta a ponta entregue aos nossos consumidores para que tenhamos certeza de que os SLAs são cumpridos. Não fazer isso criaria uma falsa sensação de confiabilidade que ignora todas as preocupações de infraestrutura para se conectar com nossos clientes. Semelhante ao SLI do consumidor, coletamos o SLI de dependência para rastrear qualquer risco potencial. Na prática, todos os SLAs de dependência devem estar alinhados com o SLA de serviço e há uma dependência direta com eles. O fracasso de um implica o fracasso de todos. Também rastreamos e relatamos métricas do próprio serviço (ou seja, servidor), mas essa não é a fonte prática para alta confiabilidade.
Além dos SLIs, cada compilação coleta métricas de qualidade que são relatadas pelo nosso fluxo de trabalho de CI. Essa prática ajuda a reforçar fortemente os portões de qualidade (ou seja, a cobertura de código) e relatar outras métricas significativas, como conformidade com o padrão de codificação e análise de código estático. Este tópico foi abordado anteriormente em outro artigo, Criando microsserviços orientados pelo desempenho. A observância diligente da qualidade soma-se quando se fala em confiabilidade, pois quanto mais investimos em alcançar excelentes pontuações, mais confiantes ficamos de que o sistema não falhará em condições adversas.
Nossa equipe tem dois painéis. O One oferece toda a visibilidade do SLI de Consumidores e do SLI de Dependências. O segundo mostra todas as métricas de qualidade. Estamos trabalhando para unir tudo em um único dashboard, para que todos os aspectos que nos interessam estejam consolidados e prontos para serem reportados em qualquer prazo.
Antecipar falha
fazendo Revisões arquitetônicas é uma parte fundamental de ser confiável. Primeiro, determinamos se a redundância está presente e se o serviço tem os meios para sobreviver quando as dependências caem. Além das ideias típicas de replicação, a maioria de nossos serviços aplicou técnicas aprimoradas de hidratação de cache duplo, estratégias de recuperação dupla (como filas locais de failover) ou estratégias de perda de dados (como suporte transacional). Esses tópicos são extensos o suficiente para justificar outra entrada de blog, mas, em última análise, a melhor recomendação é implementar ideias que considerem cenários de desastre e minimizem qualquer penalidade de desempenho.
Outro aspecto importante a ser antecipado é qualquer coisa que possa melhorar a conectividade. Isso significa ser agressivo em relação à baixa latência para os clientes e prepará-los para tráfego muito alto usando técnicas de controle de cache, sidecars e políticas de desempenho para tempos limite, disjuntores e novas tentativas. Essas práticas se aplicam a qualquer cliente, incluindo caches, armazenamentos, filas e clientes interdependentes em HTTP e gRPC. Isso também significa melhorar os sinais íntegros dos serviços e entender que as verificações de integridade desempenham um papel importante em toda a orquestração de contêineres. A maioria de nossos serviços faz melhores sinais de degradação como parte do feedback de verificação de integridade e verifica se todos os componentes críticos estão funcionais antes de enviar sinais saudáveis.
Dividir os serviços em partes críticas e não críticas provou ser útil para focar na funcionalidade que mais importa. Costumávamos ter endpoints somente para administradores no mesmo serviço e, embora não fossem usados com frequência, eles impactavam as métricas gerais de latência. Movê-los para seu próprio serviço impactou todas as métricas em uma direção positiva.
Avaliação de Risco de Dependência é uma ferramenta importante para identificar problemas potenciais com dependências. Isso significa que identificamos dependências com baixo SLI e solicitamos o alinhamento do SLA. Essas dependências precisam de atenção especial durante as etapas de integração, portanto, dedicamos mais tempo para avaliar e testar se as novas dependências estão maduras o suficiente para nossos planos. Um bom exemplo é a adoção antecipada que tivemos para o Roblox Storage-as-a-Service. A integração com este serviço exigiu o preenchimento de tíquetes de bugs e reuniões periódicas de sincronização para comunicar descobertas e feedback. Todo esse trabalho usa a tag “confiabilidade” para que possamos identificar rapidamente sua origem e prioridades. A caracterização acontecia com frequência até termos a confiança de que a nova dependência estava pronta para nós. Esse trabalho extra ajudou a puxar a dependência para o nível exigido de confiabilidade que esperamos entregar atuando em conjunto para um objetivo comum.
Traga a estrutura para o caos
Nunca é desejável ter incidentes. Mas quando eles acontecem, há informações significativas para coletar e aprender para ser mais confiável. Nossa equipe tem um relatório de incidentes de equipe criado acima e além do relatório típico de toda a empresa, por isso nos concentramos em todos os incidentes, independentemente da escala de seu impacto. Chamamos a causa raiz e priorizamos todo o trabalho para mitigá-la no futuro. Como parte deste relatório, convocamos outras equipes para corrigir incidentes de dependência com alta prioridade, acompanhar a resolução adequada, fazer retrospecto e procurar padrões que possam se aplicar a nós.
A equipe produz um Relatório Mensal de Confiabilidade por Serviço que inclui todos os SLIs explicados aqui, todos os tickets que abrimos devido à confiabilidade e quaisquer possíveis incidentes associados ao serviço. Estamos tão acostumados a gerar esses relatórios que o próximo passo natural é automatizar sua extração. Fazer essa atividade periódica é importante e é um lembrete de que a confiabilidade está sendo constantemente rastreada e considerada em nosso desenvolvimento.
Nossa instrumentação inclui métricas personalizadas e alertas aprimorados para que sejamos chamados o mais rápido possível quando ocorrerem problemas conhecidos e esperados. Todos os alertas, incluindo falsos positivos, são revisados toda semana. Neste ponto, o polimento de toda a documentação é importante para que nossos consumidores saibam o que esperar quando os alertas são acionados e quando ocorrem erros, e então todos sabem o que fazer (por exemplo, manuais e diretrizes de integração são alinhados e atualizados com frequência).
Em última análise, a adoção da qualidade em nossa cultura é o fator mais crítico e decisivo para alcançar maior confiabilidade. Podemos observar como essas práticas aplicadas ao nosso dia a dia já estão dando resultado. Nossa equipe é obcecada pela confiabilidade e é nossa conquista mais importante. Aumentamos nossa conscientização sobre o impacto que os defeitos em potencial podem ter e quando eles podem ser introduzidos. Os serviços que implementaram essas práticas atingiram consistentemente seus SLOs e SLAs. Os relatórios de confiabilidade que nos ajudam a rastrear todo o trabalho que temos feito são uma prova do trabalho que nossa equipe fez e são lições valiosas para informar e influenciar outras equipes. É assim que a cultura de confiabilidade atinge todos os componentes de nossa plataforma.
O caminho para uma maior confiabilidade não é fácil, mas é necessário se você quiser construir uma plataforma confiável que reimagine como as pessoas se reúnem.
Alberto é Engenheiro de Software Principal na equipe de Identidade de Conta da Roblox. Ele está na indústria de jogos há muito tempo, com créditos em muitos títulos de jogos AAA e plataformas de mídia social com forte foco em arquiteturas altamente escaláveis. Agora ele está ajudando a Roblox a alcançar crescimento e maturidade aplicando as melhores práticas de desenvolvimento.
O posto Fornecendo confiabilidade de plataforma em grande escala apareceu pela primeira vez em Blog do Roblox.
- "
- a
- Sobre
- Conta
- Alcançar
- alcançado
- atividades
- atividade
- Adição
- Adicional
- Adoção
- adverso
- Acordo
- Todos os Produtos
- já
- análise
- Outro
- antecipar
- aplicado
- Aplicar
- Aplicando
- abordagem
- arquitetônico
- por aí
- artigo
- associado
- por WhatsApp.
- automatizar
- disponibilidade
- disponível
- consciência
- Porque
- antes
- ser
- abaixo
- referência
- MELHOR
- Pós
- Blog
- trazer
- Bug
- construir
- chamada
- Cuidado
- casos
- Causar
- Cheques
- clientes
- código
- Codificação
- coletar
- como
- commit
- compromisso
- comprometido
- comum
- comunicar
- comparado
- compliance
- componentes
- condições
- confiança
- confiante
- Contato
- Conectividade
- Considerar
- constantemente
- consumidor
- Consumidores
- Recipiente
- núcleo
- poderia
- crio
- criado
- Créditos
- crítico
- Cultura
- personalizadas
- Clientes
- painel de instrumentos
- dados,
- mais profunda
- entregue
- entregando
- entrega
- demandas
- depende
- Determinar
- Desenvolvimento
- diretamente
- desastre
- distribuído
- down
- dirigido
- durante
- Cedo
- end-to-end
- engenheiro
- especialmente
- todos
- tudo
- exemplo
- excelente
- esperar
- esperado
- vasta experiência
- extenso
- Falha
- retornos
- Primeiro nome
- Fixar
- Foco
- concentra-se
- focando
- seguir
- seguinte
- formulário
- encontrado
- da
- cheio
- funcional
- funcionalidade
- fundamental
- futuro
- jogo
- Portões
- gerando
- meta
- Bom estado, com sinais de uso
- Growth
- garanta
- orientações
- acontecer
- aconteceu
- Saúde
- ajudar
- ajuda
- ajuda
- SUA PARTICIPAÇÃO FAZ A DIFERENÇA
- Alta
- superior
- destaques
- altamente
- Como funciona o dobrador de carta de canal
- HTTPS
- idéias
- identificar
- Identidade
- Impacto
- executar
- implementado
- importante
- melhorar
- melhorado
- melhorar
- Em outra
- inclui
- Incluindo
- aumentou
- indústria
- influência
- INFORMAÇÕES
- Infraestrutura
- integração
- Intenção
- investir
- IT
- se
- Saber
- conhecido
- APRENDER
- Nível
- pequeno
- local
- longo
- olhar
- fazer
- correspondente
- Matéria
- maduro
- maturidade
- significado
- significativo
- significa
- a medida
- Mídia
- reuniões
- Métrica
- misto
- mais
- a maioria
- em movimento
- natural
- necessário
- mesmo assim
- operar
- operação
- orquestração
- ordem
- Outros
- global
- próprio
- parte
- Pessoas
- atuação
- peças
- planos
- plataforma
- Plataformas
- Jogar
- ponto
- Ponto de vista
- políticas
- positivo
- possível
- potencial
- poder
- prática
- presente
- Diretor
- prioridade
- problemas
- processo
- qualidade
- Links
- rapidamente
- alcançar
- razoável
- Recuperar
- recuperação
- refletir
- em relação a
- confiável
- Denunciar
- Relatórios
- pedidos
- requeridos
- Recursos
- Opinões
- Risco
- estrada
- Roblox
- Tipo
- raiz
- corrida
- mesmo
- escalável
- Escala
- sentido
- serviço
- Serviços
- semelhante
- desde
- solteiro
- So
- Redes Sociais
- meios de comunicação social
- sociais plataformas de mídia
- Software
- Engenheiro de Software
- alguns
- especial
- suporte
- padrão
- Status
- lojas
- estratégias
- mais forte,
- sucesso
- bem sucedido
- ajuda
- .
- falando
- Profissionais
- técnicas
- condições
- teste
- A
- assim sendo
- três
- bilhetes
- tempo
- prazo
- juntos
- tolerância
- ferramenta
- tópico
- Temas
- pista
- tráfego
- compreensão
- us
- valor
- verificar
- Ver
- visibilidade
- semana
- O Quê
- se
- enquanto
- sem
- Atividades:
- trabalhar
- seria