Как Google и Facebook предоставляют функции некоторым пользователям раньше других? - PullRequest
4 голосов
/ 06 апреля 2011

Я ищу предложения о том, как некоторые пользователи могут опробовать новые версии веб-приложений раньше других.

Я бы хотел, чтобы это было прозрачно для пользователя. Они не знали бы, что работают на бета-версии.

Одна мысль у меня была в том, чтобы создать beta.domain.int и prod.domain.int, а затем заставить балансировщик нагрузки отправлять запросы одному или другому. Какие (если таковые имеются) балансировщики нагрузки позволяют вам устанавливать cookie "beta = 1" в приложении и направлять их запросы на основе cookie? Если бета-версии не существует, prod.domain.int будет обслуживаться независимо от файла cookie. Файлы cookie устанавливаются пользователями, которые выбирают бета-версии.

Google и Facebook имеют возможность тестировать новые функции в небольших группах пользователей, прежде чем делать что-то общедоступным. Как они это делают?

Ответы [ 5 ]

2 голосов
/ 06 апреля 2011

Вы не ищете балансировщик нагрузки, потому что балансировщик нагрузки обычно используется для балансировки нагрузки и не имеет никакого отношения к вашей фактической реализации. Что вам нужно сделать, это реализовать эту функцию в вашем приложении.

Вы берете Facebook в качестве примера, так как он написан на PHP, я дам вам краткий пример (псевдокод) о том, как они могут реализовать это:

if(isUserBetaTester()){
    include("beta_functions.php");
}
else{
    include("normal_functions.php");
}

Для имитации той же функциональности в .NET вы можете использовать пользовательские атрибуты, чтобы определить, какие действия действительно запускать и какие представления действительно отображать, поскольку вы не хотите повторно проверять свои действия / контроллеры, если пользователь является пользователем бета-версии. или еще много чего.

Считайте, что в вашей фильтрации действий есть следующее (также псевдо):

if(string.IsNullOrEmpty(Cookies["beta"]))
{
    var betaModel = DataLayer.GetModelForThisAction();
    Render("BetaView", betaModel);
}
else
{
    var normalModel = DataLayer.GetModelForThisAction();
    Render("NormalView", normalModel);
}

Существует множество способов реализовать это, но имейте в виду, что, вероятно, было бы намного проще добавить «IsBetaUser» к таблице пользователей в базе данных и иметь специальный домен для бета-пользователей и просто проверять » Это бета-пользователь? " Таким образом, вы можете добавить фильтр на весь домен, который проверяет, разрешен ли пользователь или нет.

Мой первый ответ включал в себя высказывание «перенаправления», которое я имел в виду, чтобы использовать передачу сервера, которая сохраняла бы URL, но это может быть плохой идеей, так как она изменится при обратной передаче.

1 голос
/ 03 декабря 2013

Установите этот флажок - https://github.com/reddit/reddit-plugin-betamode - он дает вам представление о том, как установить cookie, как использовать HAProxy для направления пользователей на бета-сервер вместо обычного пула серверов приложений.

1 голос
/ 06 апреля 2011

Я считаю, что это , а не вопрос балансировки нагрузки.Вопрос требует предложения по Как случайным образом выбрать пользователей для бета-версии или обновленной версии продукта?

Возможны несколько способов, включая, но не ограничиваясь::

  • Выбор пользователя случайным образом или первые 100 пользователей;и перенаправлять без их согласия - не очень хорошая идея.Вы можете использовать объект приложения;Application["MyKey"] = "BetaUserCounter++";
  • Создайте необязательную ссылку (вверху экрана?) На целевой странице, спрашивая пользователей, хотят ли они попробовать обновленную бета-версию.Обратите внимание, что вы можете ограничить эту функциональность;например, если вы собираетесь протестировать 100 пользователей с первой попытки, вы можете скрыть опциональную ссылку после исчерпания пула из 100 пользователей.

- РЕДАКТИРОВАТЬ -

На перенаправление трафика, основанного на правилах, может быть несколько способов, несколько вариантов:

Маршрутизация запросов приложений (ARR) позволяет администраторам веб-серверов и провайдерам хостинга и повысить надежность и масштабируемость веб-приложений с помощью маршрутизации на основе правил ибалансировка нагрузки запросов HTTP-сервера.С помощью ARR администраторы могут оптимизировать использование ресурсов для серверов приложений, чтобы снизить затраты на управление веб-фермами и средами общего хостинга.

0 голосов
/ 03 декабря 2013

Мы реализовали эту функцию аналогично тому, как мы включаем / отключаем функции для разных клиентов.Это действительно полезно для атомарных функций.

У каждого типа пользователей есть свой пакет функций (набор токенов).Итак ... при рендеринге нашего веб-приложения мы проверяем, есть ли у пользователя токен для определенной функции (она используется для отображения / скрытия функций для разных планов).

Для новых выпущенных или находящихся в разработке функций мыдобавить специальный токен (например, токен с именем "ShowBetaFeatures" и "ShowAlphaFeatures").Поэтому, если функция находится в бета-версии и мы хотим сделать ее доступной для ряда пользователей, мы добавляем этот токен этим пользователям.То же самое, чтобы получать ранние отзывы от определенных пользователей о стадии Apha чего-либо.

Этот подход полезен, если вы хотите включить определенную функцию только для одного пользователя (пользовательская разработка).

Сейчас, если вы хотите изменить способ отображения чего-либо (не просто показа / скрытия), в зависимости от размера разницы вы можете решить это в самом представлении или в контроллере.Просто проверьте, есть ли у пользователя токен ShowBetaFeatures, и отобразите одно или другое представление ... или если оно находится внутри представления, отобразите нужный вам фрагмент HTML.

Если решение об отображении бета-функций принимаетсяНа уровне контроллера вы можете добавить фильтр действий , чтобы сделать это за вас.Код в вашем фильтре действий выполнит операции if / else и проверит, может ли пользователь просматривать бета-функции.Как только бета-функции будут выпущены для основного населения ... вы можете удалить эти украшения.

0 голосов
/ 06 апреля 2011

Вы можете использовать такой продукт, как восьмиугольный переключатель , для распределения http-трафика. С помощью octagate вы можете распределять определенный процент пользовательских сессий на конкретный сервер, используя настройку capacity. Это не требует корректировки ваших приложений.

enter image description here

...