Split Clients#

O módulo gera variáveis para testes A/B, lançamentos canário e outros cenários que roteiam uma porcentagem específica de clientes para um servidor ou configuração enquanto direcionam o restante para outro lugar.

Exemplo de Configuração#

stream {
    # ...
    split_clients "${remote_addr}AAA" $upstream {
                  0.5%                feature_test1;
                  2.0%                feature_test2;
                  *                   production;
    }

    server {
        # ...
        proxy_pass $upstream;
    }
}

Diretivas#

split_clients#

Sintaxe

split_clients string $variable { ... }

Padrão

Contexto

stream

Cria uma $variable fazendo hash da string; variáveis na string são substituídas, o resultado é transformado em hash, e o valor do hash é usado para selecionar o valor string da $variable.

A função hash usa MurmurHash2 (32-bit), e toda sua faixa de valores (0 a 4294967295) é mapeada para buckets em ordem de aparição; as porcentagens determinam o tamanho dos buckets. Um curinga (*) pode aparecer no final; hashes que não se encaixam em outros buckets são mapeados para seu valor atribuído.

Exemplo:

split_clients "${remote_addr}AAA" $variant {
               0.5%               .one;
               2.0%               .two;
               *                  "";
}

Aqui, após a substituição na string $remote_addrAAA, os valores de hash são distribuídos da seguinte forma:

  • valores de 0 a 21474835 (0,5%) produzem .one

  • valores de 21474836 a 107374180 (2%) produzem .two

  • valores de 107374181 a 4294967295 (todos os outros) produzem "" (uma string vazia)