Les meilleures pratiques pour l'attribution variation de test A / B basé sur l'adresse IP

StackOverflow https://stackoverflow.com/questions/2523192

Question

Je commence à écrire du code pour les tests A / B dans une application web Grails. Je veux faire en sorte que les demandes de la même adresse IP voir toujours la même variation. Au lieu de stocker une carte de IP-> variante, est-il correct de simplement tourner l'adresse IP dans un entier en supprimant les points, puis utilisez que la graine d'un générateur de nombres aléatoires? Ce qui suit a lieu dans un filtre Grails:

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

Je sais que l'identification des utilisateurs par adresse IP ne sont pas fiables, et je vais utiliser les variables / cookies de session ainsi, mais cela semble être utile dans le cas où nous avons une nouvelle session, et pas les cookies (ou utilisateur a désactivé les cookies).

Était-ce utile?

La solution

Vous pouvez simplement prendre le numéro 32 bits et n'ip number_of_test_scenarios mod. Ou utiliser une fonction de hachage standard fourni en rubis. Mais je sens que je dois signaler quelques problèmes avec cette approche:

  1. Si votre application est derrière les proxies, l'IP sera le même pour tous les utilisateurs de ce proxy.
  2. Certains utilisateurs vont changer les adresses IP assez souvent, plus souvent que vous le pensez. Peut-être (comme Joel Spolsky dit) « L'Internet est cassé pour les utilisateurs », mais je dirais que c'est un mauvais service à vos clients si vous rendre l'Internet plus cassé pour eux, surtout d'une manière subtile, étant donné qu'ils ne sont probablement pas en mesure de faire quoi que ce soit à ce sujet.
  3. Pour les utilisateurs qui ont une nouvelle session, vous pouvez simplement attribuer le cookie à la première demande et conserver les affectations en mémoire; cela devrait résoudre à moins que les demandes initiales vont à plusieurs serveurs en même temps d'un utilisateur ce problème (c'est ce que je fais sur l'application que je maintiens).
  4. Pour les utilisateurs avec les cookies désactivés, je dirais « L'Internet est cassé », et je ne serais pas aller à beaucoup de mal à soutenir ce cas; ils obtiendriez assignés à un seau de test par défaut et tous y aller. Si vous envisagez de soutenir beaucoup de ces utilisateurs d'une manière non brisée que vous créez le travail pour vous-même, mais peut-être est ok. Dans ce cas, vous pouvez envisager d'utiliser des URL de réécriture et d'envoyer 302 redirige les utilisateurs vers le bas un scénario ou d'une autre. Mais à mon avis, ne vaut pas le temps.
  5. Si vos utilisateurs peuvent se connecter sur le site assurez-vous d'enregistrer les affectations de scénario dans votre base de données et conciliez les écarts cookies / db en conséquence.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top