Категории
(262)
(73)
(42)
SEO
(25)

High-load проекты на Drupal. Миф или реальность?

18.04.2014
Автор:

Весной 2012 года по рекомендациям наших постоянных клиентов к нам обратился молодой, амбициозный и напористый бизнесмен из Москвы с заказом, который привел нас в ступор… И хотя на тот момент мы работали на рынке Друпал-разработки около 5 лет, однако таких сложных задач перед нами еще не ставили. Проект назывался HiConversion и предполагал следующий функционал:

  • публикация и управление рекламными объявлениями в соц сети VK;
  • сбор статистики по всем опубликованным объявлениям с внешних источников, таких как VK, Google Analytics, Yandex.Metrica;
  • возможность просмотра статистики по опубликованным объявлениям за любой период времени;
  • автоматическое или ручное управление объявлениями в зависимости от результатов собранной статистики;
  • возможность настраивать все таргетинги, как в индивидуальном порядке, так и массово;
  • средства для работы рекламных агентств, иерархическая система ролей и доступов;
  • контроль состояния счета клиента: возможность его пополнения, автоматическая остановка объявлений.

И это далеко не исчерпывающий список. Но давайте рассмотрим архитектурный подход к реализации такого технически сложного проекта более подробно.

Как вы видите, поставленные перед проектом задачи были далеко не тривиальными для веб-приложения, тем более, они полностью выходили за рамки “родного” для Drupal функционала. Необходимость обновлять десятки тысяч запросов в минуту информацией с внешних источников заставила нас искать нетрадиционные решения для преодоления ограничений большинства механизмов как ядра Drupal, так и сторонних сервисов.

Для наиболее эффективного использования ограничений сторонних сервисов на запросы, учитывая разный формат данных, их принципов коммуникации и аутентификации, нам довелось переосмыслить формат сохранения и обработки очередей в Drupal. Очередь обрабатывалась не благодаря медленным запросам по расписанию (cron), а php-демоном, который постоянно мониторил наличие элементов в очереди и выполнял задачи настолько быстро, насколько это вообще было возможно. За лимитами ресурсов вела наблюдение сложная система “семафоров”, построенная на основе механизмов замков Drupal (Lock API), а созданные нами интерфейсы позволяли удобно и юзабильно добавлять новые типы элементов очереди.

Поскольку нам приходилось сохранять огромнейшие объемы статистических данных (около миллиона записей) и постоянно их обновлять, мы были вынуждены глубоко модифицировать принцип обработки полей в Drupal. Для того, чтобы совершенно не уйти от философии Drupal и иметь возможность использовать максимальное количество стандартных решений, мы не только создали новые, более приспособленные к нашим условиям типы полей, но и использовали возможности Drupal Field Storage API на все 100%. Большинство операций в нашем случае требовали обновления большого количества полей однотипной информацией за один раз, поэтому мы значительно выиграли в продуктивности, добавив возможность массового обновления полей с последующим вызовом необходимых хуков. Такой подход позже позволил нам использовать готовые модули для построения сложных представлений (views) с запутанными наборами фильтров и возможностью их сохранения.

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

Конечно, кроме этого, перед нами были поставлены и другие, более характерные для обычных веб-приложений, задачи. Например, возможность редактирования рекламных объявлений, используя выгрузки таблиц Excel (причем в обе стороны), парсить по расписанию фиды Яндекс.Маркет-а, и множество других задач, связанных со сложным пользовательским интерфейсом. Стоит также отметить, что в ходе работы над этим проектом нами было выложено несколько патчей для contrib модулей, в том числе и модуля Views.

high load drupal site

Теперь приведем немного реальных цифр, с которыми успешно справлялся этот “монстр” на момент завершения нами сотрудничества с этим клиентом:

  • 400 000 нод на сайте;
  • от 4 000 до 20 000 новых объявлений в день;
  • 2 000 активных рекламных кампаний;
  • 145 000 опубликованных объявлений;
  • 8 000 одновременно запущенных объявлений;
  • 21 000 объявлений, по которым собирается статистика и отрабатываются тактики таргетинга менее, чем за 1 минуту;
  • до 90 000 запросов к API VK в день, среднее значение - 30 000;
  • 8Гб размер базы данных, до двух миллионов записей в одной таблице;
  • 1 год разработки силами команды из 4 человек;
  • более 32 000 строчек кода.

Конечно, не количеством строчек кода измеряется качество работы. Поэтому давайте сместим акценты и на другие, более понятные далеким от программирования людям:

  1. Этот проект стал одной из 7 рекламных сетей, которые получили аккредитацию VK;
  2. HiConversion был номинирован на премию “Стартап года 2012” в России;
  3. За первые полгода с момента запуска первой итерации проекта клиентами этого сервис-провайдера стали большие корпорации, среди них МТС, Евросеть, Teamo, Sotmarket, Альфа-Банк и др.

Неоспоримую роль в таком успехе проекта сыграли и сами владельцы этого стартапа: они очень грамотно подошли к построению бизнес-архитектуры своего детища. И да, вторая итерация проекта была реализована за последующий год с использованием совершенно другой технологии разработки. Проект продолжает развиваться и удерживать позиции на рынке таргетированной рекламы в соцсетях. Всем бы таких клиентов и такие интересные проекты!

No votes yet. Be first

Также по теме

1

При принятии решения запустить собственный вебсайт одним из самых важных вопросов является реализация - CMS или сапомис? Читайте дальше о преимуществах фреймворка...

2

Очень часто многие разработчики сталкиваются с проблемой гибкой сортировки материалов на сайте. Одним из вариантов решений этой задаче в Drupal есть модуль Radioactivity. Узнайте больше о его...

3

В своей практике мы довольно часто используем Git Flow модель работы с репозиторием. Схему работы с помощью которой подробнее описана ниже.

4

Изменения в Drupal 8, кроме всего прочего, коснулись процеcса создания собственных виджетов и форматтеров. Новый плагин API значительно упрощает эту процедуру.

5

Продолжая рассмотрение возможностей модуля Panels, в этом блоге речь пойдет о создании собственного контекста с помощью Chaos tool suite.

Need a quote? Let's discuss the project!

Are you looking for someone to help you with your Drupal Web Development needs? Let’s get in touch and discuss the requirements of your project. We would love to hear from you.

Join to peoples who already subscribe