Какие плюсы и минусы в планировании сельдерея бьют периодические задания за 0,1 секунды? - PullRequest
0 голосов
/ 25 января 2019

Мое приложение требует запуска периодических задач (задача для проверки флага) каждую секунду.Но иногда кажется, что задание не выполнено в течение ожидаемого периода в 1 секунду.Поэтому я изменил его, чтобы выполнить в период 0,1 секунды.т.е. задача проверяет флаг 10 раз в секунду.

CELERY_BEAT_SCHEDULE = {
    'task-number-one': {
        'task': 'app.tasks.periodic_runner',
        'schedule': 0.1,
        'args': [],
        'relative': True
    },
    'task-number-two': {
        'task': 'app.tasks.periodic_assigner',
        'schedule': 0.1,
        'args': [],
        'relative': True
    }
}

Каковы плюсы и минусы?Эта задача попадает в базу данных каждый раз, когда она выполняется.

У меня есть пять таких задач.

Уничтожает ли он мой сервер каким-либо образом в долгосрочной перспективе?

1 Ответ

0 голосов
/ 26 января 2019

Это действительно зависит от того, что еще происходит. Для того чтобы решить, может ли ваше приложение масштабироваться для поддержки такого большого количества задач, требуются некоторые предварительные вычисления. Запустив их с интервалами 100 мс, мы выполняем

10 задач в секунду * 60 секунд / минута * 60 минут / час = 36 000 задач в час. Это означает, что каждый час мы выполняем 36 000 операций ввода-вывода для брокера, 72 000 операций ввода-вывода для бэкэнда результатов и n * 36 000 обращений к базе данных, где n - количество вызовов базы данных на задачу. Со всем остальным, что у вас происходит, и с ресурсами, которые вы развернули в своей архитектуре, представляет ли какой-либо из этих номеров проблему?

Например, предположим, что ваша база данных является базой данных mongodb, а ваша задача запрашивает информацию о неиндексированном поле. Тогда, да, это множество запросов, вероятно, заблокирует mongodb. Но если вы используете redis и mysql в AWS с экземплярами по 8 ГБ для каждого, вы сможете справиться со всем этим, не потревожив пота.

...