Varnish: Como armazenar em cache para falha, sempre pergunte ao backend se está saudável?

1

Eu quero configurar o verniz (ainda na versão 3) da seguinte maneira:

Se o back-end estiver disponível, todas as solicitações devem ir para o back-end, portanto, nenhum resultado armazenado em cache deve ser usado. Se o back-end não estiver disponível (por isso, não é saudável), quero usar os resultados armazenados em cache para o dia seguinte. Se após um dia o backend ainda não estiver íntegro, um erro deverá ser exibido.

Eu tentei a seguinte configuração usando o mecanismo grace, mas isso não funciona: embora todas as solicitações estejam indo para o backend (então nenhuma resposta em cache se o backend está disponível), no caso de uma falha, eu instantaneamente um erro de verniz (não disponível) em vez de verniz usando os dados armazenados em cache. O que estou fazendo errado?

sub vcl_recv {
  if (req.backend.healthy) {
    # No caching if backend is healthy
    set req.grace = 1s;
  } else {
    # Otherwise accept requests up to 1 day old
    set req.grace = 1d;
  }
}

sub vcl_fetch {
  # Cached requests are not valid at all
  set beresp.ttl = 1s;

  # Keep requests for ttl + 1 d
  set beresp.grace = 1d;
}
    
por theomega 09.07.2014 / 15:01

1 resposta

0

Isso não é possível, até onde eu sei. Somente itens em cache podem ser exibidos gratuitamente. Você pode fazer isso modificando o Varnish, escrevendo o código C no vcl.

Os documentos de verniz são muito exaustivos, mergulhar neles pode ajudar também: link

    
por 07.11.2014 / 23:35

Tags