2010-03-26 2 views
4

Я начинаю писать код для тестирования A/B в веб-приложении Grails. Я хочу убедиться, что запросы с одного и того же IP-адреса всегда видят одинаковые варианты. Вместо того, чтобы хранить карту варианта IP->, достаточно ли просто перевести IP-адрес в целое число, удалив точки, а затем использовать это как семя для генератора случайных чисел? Следующее происходит в фильтре Grails:Лучшая практика для назначения вариации теста A/B на основе 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).

ответ

4

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

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

Спасибо за ваши комментарии - ip% number-of-scenarios - хорошая идея. IP-адрес будет использоваться только тогда, когда пользователь отключил cookies (или разрешает только файлы cookie сеанса); моя забота заключается в том, что может быть больше работы/кода для обнаружения этих случаев и направления их по умолчанию. Выполнение «набора файлов cookie, перенаправление, проверка cookie» означает, что пользователи с отключенными cookie будут отключены, но как быть с теми, у кого есть только файлы cookie сеанса? К счастью, мой сайт не имеет учетных записей пользователей, так что это еще одна вещь, о которой нужно беспокоиться! – mojones

+0

@mojones: Я обнаружил, что учетные записи пользователей упрощают работу, для моего приложения мы добавили A/B-тестирование для зарегистрированных пользователей, прежде чем мы сделали это для анонимных пользователей, потому что было намного проще отслеживать все это. Один недостаток, о котором я забыл упомянуть о тестировании на основе IP, заключается в том, что он затрудняет QA тестовый код или тестовые сценарии, если вы не подделываете свой IP-адрес. –