Воротила

Адрес сайта: vorotila.ru
Текст написан в декабре 2013

Я вплотную занимаюсь Воротилой с 2012 года. Собственно говоря, я его и создал. Это проект на стыке реальных и виртуальных вещей. Мощная игровая механика, вызывающая у пользователей азарт и вовлечение (ядро аудитории ежедневно проводит на сайте многие часы), большой объём качественного контента + электронная коммерция — так я опишу основные составляющие Воротилы.

Игровая механика

Пользователи создают на сайте виртуальные предметы. Сразу после регистрации они получают некоторое количество виртуальных монет. Их можно использовать как для участия в призовых акциях, так и для получения скидок на реальные товары (см. электронная коммерция).

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

Судя по статистике, этот процесс очень захватывает людей, причём возрастом 20+, потому что люди помладше в Воротиле практически не остаются.

Контент

Предметы в Воротиле по сути представляют собой полноценные статьи на какую-то тему, с набором фотографий, текстами и видео. Механика игровой части выстроена таким образом, что для успеха пользователю надо создавать предметы. Наиболее активные пользователи создали в среднем по 2-3 тысячи предметов.

Предметы — это контент, существующий параллельно игровой части проекта. Именно он даёт существенную часть новых посетителей. Уже сейчас в Воротиле сотни тысяч предметов.

Электронная коммерция

С осени 2013 в Воротиле начали регистрироваться различные компании и бренды. У них есть возможность создавать те предметы, которые они продают через собственные магазины. Такие предметы называются товарами.

Я придумал и реализовал систему, которая анализирует контент страницы любого предмета в Воротиле, анализирует геолокацию пользователя и подбирает те товары, которые соответствуют просматриваемому предмету. Например, пользователь зашёл на страницу предмета «Золотой айфон с деревянным корпусом», сам находится в Киеве, а в Воротиле есть компания, которая продаёт айфоны по всей Украине. В таком случае пользователь увидит объявление о продаже этого товара и сможет его приобрести.

Воротила в данном случае выступает как товарный агрегатор, обеспечивая первичный трафик, отбраковывая ложные заказы (этим занимается колл-центр Воротилы) и передавая подготовленную информацию о заказах компании-продавцу.

Техническая часть

На момент написания этого текста (декабрь 2013) проект готовится к запланированному росту. Необходимо будет выдерживать миллионы активных пользователей ежедневно. Поэтому ещё летом было принято решение существенно расширить серверную платформу проекта и обеспечить её устойчивость даже в случае отказа части серверов. Кроме того, новую серверную платформу планируется использовать и для других языковых версий Воротилы.

Было (июнь 2012 — ноябрь 2013)

С 2012 года и до момента смены серверной платформы проект Воротила работал на 3 серверах:

1. nginx: frontend, хранение фото, кэширование (сначала memcached, потом Couchbase Server), задачи по расписанию

2. IIS: веб-приложение на ASP.NET/C#

3. Microsoft SQL Server: база данных проекта

У меня получилось настолько оптимизировать логику проекта, что даже при аудитории в несколько десятков тысяч человек в сутки нагрузка на серверы не превышала 10% в пике. А это соответствует нескольким сотням тысяч игровых финансовых транзакций и пересчёту многих сущностей и списков.

Надо учесть специфику проекта, ведь новостной проект можно держать на 1 сервере даже с посещаемостью 50-100 тысяч в сутки. А вот тяжелый нагруженный проект с массой взаимосвязей и взаимодействием с пользователями требует ощутимо больших ресурсов для своей работы.

Стало (ноябрь 2013 — сейчас, декабрь 2013)

Просчёт конфигурации под нашу специфику, подготовка новых серверов, настройка программной части и предварительное тестирование затянулись до конца осени 2013. Зато теперь доступные мощности у Воротилы состоят из 15 серверов:

1. nginx: frontend, балансировка нагрузки, агрессивный кэш, задачи по расписанию и ещё ряд специфичных внутренних задач

2. Кластер веб-приложений из 2 серверов с IIS-ом, объединённых в Web Farm

3. Кластер баз данных MSSQL из 2 серверов: master и slave. Кроме того, используется своеобразное ноу-хау, которое позволило увеличить скорость выполнения большинства SQL-запросов до 10 раз, увеличив при этом стоимость каждого сервера всего на 10%

4. Кэширование данных для веб-приложения обеспечивается 2 серверами, каждый из которых поддерживает по 1 инстансу Couchbase Server и 1 инстансу Redis, реплицирующихся между собой

5. Облачное хранение файлов, преимущественно изображений, мы решили организовать на OpenStack Swift от Rackspace. 2 сервера задействованы под proxy node, ещё 5 серверов — это storage node. Это позволяет нам обеспечить как быструю скорость отдачи файлов по запросу, так и устойчивость системы в целом, ведь даже в случае падения части серверов Swift обеспечит успешную отдачу каждого файла

6. Сервер для виртуализации, виртуальные машины которого выполняет массу обслуживающих задач — от мониторинга состояния остальных серверов до обеспечения почтовых рассылок.

Резюме:

В проекте успешно используется и WISC-стек технологий (Windows, IIS, SQL Server, C#), и LAMP (Linux, Apache, MySQL, PHP/Python). Каждая технология имеет свои плюсы и минусы. При построении архитектуры такого большого проекта появляется возможность использовать плюсы каждого подхода и нивелировать минусы.

Немного истории

Воротила начинался как игровое приложение в соц.сети ВКонтакте. В марте 2013 он стартовал во ВКонтакте, а уже в июле 2013 было выпущено приложение для Одноклассников. Изначально структура проекта была заложена так, чтобы пользователи из разных соц.сетей могли пересекаться между собой в игре, оставаясь в привычном им соц.сетевом интерфейсе. Параллельно с этим работал и standalone-сайт vorotila.net, безо всяких привязок к соц.сетям.

В конце 2012 был куплен домен vorotila.ru, и с начала 2013 Воротила стал автономным сайтом. Слишком много ограничений выдвигали соц.сети, слишком мало возможностей для развития и рекламы они предлагали, и слишком много от платежей пользователей забирали себе. А запуск Воротилы именно как отдельного сайта позволил реализовать массу возможностей, до того недоступных.