Manter a aplicação funcionando quando o cache falha

RedisBeginner
Pratique Agora

Introdução

A consulta deve continuar utilizável quando o cache opcional não responde. Observe a falha, limite a espera e habilite uma alternativa à origem; depois retome o cache e os hits.

Conclua Add a Cache to a Product Lookup. Esta VM independente fornece aplicação, DynamoDB e Valkey próprios. Use Terminal e AWS View. O controle preparado pausa somente o processo de cache deste laboratório; não é necessário construir uma ferramenta de falhas.

Relação com a certificação

Certificação Tarefa do exame Prática
Cloud Practitioner (CLF-C02) Task 3.4 Distinguir o cache em memória dos dados de referência e observar o comportamento da aplicação.

Visão conceitual deste laboratório

Observar um timeout real

Um timeout limita quanto a aplicação espera. Um processo pausado conserva seu endpoint sem responder, diferentemente de uma chave ausente.

Confirme identidade e configurações:

cd /home/labex/project
aws sts \
  get-caller-identity
cat app.json

O ARN termina em labex-ca03-operator. Os ajustes iniciais são timeout_seconds: 2 e fallback_on_error: false. Solicite duas vezes com o cache saudável:

curl -sS http://127.0.0.1:8080/api/products/101
curl -sS http://127.0.0.1:8080/api/products/101

A primeira consulta usa a origem; a segunda, o cache. Ative a falha preparada:

curl -sS -X POST \
  -H 'Content-Type: application/json' \
  --data '{"action":"pause"}' \
  http://127.0.0.1:8080/api/fault

Solicite o produto incluindo o status HTTP:

curl -sS -w '\nHTTP %{http_code}\n' \
  http://127.0.0.1:8080/api/products/101

A falha é intencional. Após cerca de dois segundos, a aplicação retorna HTTP 503 e failure: TimeoutError, embora o banco ainda contenha o produto. Uma falha de cache não deve automaticamente interromper o catálogo.

Limitar a espera e recorrer à origem

Fallback é um caminho alternativo deliberado após um erro do cache. Um miss comum indica apenas uma cópia ausente.

Nesta demonstração controlada, configure 0.2 segundo e habilite fallback:

jq '.timeout_seconds = 0.2 | .fallback_on_error = true' \
  app.json > app.next.json
mv app.next.json app.json

Mantenha o cache pausado e mostre o tempo da solicitação:

curl -sS -w '\nHTTP %{http_code}; elapsed %{time_total}s\n' \
  http://127.0.0.1:8080/api/products/101

HTTP 200 retorna preço atual 20.00, served_from: source e cache_error: TimeoutError. A espera controlada agora é cerca de 0.2 segundo. Cada solicitação durante a falha acrescenta uma leitura DynamoDB: mantém a funcionalidade, mas aumenta a carga da origem.

Em AWS View, compare timeout, estado pausado e contador. Essa medição em um ambiente não define timeout de produção, capacidade de carga ou garantias de disponibilidade AWS. Exemplo de AWS View com a cache pausada: com limite de 0.2 segundos e fallback ativado, TimeoutError resulta numa resposta da origem. Seu contador pode diferir.

Restaurar o cache e observar acertos

Cache saudável e fallback bem-sucedido são resultados diferentes. Retome o processo:

curl -sS -X POST \
  -H 'Content-Type: application/json' \
  --data '{"action":"resume"}' \
  http://127.0.0.1:8080/api/fault

Solicite o produto duas vezes:

curl -sS http://127.0.0.1:8080/api/products/101
curl -sS http://127.0.0.1:8080/api/products/101

Observe served_from: cache e cache_error: null. Se o TTL inicial expirou, a primeira solicitação repovoa a chave da origem e a seguinte é um hit. O contador deixa de crescer durante hits consecutivos.

Deixe o cache retomado e o fallback limitado habilitado para verificar. Em um serviço real, monitore erros e tráfego adicional; fallback não torna disponível um banco que também falhou. Exemplo após recuperar a cache: a resposta vem da cache sem erro. O limite e o fallback continuam ativados; o contador de leituras da origem não aumenta.

Resumo

Você observou um timeout real com o cache pausado, habilitou fallback limitado e restaurou hits. Misses e erros precisam de tratamentos distintos; fallback conserva respostas à custa de trabalho adicional no banco.

Para aprofundar o tema, consulte a documentação da AWS: Escolher tempos limite do cliente conforme a carga.