Рекомендации по назначению вариантов A/B-тестов на основе IP-адреса
-
22-09-2019 - |
Вопрос
Я начинаю писать код для A/B-тестирования в веб-приложении Grails.Я хочу гарантировать, что запросы с одного и того же IP-адреса всегда будут иметь один и тот же вариант.Вместо того, чтобы хранить карту вариантов IP->, можно ли просто превратить IP-адрес в целое число, удалив точки, а затем использовать его в качестве начального числа для генератора случайных чисел?В фильтре 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
Я знаю, что идентификация пользователей по IP-адресу ненадежна, и я также буду использовать переменные сеанса/файлы cookie, но это кажется полезным в случае, когда у нас есть новый сеанс, а файлы cookie не установлены (или у пользователя есть файлы cookie). неполноценный).
Решение
Вы можете просто взять 32-битное число и выполнить ip mod number_of_test_scenarios.Или используйте стандартную функцию хеширования, предусмотренную в Ruby.Но я чувствую, что должен указать на несколько проблем с этим подходом:
- Если ваше приложение находится за какими-либо прокси, IP-адрес будет одинаковым для всех пользователей этого прокси.
- Некоторые пользователи будут менять IP-адреса довольно часто, чаще, чем вы думаете.Возможно (как говорит Джоэл Спольски) «Интернет сломан для этих пользователей», но я бы сказал, что это медвежья услуга вашим клиентам, если вы сделаете Интернет БОЛЕЕ сломанным для них, особенно тонким способом, учитывая, что они, вероятно, не в состоянии сделать что-нибудь с этим.
- Для пользователей, у которых есть новый сеанс, вы можете просто назначить файл cookie при первом запросе и сохранить назначения в памяти;если первоначальные запросы пользователя не направляются на несколько серверов одновременно, это должно решить эту проблему (это то, что я делаю в приложении, которое поддерживаю).
- Для пользователей с отключенными файлами cookie я бы сказал: «Интернет не работает», и я бы не стал прикладывать особых усилий, чтобы поддержать этот случай;им будет назначен тестовый сегмент по умолчанию, и все они попадут туда.Если вы планируете поддерживать множество таких пользователей непрерывным образом, вы создаете работу для себя, но, возможно, это нормально.В этом случае вы можете рассмотреть возможность использования перезаписи URL-адресов и перенаправления 302, чтобы отправить этих пользователей по тому или иному сценарию.Однако, на мой взгляд, это не стоит потраченного времени.
- Если ваши пользователи могут войти на сайт, обязательно запишите назначения сценариев в своей базе данных и соответствующим образом согласуйте несоответствия файлов cookie и базы данных.