Como dividir o tráfego

Divida o tráfego para distribuir um percentual dele entre duas ou mais versões de um serviço. Assim, você realiza testes A/B entre elas e tem controle sobre o ritmo do lançamento de recursos.

A divisão de tráfego é aplicada a URLs que não segmentam uma versão explicitamente. Por exemplo, os seguintes URLs dividem o tráfego porque eles segmentam todas as versões disponíveis no serviço especificado:

  • [MY_PROJECT].appspot.com: distribui o tráfego para as versões do serviço default.
  • [MY_SERVICE].[MY_PROJECT].appspot.com: distribui o tráfego para as versões do serviço [MY_SERVICE].

Para informações sobre como as solicitações alcançam uma versão, consulte Como as solicitações são encaminhadas.

Antes de começar

Antes de configurar o tráfego para uma versão, verifique se a conta de usuário inclui os privilégios obrigatórios.

Como evitar problemas de armazenamento em cache

Antes de ativar a divisão de tráfego, você precisa se preparar para possíveis problemas de cache. Eles ocorrem em qualquer aplicativo do App Engine, principalmente na implantação de uma nova versão. Muitas vezes, a divisão de tráfego deixa pequenos problemas de cache mais evidentes.

Por exemplo, suponha que você divida o tráfego entre duas versões, A e B, e algum recurso externo armazenável em cache tenha sido alterado entre elas. Por exemplo, um arquivo CSS. Agora, suponha que um cliente faça uma solicitação, e a resposta contenha uma referência externa ao arquivo em cache. O cache HTTP local recupera o arquivo se ele estiver no cache, seja qual for a versão do arquivo armazenada e a versão do aplicativo que enviou a resposta. O recurso em cache pode ser incompatível com os dados que foram enviados na resposta.

Para evitar problemas de cache:

  • Em recursos dinâmicos, defina os cabeçalhos Cache-Control e Expires. Eles dizem aos proxies que o recurso é dinâmico. É melhor configurar ambos os cabeçalhos, já que nem todos os servidores proxy são compatíveis corretamente com o cabeçalho Cache-Control HTTP/1.1.

    Para mais informações sobre armazenamento em cache no geral, consulte os artigos "Campos de cabeçalhos" na RFC do HTTP/1.1 e "Armazenamento em cache de documentos" no manual de segurança do navegador (ambos em inglês).

  • Nos recursos estáticos armazenáveis em cache que variam entre as versões, altere o URL do recurso entre elas. Se os recursos estáticos são veiculados usando diferentes URLs, ambas as versões podem coexistir em servidores proxy e caches de navegador.

Também é possível definir o cabeçalho Vary: Cookie do app para que a singularidade de um recurso seja computada ao combinar os cookies e o URL da solicitação. No entanto, essa abordagem aumenta a carga sobre os servidores de cache. Há mil valores possíveis para GOOGAPPUID e, portanto, mil entradas possíveis para cada URL do app. Dependendo da carga nos proxies entre os usuários e o app, isso pode diminuir a taxa de ocorrência em cache. Além disso, nas primeiras 24 horas após adicionar um novo lote de usuários a uma versão, eles ainda podem ver recursos em cache. No entanto, ao usar Vary: Cookie, fica mais fácil renomear recursos estáticos que mudam entre as versões.

A técnica do Vary: Cookie não funciona em todas as circunstâncias. Em geral, se o app usa cookies para outras finalidades, você precisa pensar em como isso afeta a carga nos servidores proxy. Se codeninja tiver seu próprio cookie com 100 valores possíveis, então o espaço de todas as entradas de cache possíveis será um número muito grande (100 * 1.000 = 100.000). No pior caso, há um único cookie para todos os usuários. Dois exemplos comuns disso são o Google Analytics (__utma) e o SiteCatalyst (s_vi). Nesses casos, cada usuário recebe uma cópia exclusiva, o que afeta negativamente o desempenho do cache e também pode aumentar as horas de instância faturáveis consumidas pelo app.

Como dividir o tráfego em várias versões

Depois de especificar duas ou mais versões para a divisão, você precisa escolher se usará um endereço IP ou um cookie HTTP no processo. É mais fácil configurar uma divisão com endereços IP, mas o método com cookies é mais preciso. Para mais informações, consulte Como dividir por endereços IP e Como dividir por cookies.

Console

Para dividir o tráfego no console do GCP, acesse a página "Versões":

