Top Banner
27

Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

Nov 11, 2014

Download

Technology

Yandex

Я расскажу о том, как можно использовать распределённую очередь задач на основе Celery, а также быстро и эффективно выполнять импорт данных из множества источников с последующим экспортом. Доклад будет интересен тем, кто пишет на языке Python или разрабатывает сервисы, основанные на агрегации данных.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса
Page 2: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

Использование распределенной очереди задач для обработки данных в бэкенде Яндекс Спорта

Александр Южаков 20 сентября 2014

Page 3: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

Агрегация данных

3

Проверка наличия обновлений

Импорт

Хранение и модерация

Экспорт

logging

Page 4: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

4

Задачи решаемые на бэкенде

• Импорт и обработка данных

• Валидация импорта

• Интернационализация

• Хранение данных, модерация

Page 5: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

5

Задачи решаемые на бэкенде

• Подготовка данных (экспорт) для API и фронта

• Полное логирование процессов импорта/экспорта

• Независимость модулей различных видов спорта

Page 6: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

6

Задачи решаемые на бэкенде

• Высокая скорость работы

• Балансировка нагрузки

• Отказоустойчивость

Page 7: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

Особенности спортивных проектов

• Данных не очень много

• Строгие требования к свежести данных

• Множество источников, различные форматы

• Схожие сущности в различных видах спорта будут иметь разные схемы данных

Page 8: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

Особенности спортивных проектов

• Большие пиковые нагрузки, при относительно низких средних нагрузках

• Всегда есть задержки в данных относительно реальности

• Дедлайн не перенести

Page 9: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

9

расписание

результаты

составы команд

расписание ТВ

онлайн трансляции

спортсмены

видео лучших моментов и голов

...

...

...

...

Page 10: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

Инструментарий

•Python 2.x

•Django

•MySQL

•MongoDB10

Celery 3.1.x

Page 11: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

Celery

Page 12: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

Задачи импорта в виде функций

def (...):

@task

Page 13: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

Задачи импорта в виде функций

Плюс + просто и очевидно

Page 14: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

Задачи импорта в виде функций

Минусы: – многократное повторение одного и того же кода

– нет возможности использовать уже готовые функцииимпорта/экспорта с небольшими изменениями

– трудно отслеживать движение задачи

– сложно обрабатывать исключения

Page 15: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

15

К чему мы пришли...

Page 16: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

Задачи как классы

Page 17: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

Базовый класс для импорта

Page 18: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

18

Page 19: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

Пример импорта команд в футболе

Page 20: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

Плюсы?

+ Минимум кода

+ Фокус на импорте данных без явного взаимодействия с подсистемами

+ Обработка ошибок через генерацию стандартных исключений (SkipImport, ValidationError)

Page 21: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

Плюсы?

+ Декларативность

+ Стандартизация логирования

+ Предварительное кэширование для оптимизации работы с БД

+ Многоуровневая абстракция

Page 22: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

Минусы?

– Стал выше порог вхождения для программиста

Page 23: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

Еще много чего интересного...

• Классы экспортеры

• Классы импорта/экспорта переводов из Танкера

• Удобное централизованное логирование

Page 24: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

Логи

Page 25: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

Еще много чего интересного...

• Импорт переводов (если данные на разных языках) import_translations(data, cache, *args, **kwargs)

• Интеграция в Django-админку

• Независимость модулей системы

• Класс Resolver для автоимпорта по URL

Page 26: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

Админка

Page 27: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

Спасибо за внимание!