Рекомендации по назначению вариантов A/B-тестов на основе IP-адреса

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

Вопрос

Я начинаю писать код для 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.Но я чувствую, что должен указать на несколько проблем с этим подходом:

  1. Если ваше приложение находится за какими-либо прокси, IP-адрес будет одинаковым для всех пользователей этого прокси.
  2. Некоторые пользователи будут менять IP-адреса довольно часто, чаще, чем вы думаете.Возможно (как говорит Джоэл Спольски) «Интернет сломан для этих пользователей», но я бы сказал, что это медвежья услуга вашим клиентам, если вы сделаете Интернет БОЛЕЕ сломанным для них, особенно тонким способом, учитывая, что они, вероятно, не в состоянии сделать что-нибудь с этим.
  3. Для пользователей, у которых есть новый сеанс, вы можете просто назначить файл cookie при первом запросе и сохранить назначения в памяти;если первоначальные запросы пользователя не направляются на несколько серверов одновременно, это должно решить эту проблему (это то, что я делаю в приложении, которое поддерживаю).
  4. Для пользователей с отключенными файлами cookie я бы сказал: «Интернет не работает», и я бы не стал прикладывать особых усилий, чтобы поддержать этот случай;им будет назначен тестовый сегмент по умолчанию, и все они попадут туда.Если вы планируете поддерживать множество таких пользователей непрерывным образом, вы создаете работу для себя, но, возможно, это нормально.В этом случае вы можете рассмотреть возможность использования перезаписи URL-адресов и перенаправления 302, чтобы отправить этих пользователей по тому или иному сценарию.Однако, на мой взгляд, это не стоит потраченного времени.
  5. Если ваши пользователи могут войти на сайт, обязательно запишите назначения сценариев в своей базе данных и соответствующим образом согласуйте несоответствия файлов cookie и базы данных.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top