$30 off During Our Annual Pro Sale. View Details »

Продвинутое использование Celery

Продвинутое использование Celery

Alexander Koshelev

October 04, 2014
Tweet

More Decks by Alexander Koshelev

Other Decks in Programming

Transcript

  1. Продвинутое использование Celery Александр Кошелев, Яндекс Python Party, Киев, 4

    октября 2014 29
  2. Содержание Общее описание – что такое Celery Использование MongoDB и

    Redis в качестве брокера Несколько приложений Celery в одном проекте Эксклюзивный доступ к ресурсам Логирование ошибок Мониторинг Celery
  3. Что такое Celery Для пользователя "Distributed task queue" Асинхронные задачи

    Задачи по расписанию
  4. Что такое Celery Для пользователя Задачи ставятся в очереди клиентами

    Очереди хранит брокер Очереди разбираются воркерами Задачи возвращают результаты Воркеры создают события
  5. Что такое Celery Для разработчика Kombu + абстракция над "задачей"

    Kombu "Messaging library" Несколько транспортов для сообщений AMQP или "virtual AMQP"
  6. Что такое Celery Для админа Воркеры (1..N) Мастер-процесс (1) Процессы

    выполняющие задачи (1..N) Воркер слушает очереди (1..N) у брокера Особый воркер - celery beat Имеет расписание Ставит задачи в очереди Сохраняет своё состояние Брокер - транспорт между клиентом и воркерами
  7. Альтернативные брокеры Нет дополнительной сущности Лучше подходят под задачу

  8. Альтернативные брокеры Virtual AMQP Эмуляция AMQP Есть не все возможности

    Больше кода, который может сломаться Потенциально меньшая эффективность
  9. Альтернативные брокеры Redis Работает через virtual AMQP Быстрый Встроенный LRU

    механизм
  10. Альтернативные брокеры MongoDB Работает через virtual AMQP Failover через Replica

    Set Экспериментальный статус Не работают события
  11. Несколько приложений Что такое "приложение" Набор настроек Зарегистрированные задачи Всегда

    есть хотя бы одно
  12. Несколько приложений Разные брокеры Разный профиль нагрузки Разный тип задач

  13. Несколько приложений Использование f r o m c e l

    e r y i m p o r t C e l e r y a p p _ g l o b a l = C e l e r y ( ) a p p _ g l o b a l . c o n f . u p d a t e ( B R O K E R _ U R L = ' m o n g o d b : / / ' ) a p p _ l o c a l = C e l e r y ( ) a p p _ l o c a l . c o n f . u p d a t e ( B R O K E R _ U R L = ' r e d i s : / / ' ) a p p _ g l o b a l . s e t _ c u r r e n t ( ) t a s k _ a . a p p l y _ a s y n c ( ) a p p _ l o c a l . s e t _ c u r r e n t ( ) t a s k _ b . a p p l y _ a s y n c ( )
  14. Блокировки ресурсов Ограниченная пропускная способность Эксклюзивный доступ Запуск одной задачи

    за раз
  15. Блокировки ресурсов Интеграция Декоратор Базовый класс Внутри beat шедулера @

    t a s k @ l o c k e d ( ' l o c k - n a m e ' ) d e f m y _ t a s k ( ) : . . . c l a s s M y T a s k ( L o c k e d T a s k ) : d e f l o c k e d _ r u n ( s e l f ) : . . .
  16. Блокировки ресурсов Инструмент ZooKeeper (kazoo) etcd ... MongoDB

  17. Блокировки ресурсов Semaphore Нужно ограничить нагрузку на компонент У компонента

    есть емкость - кол-во тикетов Если тикеты кончились - обратно в очередь
  18. Блокировки ресурсов Semaphore z k = K a z o

    o C l i e n t ( ) d e f l o c k e d ( n a m e , c a p a c i t y ) : d e f _ d e c o r a t o r ( f u n c ) : d e f _ w r a p p e r ( s e l f , * a r g s , * * k w a r g s ) : s e m a p h o r e = z k . S e m a p h o r e ( ' / p a t h ' , n a m e , c a p a c i t y ) i f s e m a p h o r e . a c q u i r e ( b l o c k i n g = F a l s e ) : t r y : r e t u r n f u n c ( s e l f , * a r g s , * * k w a r g s ) f i n a l l y : s e m a p h o r e . r e l e a s e ( ) e l s e : r a i s e s e l f . r e t r y ( c o u n d o w n = 5 ) r e t u r n _ w r a p p e r r e t u r n _ d e c o r a t o r
  19. Блокировки ресурсов Semaphore @ t a s k ( b

    i n d = T r u e ) @ l o c k e d ( ' s a v e - t o - s t o r a g e - t a s k ' , 1 0 ) d e f s a v e _ t o _ s t o r a g e ( s e l f , d a t a ) : s t o r a g e . s a v e ( d a t a )
  20. Блокировки ресурсов Mutex Эксклюзивный доступ Если лок у кого-то другого

    - обратно в очередь
  21. Блокировки ресурсов Mutex f r o m c e l

    e r y i m p o r t T a s k c l a s s L o c k e d T a s k ( T a s k ) : l o c k _ n a m e = N o n e r e t r y _ o n _ l o c k = T r u e d e f r u n ( s e l f , * a r g s , * * k w a r g s ) : l o c k = z k . L o c k ( ' / p a t h ' , s e l f . l o c k _ n a m e ) i f l o c k . a c q u i r e d ( b l o c k i n g = F a l s e ) : t r y : r e t u r n s e l f . l o c k e d _ r u n ( * a r g s , * * k w a r g s ) f i n a l l y : l o c k . r e l e a s e ( ) e l i f s e l f . r e t r y _ o n _ l o c k : r a i s e s e l f . r e r t y ( c o u n t d o w n = 5 ) d e f l o c k e d _ r u n ( s e l f ) : r a i s e N o t I m p l e m e n t e d E r r o r
  22. Блокировки ресурсов Mutex c l a s s I m

    p o r t D a t a T a s k ( L o c k e d T a s k ) : n a m e = ' i m p o r t - d a t a ' r e t r y _ o n _ l o c k = F a l s e d e f l o c k e d _ r u n ( s e l f , u r l ) : r e s p o n s e = r e q u e s t s . g e t ( u r l ) . . .
  23. Логирование ошибок Варианты Воркер пишет ошибки в консоль или файл

    Настройка логинга в обработчике сигнала Настройка логинга в проекте
  24. Логирование ошибок Настройка i m p o r t l

    o g g i n g f r o m c e l e r y . s i g n a l s i m p o r t s e t u p _ l o g g i n g @ s e t u p _ l o g g i n g . c o n n e c t d e f s e t u p _ w o r k e r _ l o g g i n g ( l o g l e v e l , l o g f i l e , f o r m a t , c o l o r i z e ) : r o o t = l o g g i n g . g e t L o g g e r ( ) r o o t . s e t L e v e l ( l o g l e v e l ) r o o t . a d d H a n d l e r ( l o g g i n g . h a n d l e r s . S y s L o g H a n d l e r ( ) )
  25. Логирование ошибок Аналитика

  26. Мониторинг Получение текущего состояния воркера celery inspect ping celery inspect

    active celery inspect stats Подписка на события воркера celery events celery flower
  27. Мониторинг celery inspect u s e r @ h o

    s t : ~ $ c e l e r y i n s p e c t p i n g - > d e f a u l t @ h o s t 0 1 : O K p o n g - > m a n a g e m e n t @ h o s t 0 1 : O K p o n g - > s w a r m @ h o s t 0 2 : O K p o n g - > s w a r m _ c h e c k @ h o s t 0 2 : O K p o n g - > s w a r m _ p u s h @ h o s t 0 3 : O K p o n g - > s w a r m _ s t o r e @ h o s t 0 3 : O K p o n g - > s w a r m _ w a l k @ h o s t 0 4 : O K p o n g
  28. Мониторинг Flower

  29. Мониторинг Что выбрать celery inspect - текущий мониторинг celery flower

    - глубокая отладка и медитация
  30. Вопросы? daevaorn@yandex.ru github.com/daevaorn