Le migliori pratiche per l'assegnazione di una variazione di test / B in base all'indirizzo IP

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

Domanda

Sto iniziando a scrivere del codice per il test A / B in un'applicazione web Grails. Voglio assicurare che le richieste dallo stesso indirizzo IP di vedere sempre la stessa variazione. Invece di memorizzare una mappa di IP> variante, è OK per ruotare semplicemente l'indirizzo IP in un intero, eliminando i punti, quindi utilizzare che come il seme di un generatore di numeri casuali? Il luogo seguente sta prendendo in un filtro 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

So che identificare gli utenti in base all'indirizzo IP non è affidabile, e sarò utilizzando le variabili di sessione / cookie pure, ma questo sembra essere utile per il caso in cui abbiamo una nuova sessione, e nessun cookie impostati (o la utente ha disabilitato i cookie).

È stato utile?

Soluzione

Si potrebbe semplicemente prendere il numero a 32 bit e non ip number_of_test_scenarios mod. Oppure utilizzare una funzione di hashing standard fornito a ruby. Ma sento di dover sottolineare alcuni problemi con questo approccio:

  1. Se la vostra applicazione è dietro eventuali deleghe, l'ip sarà lo stesso per tutti gli utenti di tale delega.
  2. Alcuni utenti cambieranno IP abbastanza frequentemente, più spesso di quanto si pensi. Forse (come dice Joel Spolsky) "Internet è spezzato per quegli utenti", ma direi che è un cattivo servizio ai vostri clienti se rendere Internet più spezzato per loro, soprattutto in un modo sottile, dato che probabilmente non sono in grado di fare nulla al riguardo.
  3. Per gli utenti che dispongono di una nuova sessione, si può solo assegnare il biscotto alla prima richiesta e mantenere le assegnazioni in memoria; a meno che le richieste iniziali di un utente va a più server allo stesso tempo questo dovrebbe risolvere il problema (è quello che faccio sul app mantengo).
  4. Per gli utenti con i cookie disabilitati, direi "Internet è rotto", e non vorrei andare di disturbo per sostenere quel caso; avrebbero vengono assegnati ad un secchio test di default e tutti vanno lì. Se si prevede di supportare molti di questi utenti in modo non rotto si sta creando lavoro per te, ma forse questo è ok. In questo caso si consiglia di considerare l'utilizzo di URL-riscrittura e 302 redirect per inviare questi utenti verso il basso uno scenario o un altro. Tuttavia a mio parere questo è non vale il tempo.
  5. Se gli utenti possono accedere al sito assicurarsi di registrare le assegnazioni di scenario nel database e riconciliare le discrepanze cookie / db di conseguenza.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top