27

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

  • Upload
    yandex

  • View
    494

  • Download
    0

Embed Size (px)

DESCRIPTION

Я расскажу о том, как можно использовать распределённую очередь задач на основе Celery, а также быстро и эффективно выполнять импорт данных из множества источников с последующим экспортом. Доклад будет интересен тем, кто пишет на языке Python или разрабатывает сервисы, основанные на агрегации данных.

Citation preview

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: Использование распределённой очереди задач для обработки данных в бекенде спортивных проектов Яндекса

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