Введение 5
1. Постановка задачи 7
2. Обзор существующего решения и технологий 8
2.1. Существующая система внутри платформы 8
2.1.1. Функциональность 8
2.1.2. Достоинства и недостатки 9
2.2. OLTP и OLAP подходы 11
2.3. CDC и реплицирование 12
2.4. Вывод 13
2.5. Использованные технологии 14
2.5.1. Greenplum 14
2.5.2. Debezium 14
2.5.3. Airflow 15
2.5.4. Golang 15
3. Требования 16
4. Архитектура 17
4.1. Взаимодействие модулей системы 17
4.2. Сценарии использования 18
4.3. Сервис генерации отчетов 20
5. Особенности реализации 22
5.1. Применение CDC-событий и реплицирование 22
5.2. Формирование агрегированных таблиц для отчетов ... 22
5.3. Оркестрация процессов в Airflow 23
5.4. Поддержка HTTP API и асинхронных запросов в Kafka 24
5.5. Развертывание сервиса и мониторинг 24
6. Тестирование и апробация 26
Необходимым атрибутом любого развивающегося бизнеса является качественное обучение и повышение квалификаций сотрудников компании. В наше время эффективным способом обучать персонал с минимальными затратами является дистанционный формат и специальные системы, которые позволяют получать знания удаленно. Организация обучения на таких платформах предполагает использование готовых материалов и уроков с адаптацией под конкретную компанию при необходимости, передачу доступов сотрудникам, выставление сроков прохождения, проверку усвоенных знаний. Это позволяет специалистам различных сфер (например, бухгалтерии, права, кадров, финансов, госзакупок) получать доступ к корпоративной базе знаний, соответствующей профстандартам, закреплять знания через тесты и проходить аттестацию, не отрываясь от рабочего процесса.
При работе с системами дистанционного обучения руководителю компании предоставляется особый доступ, на основе которого формируется учебное заведение. Руководитель может приглашать на обучение сотрудников, назначать им программы и тесты, следить за прогрессом и успеваемостью учеников. Возможность просматривать статистику по обучению является важной составляющей функциональности платформы, поскольку от ее показателей зависят дальнейшие действия руководителя - например, в случае неудовлетворительных результатов сотрудников стоит мотивировать назначение нового обучения. При этом для обеспечения удобного и надежного пользовательского опыта данные должны корректно вычисляться и отображаться на странице за приемлемое время.
У одной организации в сфере профессиональных СМИ, разрабатывающей платформу для онлайн-обучения сотрудников, возникла необходимость в создании страницы с отображением отчетности для руководителей. Планируемый раздел должен как показывать общую статистику по обучению всех сотрудников (их активность, вовлеченность, успеваемость), так и формировать детальные отчеты с описанием пройденных программ и тестов по каждому ученику. Реализация этой функциональности также осложняется большим объемом данных: в рамках одного учебного заведения может быть более 10000 пользователей и десятки тысяч назначений обучений и прохождений программ. Важно своевременно обрабатывать информацию, при этом не затрачивая много времени на загрузку раздела.
Данная работа посвящена созданию сервиса, предоставляющего необходимую информацию для отображения на странице со статистикой по обучению пользователей и генерирующего подробные отчеты, с учетом описанных выше сложностей.
В ходе данной работы были получены следующие результаты.
• Произведен обзор существующего решения, которое перестало удовлетворять требованиям бизнеса ввиду роста объема данных. Выполнено сравнение OLTP- и OLAP-подходов, механизмов CDC и репликации; сделан вывод о том, что OLAP-хранилище вместе с CDC позволяет эффективно хранить и агрегировать данные, не нагружая источник.
• Выявлены и сформулированы требования к системе: функциональные (типы генерируемых отчетов, показателей и статистик), а также нефункциональные (способы взаимодействия с системой, частота обновления данных, время ответа).
• Спроектирована архитектура решения, включающая в себя компоненты по загрузке, агрегации и экспорту данных, а также сервис, предоставляющий интерфейс для получения данных отчетов.
• Реализована следующая функциональность:
• настроены процессы загрузки данных из источника в аналитическое хранилище Greenplum с помощью Airflow и Debezium;
• созданы таблицы с агрегированной статистикой и написан Airflow DAG для их обновления и загрузки в транзакционную базу сервиса PostgreSQL;
• реализован сервис генерации статистики по отчетам на Go, предоставляющий как синхронное HTTP API, так и асинхронно обрабатывающий очередь запросов в Kafka, покрыт модульными тестами и настроен мониторинг.
• Проведено нагрузочное и приемочное тестирование, в результате чего были исправлены дефекты и недоработки со стороны бизнес- логики и производительности системы.
Сервис был внедрен и использован для визуализации статистики по обучению сотрудников.