Pergunta

Estou começando a escrever algum código para testes A/B em um aplicativo da Web Grails. Quero garantir que as solicitações do mesmo endereço IP sempre vejam a mesma variação. Em vez de armazenar um mapa da variante ip->, é bom transformar o endereço IP em um número inteiro removendo os pontos e depois usá-lo como semente para um gerador de números aleatórios? A seguir, ocorre em um filtro de graals:

def ip = request.remoteAddr
def random = new Random(ip.replaceAll(/\./, '').toInteger())
def value = random.nextBoolean()
session.assignment = value
// value should always be the same for a given IP address

Sei que a identificação de usuários por endereço IP não é confiável e também usarei variáveis/cookies de sessão, mas isso parece ser útil para o caso em que temos uma nova sessão e nenhum conjunto de cookies (ou o usuário possui cookies Desativado).

Foi útil?

Solução

Você pode simplesmente pegar o número de 32 bits e fazer IP mod número_of_test_scenarios. Ou use uma função de hash padrão fornecida no Ruby. Mas sinto que devo apontar alguns problemas com esta abordagem:

  1. Se o seu aplicativo estiver por trás de qualquer proxies, o IP será o mesmo para todos os usuários desse proxy.
  2. Alguns usuários alteram o IPS com bastante frequência, com mais frequência do que você pensa. Talvez (como Joel Spolsky diz) "A Internet está quebrada para esses usuários", mas eu diria que é um desserviço aos seus clientes se você tornar a Internet mais quebrada para eles, especialmente de uma maneira sutil, já que eles provavelmente não estão em uma posição para fazer qualquer coisa a respeito.
  3. Para usuários que têm uma nova sessão, você pode apenas atribuir o cookie na primeira solicitação e manter as tarefas na memória; A menos que as solicitações iniciais de um usuário acessem vários servidores ao mesmo tempo, isso deve resolver esse problema (é o que faço no aplicativo que mantenho).
  4. Para usuários com cookies desativados, eu diria "a internet está quebrada" e eu não me esforçaria muito para apoiar esse caso; Eles seriam atribuídos a um balde de teste padrão e todos iriam para lá. Se você planeja apoiar muitos desses usuários de uma maneira não quebrada, está criando um trabalho para si mesmo, mas talvez esteja tudo bem. Nesse caso, você pode considerar o uso de URL-Rewriting e 302 redireciona para enviar esses usuários para baixo um cenário ou outro. No entanto, na minha opinião, isso não vale o tempo.
  5. Se seus usuários puderem fazer login no site, certifique -se de gravar as atribuições de cenário no seu banco de dados e reconciliar as discrepâncias de cookie/dB de acordo.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top