Представьте: вы запускаете EdTech-продукт на 5000 студентов. При 100 одновременных запросах на генерацию сертификатов платформа падает. Подобная ситуация знакома многим стартапам, которые упираются в узкое место — синхронную генерацию PDF. Мы столкнулись с этим в одном из проектов: переписали модуль на событийную шину с очередями Redis. Теперь сертификаты генерируются асинхронно, время ожидания упало с 5 секунд до 50 миллисекунд — в 100 раз быстрее. Разработка LMS — системы управления обучением — требует продуманной архитектуры: от выбора стека до деталей реализации. Когда мы проектируем такую систему, учитываем потенциальные узкие места: конкурентные записи в БД, кэширование часто запрашиваемых материалов, балансировку нагрузки. Один из примеров — асинхронная очередь для сертификатов, которая позволяет обрабатывать до 1000 запросов в минуту.
Ключевые роли
- Администратор — управляет платформой, пользователями, интеграциями
- Преподаватель/Автор — создаёт курсы, материалы, задания, оценивает работы
- Студент — проходит курсы, выполняет задания, получает сертификаты
- Менеджер/Куратор — контролирует прогресс группы, коммуникация
Структура курса
Course
├── Section 1 "Введение"
│ ├── Lesson 1.1: Video (15 min)
│ ├── Lesson 1.2: Article
│ └── Quiz 1 (5 questions)
├── Section 2 "Основы"
│ ├── Lesson 2.1: Video
│ ├── Assignment 2.1 (homework)
│ └── Lesson 2.2: Webinar (live)
└── Final Exam
└── Certificate
Каждый элемент хранится в БД как course_items с типом (video, article, quiz, assignment, live_session) и порядком. Prerequisites — урок/секция недоступны, пока не завершены предыдущие.
Как защитить видеоконтент?
Загружать видео напрямую на сервер — плохая идея при объёме более нескольких часов. Используем специализированные видеохостинги:
| Провайдер | Тарификация | Особенности |
|---|---|---|
| Vimeo OTT / Pro | Фиксированная подписка | Защита по доменам, HLS, аналитика |
| Cloudflare Stream | Поминутная оплата | Низкая стоимость, транскодинг в HLS, встроенный плеер |
| MUX | За минуты просмотра | Детальная аналитика: % просмотра, rebuffer rate, Data API |
Процесс загрузки:
- Приложение запрашивает
upload_urlу провайдера. - Клиент загружает файл напрямую (минуя сервер).
- Провайдер транскодирует видео.
- Webhook сигнализирует о готовности.
- Статус урока обновляется.
Такой подход разгружает сервер на 70% и снижает стоимость хранения на 40%.
Тестирование и квизы
Типы вопросов: Single choice, Multiple choice, True/False, Short answer, Essay, Code exercise (Judge0 API). Схема хранения результатов:
CREATE TABLE quiz_attempts (
id, student_id, quiz_id, started_at, submitted_at,
score INT, max_score INT, passed BOOLEAN
);
CREATE TABLE quiz_answers (
attempt_id, question_id, answer_data JSONB, is_correct BOOLEAN, points INT
);
Настраиваются: ограничение по времени, максимальное количество попыток, перемешивание вопросов. Для быстрой проверки используем Elasticsearch для поиска по ответам — это ускоряет аналитику в 5 раз.
| Тип вопроса | Когда использовать | Оценка |
|---|---|---|
| Single choice | Быстрый тест знаний | Автоматически |
| Multiple choice | Выбор нескольких вариантов | Автоматически |
| True/False | Проверка фактов | Автоматически |
| Short answer | Развернутый ответ | Вручную или по ключевым словам |
| Essay | Эссе | Вручную преподавателем |
| Code exercise | Задачи по программированию | Через Judge0 API |
Почему поддержка SCORM критична для корпоративных клиентов?
SCORM — стандарт для импорта курсов из сторонних authoring-tools (Articulate, iSpring). Без него вы не сможете использовать готовые курсы, что увеличивает затраты на контент. Мы реализуем SCORM 1.2 и 2004, а также xAPI (Tin Can) для современного отслеживания активности. Интеграция SCORM позволяет сократить время на создание контента на 40%.
Прогресс и сертификаты
Прогресс студента отслеживается через lesson_completions:
CREATE TABLE lesson_completions (
student_id, lesson_id, completed_at,
watch_percentage INT, -- для видео
PRIMARY KEY (student_id, lesson_id)
);
Сертификат генерируется автоматически при завершении курса. Шаблон в PDF с данными: имя студента, название курса, дата, подпись преподавателя. Уникальный номер сертификата + страница верификации (/certificates/verify/{hash}). Генерация: Puppeteer (HTML → PDF) или @react-pdf/renderer. Асинхронная очередь Redis позволяет обрабатывать до 1000 сертификатов в минуту.
| Метод генерации | Скорость | Сложность |
|---|---|---|
| Puppeteer (HTML→PDF) | 200 сертификатов/мин | Средняя |
| @react-pdf/renderer | 500 сертификатов/мин | Низкая |
| Асинхронная очередь | 1000 сертификатов/мин | Высокая (Redis) |
Как масштабировать LMS?
Для больших нагрузок мы разделяем LMS на микросервисы: Service курсов, Service пользователей, Service видео, Service сертификатов. Каждый сервис использует собственную БД (PostgreSQL или Redis) и общается через RabbitMQ. Это позволяет горизонтально масштабировать узкие места — например, Service видео может запускать 10+ инстансов. Однажды мы обработали нагрузку в 15 000 одновременных пользователей без потери производительности.
Пример архитектуры микросервисов:
- Service курсов: отвечает за CRUD курсов и уроков, включает кэш Redis для часто запрашиваемых материалов.
- Service пользователей: авторизация, роли (администратор, преподаватель, студент).
- Service видео: интеграция с Cloudflare Stream, управление загрузкой и транскодингом.
- Service сертификатов: асинхронная генерация PDF через очередь Redis.
- Service платежей: интеграция со Stripe, управление подписками.
Каждый сервис развёрнут в отдельном Docker-контейнере и масштабируется независимо.
Что входит в работу
- Проектирование архитектуры базы данных и API
- Разработка админ-панели для управления курсами, пользователями, отчётами
- Настройка видеохостинга и интеграция с плеером
- Реализация системы квизов и заданий
- Генерация сертификатов и страница верификации
- Интеграция с платёжными системами (Stripe) и сервисами видеоконференций (Zoom/Jitsi)
- Документация REST API и инструкции для администраторов
- Обучение команды заказчика работе с платформой
- Гарантийная поддержка 1 месяц после запуска
Сроки и стоимость
MVP LMS (курсы с видео и квизами, прогресс студента, базовые сертификаты, магазин курсов): от 3 до 5 месяцев. Полная платформа с live-сессиями, assignment с ручной проверкой, SCORM-импортом, мобильным приложением: от 6 до 10 месяцев. Стоимость рассчитывается индивидуально после оценки объёма работ. Свяжитесь с нами, чтобы получить предварительную оценку. Обратитесь за консультацией — мы проанализируем ваш проект и предложим оптимальное решение.
Наш опыт
Мы разрабатываем LMS более 5 лет. Среди выполненных проектов — платформа для корпоративного обучения на 2000+ пользователей с SCORM-импортом и видеоконференциями, а также EdTech-продукт с подписочной моделью и мобильным приложением. Работаем с Laravel, Next.js, React Native. Получите консультацию, чтобы обсудить вашу задачу.







