haproxy: Existe uma maneira de agrupar acls para maior eficiência?

4

Eu tenho uma lógica em um frontend que direciona para diferentes backends com base no host e no URL. Logicamente, é assim:

if hdr(host) ends with 'a.domain.com':
    if url starts with '/dir1/':
        use backend domain.com/dir1/
    elif url starts with '/dir2/':
        use backend domain.com/dir2/
    # ... else if ladder repeats on different dirs
elif hdr(host) ends with 'b.domain.com':
    # another else if ladder exactly the same as above
    # ...
# ... else if ladder repeats like this on different domains

Existe uma maneira de agrupar acls para evitar a verificação repetida do domínio acl?

Obviamente, é necessário usar uma declaração de back-end de uso para cada possibilidade, mas não quero ter que verificar o domínio repetidamente porque é muito ineficiente.

Em outras palavras, quero evitar isso:

use backend domain.com/url1/ if acl-domain.com and acl-url1
use backend domain.com/url2/ if acl-domain.com and acl-url2
use backend domain.com/url3/ if acl-domain.com and acl-url3
# tons more possibilities below

porque ele precisa continuar verificando o acl-domain.com.

Isso é particularmente um problema porque tenho regras específicas para subdomínios como a.domain.com e b.domain.com, mas quero voltar ao caso mais comum de * .domain.com. Isso significa que todas as regras que usam um subdomínio específico devem ser verificadas antes de * .domain.com, o que o torna ainda mais ineficiente para o caso comum.

    
por user41356 01.03.2011 / 22:39

1 resposta

2

Você está encontrando problemas de desempenho com seu aplicativo atual?

Se você definitivamente precisa melhorar o desempenho no nível HAProxy, sugiro usar uma instância HAProxy separada para cada subdomínio. Por exemplo, crie um novo servidor HAProxy e aponte a.domain.com diretamente para o novo servidor. Você também pode continuar apontando todas as entradas DNS para o servidor HAProxy principal e fazer com que a primeira camada HAProxy manipule apenas a correspondência de subdomínio.

É claro que, se você não tem problemas de desempenho, talvez seja melhor deixá-lo sozinho.

    
por 04.03.2011 / 01:20