Apêndice A – Documento de exemplo de SLO

Este documento descreve os SLOs para o Serviço de Jogo Exemplo. 

  • Status: Publicado 
  • Autor: Steven Thurgood 
  • Data: 19-02-2018 
  • Revisores: David Ferguson 
  • Aprovadores: Betsy Beyer 
  • Data de Aprovação: 20-02-2018 
  • Data de Revisão: 01-02-2019 

Visão geral do serviço 

O Serviço de Jogo Exemplo permite que usuários de Android e iPhone joguem uns com os outros. O aplicativo roda nos telefones dos usuários, e os movimentos são enviados de volta para a API por meio de uma API REST. O banco de dados armazena os estados de todos os jogos atuais e anteriores. Um pipeline de pontuação lê esta tabela e gera classificações atualizadas para o dia de hoje, para a semana e de todos os tempos. Os resultados das classificações estão disponíveis no aplicativo, via API e também em um servidor HTTP público. 

O SLO utiliza uma janela deslizante de quatro semanas. 

SLIs e SLOs 

Categoria   SLI  SLO 
API 
Disponibilidade  A proporção de requisições bem-sucedidas, conforme medido pelas métricas do balanceador de carga. Qualquer status HTTP diferente de 500–599 é considerado bem-sucedido. 

contagem de “api” http_requests que não possuem um código de status 5XX  

dividido por  

contagem de todas as “api” http_requests 

97% de sucesso 
Latência  A proporção de requisições suficientemente rápidas, conforme medido pelas métricas do balanceador de carga.  

“Suficientemente rápido” é definido como < 400 ms ou < 850 ms. 

contagem de “api” http_requests com uma duração menor ou igual a “0,4” segundos  

dividida pela  

contagem de todas as “api” http_requests  

contagem de “api” http_requests com uma duração menor ou igual a “0,85” segundos  

dividida pela  

contagem de todas as “api” http_requests 

90% das requisições < 400 ms 

99% das requisições < 850 ms 

HTTP server 
Disponibilidade  A proporção de requisições bem-sucedidas, conforme medido pelas métricas do balanceador de carga. 

Qualquer status HTTP diferente de 500–599 é considerado bem-sucedido. 

Contagem de “web” http_requests que não possuem um código de status 5XX 

dividida pela 

contagem de todas as “web” http_requests 

99% 
Latência  A proporção de requisições suficientemente rápidas, conforme medido pelas métricas do balanceador de carga. 

“Suficientemente rápido” é definido como < 200 ms ou < 1.000 ms. 

Contagem de “web” http_requests com uma duração menor ou igual a “0,2” segundos 

dividida pela 

contagem de todas as “web” http_requests 

Contagem de “web” http_requests com uma duração menor ou igual a “1,0” segundos 

dividida pela 

contagem de todas as “web” http_requests 

90% das requisições < 200 ms 

99% das requisições < 1.000 ms 

Pipeline de pontuação 
Atualidade  A proporção de registros lidos da tabela de classificação que foram atualizados recentemente. 

“Recentemente” é definido como dentro de 1 minuto ou dentro de 10 minutos. 

Utiliza métricas da API e do servidor HTTP: 

Contagem de todas as data_requests para “api” e “web” com atualidade menor ou igual a 1 minuto 

dividida pela 

contagem de todas as data_requests 

Contagem de todas as data_requests para “api” e “web” com atualidade menor ou igual a 10 minutos 

dividida pela 

contagem de todas as data_requests 

90% das leituras usam dados escritos no último minuto. 

99% das leituras usam dados escritos nos últimos 10 minutos. 

Correção  A proporção de registros injetados na tabela de estados por um verificador de correção que resulta na leitura correta dos dados da tabela de classificação. 

Um verificador de correção injeta dados sintéticos, com resultados conhecidos e corretos, e exporta uma métrica de sucesso: 

Contagem de todas as data_requests que estavam corretas 

dividida pela 

contagem de todas as data_requests 

99,99999% dos registros injetados pelo verificador resultam na saída correta. 
Integridade  A proporção de horas em que 100% dos jogos no banco de dados foram processados (nenhum registro foi ignorado). 

Utiliza métricas exportadas pelo pipeline de pontuação: 

Contagem de todas as execuções do pipeline que processaram 100% dos registros 

dividida pela 

contagem de todas as execuções do pipeline 

99% das execuções do pipeline cobrem 100% dos dados. 

Justificativa 

Os SLIs de disponibilidade e latência foram baseados na medição do período de 01-01-2018 a 28-01-2018. Os SLOs de disponibilidade foram arredondados para baixo para o percentual inteiro mais próximo, e os tempos dos SLOs de latência foram arredondados para cima para o múltiplo de 50 ms mais próximo. Todos os outros números foram escolhidos pelo autor e os serviços foram verificados para estar operando nos níveis ou acima desses níveis. 

Ainda não foi feita uma tentativa de verificar se esses números se correlacionam fortemente com a experiência do usuário. 

Error Budget 

Cada objetivo tem um error budget separado, definido como 100% menos (–) a meta para esse objetivo. Por exemplo, se houve 1.000.000 de requisições ao servidor da API nas últimas quatro semanas, o error budget de disponibilidade da API é de 3% (100% – 97%) de 1.000.000: 30.000 erros. 

Implementaremos a política de error budget (veja o Apêndice B) quando qualquer um de nossos objetivos tiver esgotado seu error budget. 

Esclarecimentos e advertências 

  • As métricas de requisições são medidas no balanceador de carga. Esta medição pode não conseguir capturar com precisão os casos em que as requisições dos usuários não chegaram ao balanceador de carga. 
  • Contamos apenas os códigos de status HTTP 5XX como códigos de erro; tudo o mais é contado como sucesso. 
  • Os dados de teste usados pelo verificador de correção contêm aproximadamente 200 testes, que são injetados a cada 1 segundo. Nosso orçamento de erro é de 48 erros a cada quatro semanas. 
Rolar para cima