Acessar a página "Versões"

  1. Selecione uma ou mais versões em que você quer dividir o tráfego.
  2. Clique em Dividir tráfego e especifique:
    • O método que você quer usar no processo.
    • O percentual de tráfego que cada versão receberá.

gcloud

Depois de instalar o Google Cloud SDK, execute o seguinte comando para dividir o tráfego em várias versões. Por exemplo:

gcloud app services set-traffic [MY_SERVICE] --splits [MY_VERSION1]=[VERSION1_WEIGHT],[MY_VERSION2]=[VERSION2_WEIGHT] --split-by [IP_OR_COOKIE]

Para saber mais detalhes e opções, consulte a referência gcloud app services set-traffic.

API

Para migrar o tráfego de maneira programática, use a Admin API. Para saber mais, consulte Como migrar e dividir o tráfego.

Como dividir por endereços IP

Ao escolher esse método, o aplicativo faz o hash do endereço IP para um valor entre 0 e 999 quando recebe uma solicitação. Depois, ele usa esse número para roteá-la.

A divisão por endereço IP tem algumas limitações importantes:

  • Os endereços IP são razoavelmente fixos, mas não são permanentes. O endereço IP dos usuários que se conectam usando celulares pode mudar ao longo de uma única sessão. Isso também acontece com um usuário que leva seu laptop a diferentes lugares para trabalhar. Como resultado, os usuários podem ter uma experiência inconsistente no app, já que o endereço IP muda.
  • Como os endereços IP são atribuídos às versões de maneira independente, a divisão de tráfego resultante é um pouco diferente do que você especifica. No entanto, a divisão fica mais similar ao seu objetivo conforme o aplicativo recebe mais tráfego. Por exemplo, se você solicitar que 5% do tráfego seja fornecido a uma versão alternativa, a porcentagem inicial estará entre 3% e 7%. Com o tempo, ela ficará mais próxima dos 5% pretendidos.
  • Se você precisar enviar solicitações internas entre os apps, use a divisão por cookies. As solicitações enviadas entre apps em execução na infraestrutura em nuvem do Google vêm de um pequeno número de endereços IP que provavelmente são todos atribuídos à mesma versão. Portanto, todas as solicitações internas podem funcionar da mesma forma que aquelas enviadas de um único endereço IP. Isso significa que essas solicitações são todas roteadas para a mesma versão. Como resultado, as solicitações internas não respeitam exatamente os percentuais definidos para as divisões de tráfego baseadas em IP. Por exemplo, se você definir que uma versão receba 1% de todo o tráfego para seu app, e os endereços de infraestrutura em nuvem do Google tenham sido atribuídos a ela, o resultado real pode exceder muito o 1%. Isso acontece porque todas as solicitações internas são sempre roteadas para a versão atribuída. As solicitações enviadas ao seu app de fora da infraestrutura em nuvem do Google funcionam conforme o esperado, já que elas vêm de uma distribuição variada de endereços IP.

Se você dividir o tráfego do aplicativo por cookies, será buscado no cabeçalho da solicitação HTTP um cookie chamado GOOGAPPUID, contendo um valor entre 0 e 999:

  • Se o cookie existe, o valor será usado para rotear a solicitação.
  • Caso contrário, a solicitação será roteada aleatoriamente.

Se a resposta não tiver o cookie GOOGAPPUID, o app primeiro adicionará um valor aleatório entre 0 e 999 a GOOGAPPUID antes de enviar.

Usar cookies para dividir o tráfego facilita a atribuição correta de usuários às versões. A precisão do roteamento de tráfego pode chegar 0,1% perto da divisão pretendida. No entanto, a divisão por cookies tem as seguintes limitações:

  • Se você estiver gravando um app para dispositivos móveis ou executando um cliente de área de trabalho, eles precisarão gerenciar os cookies GOOGAPPUID. Por exemplo, quando um cabeçalho de resposta Set-Cookie é usado, você precisa armazenar o cookie e incluí-lo em cada solicitação posterior. Os apps baseados no navegador já gerenciam os cookies dessa maneira automaticamente.

  • Dividir as solicitações internas requer trabalho extra. Todas as solicitações de usuário enviadas na infraestrutura em nuvem do Google exigem que você encaminhe o cookie em cada uma delas. Por exemplo, você precisa encaminhar o cookie do usuário nas solicitações enviadas do seu app para outro aplicativo ou para ele mesmo. Não é recomendado enviar solicitações internas se elas não se originam de um usuário.

Como desativar a divisão do tráfego

Para fazer isso, migre todo o tráfego para uma única versão.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Ambiente flexível do App Engine para documentos .NET