БББыстрый бэкенд
на Друпале
Да, ладно!
Павел Прищепа
CEO DrupalJedi
Есть мнение, что
Друпал не очень быстрый
• Громоздкий и неповоротливый
• Куча модулей, которые поднимаются каждый раз
• Он “ненавидит” БД
• Работает только с кешем
• Быстрые бэкенды
Плата за функциональность
и расширяемость
Я расскажу
• Как мы использовали Друпал
• Как мы отказались от Друпала как бэкенда
• Как открыли его с новой стороны :)
• И вернулись к Друпалу
Внутренний проект
• SilkPaints - приложение для рисования
• Бэкенд на Друпале (Services)
• Юзеры рисуют, шарят рисунки
• Юзеров +400 000, изображений +500 000
• 5-20 запросов в секунду
• Процессор загружен на 40-70%
Запросы растут:
запуск iOS версии
• Лайки
• Фолловеры
• Френдленты
• Забанить, удалить трек
• Списки: популярные рисунки, выбор редакции …
Планируемая нагрузка
• 5 000-10 000 новых пользователей ежедневно
• 50-100 запросов в секунду
• Время генерации ответа не более 0.4-0.8 секунды
• Размер БД (уже сейчас > 12 Гб)
Что делать, шеф?
Ищем альтернативу
Друпалу
• Node.js
• Python
• MongoDB
• Redis
Все не то :(
Нельзя просто взять и начать
использовать новый фреймворк
• Изменение производственного процесса
• Обучение/найм людей
• “Набить шишки”
• Проект неуправляем
А время поджимает…
Бизнес требует …
Back to Drupal
• Redis
• Module EntityCache
• Module JS
• Module DrushD
• Drupal Queues API
Запрос
Worker
Worker
1. Минимальная обработка
2. Постановка Задачи в очередь
3. Быстрый ответ
Queue
Drupal
api.phpindex.php
Database
(MySQL)
Worker 1
(DrushD)
Worker 2
(DrushD)
API Environment
Queue
(Drupal based)
Ограничения
API Environment
• Не использовать node_save() и node_load()
• Кастомный session.inc хендлер без user_load()
• Аккуратно подключать контрибные модули
• Использовать “легкие” таблицы и кэш
• Минимизировать JOINы в запросах
Queue
Внутренний
сервис
Lock server
(Redis)
Друпал
модуль 1
Внешний
сервис
Друпал
модуль 2
Сервисно-ориентированный
подход (SOA)
Лайки
Добавление
рисунка в
ленты
фолловеров
Пересчет
статистики
Очереди с разными приоритетами
Результаты
• В 10 раз снизилась нагрузка на БД
• Время отклика не более 1 секунды
• Загрузка процессора 10-30%
• “Простор” для масштабирования приложения
• SOA
Как еще ускорить?
• Деградация функциональности
• Масштабирование
• Репликация
• Денормализация
• Асинхронная обработка
• Горизонтальный шардинг
• Выносить функционал в сервисы
На будущее
• Основная причина тормозов - “кривые руки”
• Используйте то, что хорошо знаете
• Не более 1 новой технологии на проекте
• Оптимизировать только то что мешает
“продавать”
• Помнить о “бизнесе”
Ваши вопросы
Павел Прищепа
CEO DrupalJedi
pavel@drupaljedi.com

Павел Прищепа. Бббыстрый бэкенд на базе друпал