HAProxy / Varnish: redirecionando uma porcentagem do tráfego

2

Estou tentando medir estatísticas separadas para duas versões diferentes de uma página da web. Por isso, preciso redirecionar uma determinada porcentagem do meu tráfego da web para uma página diferente daquela solicitada (por exemplo, 20% das solicitações da página_1 vão para a página_1.1). Não me parece que o verniz possa contar nativamente tráfego ou pedidos.
Estou pensando que eu poderia ter o back-end do Apache contando as solicitações, inserir um cabeçalho personalizado e, em seguida, fazer com que o Varnish enviasse uma reinicialização para o cliente se a resposta de back-end contivesse esse determinado cabeçalho.

Alguma ideia ou sugestão?

Felicidades,
Jeremy

EDIT: Eu esqueci de mencionar que há uma presença HAProxy na frente do verniz, então eu estava pensando que outra boa maneira de fazer isso poderia ser:

em HAProxy:
conta pedidos para page1
se contar > 80 inserir cabeçalho personalizado
if count = 100 contador de redefinição

Em Varnish
se o cabeçalho personalizado presente no pedido emitir a reinicialização do cliente com page1— > page1.1 reescreva

Não tenho certeza de como fazer isso com as tabelas ACL, gpc0 e stick. Estou estudando para encontrar uma solução: -)

Como sempre, ideias ou sugestões são mais do que bem-vindas

    
por jeremyjr 27.05.2015 / 14:40

1 resposta

1

Nunca precisei configurar um servidor Varnish, mas imagino que isso seja possível usando o gerador de balanceamento de carga com uma configuração round-robin.

Por exemplo, se você configurou 4 backend apontando para a versão antiga do seu site / página e 1 para a nova versão, como esta ...

backend old1 {
  .host = "old.example.com";
  .probe = { .url = "/"; .interval = 5s; .timeout = 1 s; .window = 5; .threshold = 3; }
}
backend old2 {
  .host = "old.example.com";
  .probe = { .url = "/"; .interval = 5s; .timeout = 1 s; .window = 5; .threshold = 3; }
}
backend old3 {
  .host = "old.example.com";
  .probe = { .url = "/"; .interval = 5s; .timeout = 1 s; .window = 5; .threshold = 3; }
}
backend old4 {
  .host = "old.example.com";
  .probe = { .url = "/"; .interval = 5s; .timeout = 1 s; .window = 5; .threshold = 3; }
}
backend new {
  .host = "new.example.com";
  .probe = { .url = "/"; .interval = 5s; .timeout = 1 s; .window = 5; .threshold = 3; }
}

E então um diretor que rodou entre eles ...

director blah round-robin {
  { .backend = old1; }
  { .backend = old2; }
  { .backend = old3; }
  { .backend = old4; }
  { .backend = new; }
}

A versão new.example.com do site receberia 20% do tráfego.

Isso é um pouco complicado (pode muito bem haver uma solução melhor), mas acredito que isso funcionaria.

    
por 29.05.2015 / 02:29