Le migliori pratiche per l'assegnazione di una variazione di test / B in base all'indirizzo IP
-
22-09-2019 - |
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).
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:
- Se la vostra applicazione è dietro eventuali deleghe, l'ip sarà lo stesso per tutti gli utenti di tale delega.
- 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.
- 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).
- 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.
- Se gli utenti possono accedere al sito assicurarsi di registrare le assegnazioni di scenario nel database e riconciliare le discrepanze cookie / db di conseguenza.