Лучшая практика для назначения вариации A / B теста на основе IP-адреса - PullRequest
4 голосов
/ 26 марта 2010

Я начинаю писать код для A / B-тестирования в веб-приложении Grails. Я хочу убедиться, что запросы с одного и того же IP-адреса всегда видят одно и то же изменение. Вместо того, чтобы хранить карту IP-> варианта, можно ли просто превратить IP-адрес в целое число, удалив точки, а затем использовать его в качестве начального числа для генератора случайных чисел? В фильтре Грааля происходит следующее:

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 не установлены у пользователя отключены куки).

1 Ответ

5 голосов
/ 26 марта 2010

Вы можете просто взять 32-битное число и сделать ip mod number_of_test_scenarios. Или используйте стандартную функцию хеширования в ruby. Но я чувствую, что должен указать на несколько проблем с этим подходом:

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