<!-- review: finished -->

<a id="stream-split-clients"></a>

# 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.

<a id="configuration-example-70"></a>

## Exemplo de Configuração

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

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

<a id="directives-79"></a>

## Diretivas

<a id="index-0"></a>

<a id="s-split-clients"></a>

### split_clients

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `split_clients` string $variable { ... }   |
|-------------------------------------------------------------------------------------------|--------------------------------------------|
| Padrão                                                                                    | —                                          |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | 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](https://en.wikipedia.org/wiki/MurmurHash#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:

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

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

- valores de 0 a 21474835 (0,5%) resultam em `.one`
- valores de 21474836 a 107374180 (2%) resultam em `.two`
- valores de 107374181 a 4294967295 (todos os outros) resultam em `""`
  (uma string vazia)
