Работе веб-портала и его развитию могут помешать несколько факторов, по отдельности или вместе:

  • Моральное устаревание. Подход к юзабилити, адаптация к разным устройствам, элементарный внешний вид и структура со временем перестают отвечать запросам аудитории.
  • Технологическое устаревание. Веб-стандарты и технологии постоянно совершенствуются. Изменения затрагивают как инструменты разработчика (например, фреймворки, базы данных, прочее ПО), так и фундаментальные основы веба. Из относительно недавнего — массовый переход с http на https и отказ от поддержки устаревших DNS.
  • Ошибки и сбои. Разработчики могут неидеально справляться со своей задачей и допускать огрехи. Вследствие этого в работе сайта могут происходить нарушения — от не срабатывающих с первого раза кнопок до полного отказа систем.

К нам обратился клиент, веб-портал которого нуждался в дальнейшем развитии. В какой-то момент был достигнут потолок в 350 тысяч уникальных посетителей ежемесячно. Это виделось недостаточным — проект явно имел перспективы, и нам предстояло выяснить, что именно стоит на пути дальнейшего масштабирования ресурса.

Кейс

Выяснилось, что старый движок на Битриксе не был адаптирован к нагрузкам и масштабированию. Все до единого компоненты системы тесно пересекались и зависели друг от друга. Постоянно устранять ошибки было настолько мучительным занятием, что мы предложили гибкую и понятную архитектуру микросервисов. В них каждый компонент достаточно независим, чтобы ошибки внутри него не “задевали” остальные элементы системы.



Внедрение микросервисов

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

  • Выгрузка, хранение и управление данными из проектов открытых источников;
  • Динамическое создание RSS-лент;
  • Динамическое создание системы блоков, компоновка материалов любых сервисов в структурные блоки;
  • Добавление к материалам сервисов дополнительных данных;
  • Сервис технической поддержки;
  • Единый каталог различных данных.

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



Каждый функциональный блок сайта теперь является достаточно автономной единицей. Он использует для загрузки и рендеринга выделенный процесс, минимизируя пересечение с другими сервисами.

Сделав первый шаг, мы облегчили жизнь и пользователям, и разработчикам, создав более 20 новых сервисов за год:

  • Решена проблема масштабирования.
  • Внедрён более эффективный процесс разработки распределенными командами.
  • Настроено динамическое управление ресурсами для обеспечения бесперебойной и быстрой работы системы.

Модернизация стека технологий

Параллельно был обновлен стек технологий. Если изначально портал базировался на php 5.6 и MySQL 5.6, то в ходе усовершенствования движка мы перевели его на версии php 7.0 и MySQL 5.7. В основе остался фреймворк Yii2, базы данных управляются через нереляционную СУБД Redis, а кеширование обеспечивается memcache.



Здесь исходная инфраструктура подавала надежды на адекватность, поэтому существенных изменений не потребовалось.

Умная очередь задач

В целях лучшего распараллеливания задач мы перевели веб-воркеры — внутренние обработчики — на очередь RabbitMQ. Умная очередь оптимизирует последовательность запуска событий, что снижает нагрузку на систему. Работа с сайтом стала гораздо быстрее и комфортнее.



Непрерывная интеграция

Прозрачный и управляемый процесс разработки поддерживается с помощью GitLab CI. Это реально непрерывная бесшовная разработка, которая оставляет программистам и тестировщикам больше времени на важные вопросы вместо латания дыр.

Для того, чтобы свести к минимуму ошибки, мы ввели дополнительные контуры разработки. Цепочка состоит из нескольких контуров тестирования приложения и инфраструктуры: предрелизный, где проходит последнее тестирование сборки (pre-prod), боевой (prod), несколько тестовых контуров для тестирования сразу нескольких билдов, а также контур для разработчиков.

Система сборок

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

Мониторинг ошибок

GitLab CI обеспечивает продвинутые возможности валидации кода и автоматического тестирования. При малейшем несоответствии сборок заданным параметрам система оповещает разработчиков и не даёт запустить дальнейший процесс реализации компонента до исправления ошибок. Дополнительно мы установили Sentry — полноценный инструмент мониторинга ошибок.



Оптимизация процессов

Также важно постоянное поддержание системы в состоянии высокой производительности. Мы последовательно оптимизируем бизнес-процессы и инфраструктуру. Общие библиотеки и прототипы сервисов служат основой для быстрого внедрения новых функций — мы берём готовые шаблоны и через короткое время получаем работающий продукт.

Мониторинг и эксплуатация

Процессы видны, как на ладони. Мониторинг состояния каждого узла нам обеспечивает Zabbix — комплексная система отслеживания. Мы можем заглянуть в самое ядро структуры проекта и увидеть её компактно.

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

Стабилизация и рефакторинг

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

Внедрение новой архитектуры как основа роста

Если раньше ресурс демонстрировал скромный потенциал к продвижению, был едва удовлетворителен для клиентов и тормозил процессы компании, то сейчас всё изменилось.

Почти полностью обновив архитектуру портала и его структуру, мы создали гибкий механизм, который интегрируется с большим числом сервисов и приложений, благодаря собственному API.

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

Посещаемость увеличилась с 350 тысяч уникальных посетителей в месяц до более чем 7 миллионов. Конечно, это достигнуто через применение комплекса технологий, включая SEO. Основой для рывка послужила новая архитектура.

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

  • Улучшился процесс взаимодействия пользователя с сайтом.
  • В разы увеличилась посещаемость.
  • Реализовался потенциал к масштабированию.
  • Процесс разработки стал быстрее и качественнее.
  • Количество ошибок стремится к нулю.

Комментарии (3)


  1. m1skam
    07.03.2019 15:09

    Читая эту статью мне так и не удалось связать это предложение

    Выяснилось, что старый движок на Битриксе не был адаптирован к нагрузкам и масштабированию.
    с этим
    В основе остался фреймворк Yii2, базы данных управляются через нереляционную СУБД Redis, а кеширование обеспечивается memcache.


    1. Akuma
      07.03.2019 15:12

      Тоже показалось это странным.
      Как и то, что на битриксе (?) вынесли авторизацию в отдельный сервис. Надо либо выдать медаль за проделанную работу, либо по шее за вранье.


  1. n0wheremany
    07.03.2019 16:10

    Я так понимаю посадили писать статью человека, который не в теме.
    с 350 к до 700 к за год это конечно круто, но ИМХО без привлечения армии маркетологов это фантастика.