Павел Прищепа. Бббыстрый бэкенд на базе Друпал
description
Transcript of Павел Прищепа. Бббыстрый бэкенд на базе Друпал
БББыстрый бэкенд на Друпале
Да, ладно!
Павел Прищепа 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 новой технологии на проекте
• Оптимизировать только то что мешает “продавать”
• Помнить о “бизнесе”