Работе веб-портала и его развитию могут помешать несколько факторов, по отдельности или вместе:
К нам обратился клиент, веб-портал которого нуждался в дальнейшем развитии. В какой-то момент был достигнут потолок в 350 тысяч уникальных посетителей ежемесячно. Это виделось недостаточным — проект явно имел перспективы, и нам предстояло выяснить, что именно стоит на пути дальнейшего масштабирования ресурса.
Кейс
Выяснилось, что старый движок на Битриксе не был адаптирован к нагрузкам и масштабированию. Все до единого компоненты системы тесно пересекались и зависели друг от друга. Постоянно устранять ошибки было настолько мучительным занятием, что мы предложили гибкую и понятную архитектуру микросервисов. В них каждый компонент достаточно независим, чтобы ошибки внутри него не “задевали” остальные элементы системы.
Внедрение микросервисов
В самостоятельные микросервисы мы выделили такие модули, как файловый загрузчик, поиск, авторизацию и новостную ленту. Помимо этих понятных пользователю и очевидных вещей в виде микросервисов были реализованы многие другие функциональные элементы:
Кроме всего перечисленного, мы создали множество микросервисов для удобной работы сотрудников заказчика с панелью администратора.
Каждый функциональный блок сайта теперь является достаточно автономной единицей. Он использует для загрузки и рендеринга выделенный процесс, минимизируя пересечение с другими сервисами.
Сделав первый шаг, мы облегчили жизнь и пользователям, и разработчикам, создав более 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. Основой для рывка послужила новая архитектура.
Проект стал показательным. Вместо того, чтобы ставить новое железо и привлекать армию маркетологов, мы пересмотрели архитектуру веб-приложения. Результат превзошёл ожидания. Наш заказчик приобрёл мощный инструмент развития бизнеса, ведь у ресурса:
- Моральное устаревание. Подход к юзабилити, адаптация к разным устройствам, элементарный внешний вид и структура со временем перестают отвечать запросам аудитории.
- Технологическое устаревание. Веб-стандарты и технологии постоянно совершенствуются. Изменения затрагивают как инструменты разработчика (например, фреймворки, базы данных, прочее ПО), так и фундаментальные основы веба. Из относительно недавнего — массовый переход с 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)
n0wheremany
07.03.2019 16:10Я так понимаю посадили писать статью человека, который не в теме.
с 350 к до 700 к за год это конечно круто, но ИМХО без привлечения армии маркетологов это фантастика.
m1skam
Читая эту статью мне так и не удалось связать это предложение
с этимAkuma
Тоже показалось это странным.
Как и то, что на битриксе (?) вынесли авторизацию в отдельный сервис. Надо либо выдать медаль за проделанную работу, либо по шее за вранье.