Почему Сельдерей отговаривает работника и бьет вместе?

Из функции помощи сельдерея:

> celery worker -h

...

Embedded Beat Options:
  -B, --beat            Also run the celery beat periodic task scheduler. Please note that there must only be
                        one instance of this service. .. note:: -B is meant to be used for development
                        purposes. For production environment, you need to start celery beat separately.

Это также появляется в документах.

Вы также можете внедрить beat внутрь воркера, включив опцию worker -B, это удобно, если вы никогда не будете запускать более одного воркера, но это редко используется и по этой причине не рекомендуется для использования в продакшене:

celery -A proj worker -B

Но на самом деле не объясняется, почему это «плохо» использовать в производстве. Хотелось бы некоторого понимания.


person zerohedge    schedule 18.07.2018    source источник


Ответы (1)


Опция --beat запустит планировщик ударов вместе с воркером.

Но вам нужен только один планировщик ударов。

В производственной среде обычно работает более одного работника. Использование опции --beat будет катастрофой.

Например: у вас запланировано мероприятие на 12:00 каждый день.

Если вы запустили двухтактный процесс, событие будет запускаться дважды в 12:00 каждый день.

Если вы никогда не будете запускать более одного рабочего узла, вариант --beat подойдет.

person gushitong    schedule 18.07.2018
comment
Рабочий узел @zerohedge = рабочий процесс, два рабочих узла (процесса) обычно работают на разных машинах в производстве. - person gushitong; 18.07.2018
comment
так что, если у меня сейчас есть только этот celery -A myappname worker, изменение его на celery -B myappname worker не должно иметь негативных последствий для производства? (запуск моего приложения на Heroku, если это имеет какое-либо значение) - person zerohedge; 18.07.2018
comment
Если у вас есть только один рабочий узел, -B вполне подойдет. В противном случае вам нужно запустить отдельный процесс битов. - person gushitong; 18.07.2018
comment
вот в чем я не уверен, это считается одним узлом? - person zerohedge; 18.07.2018
comment
из этого ответа на SO: давайте различать рабочие и рабочие процессы. Вы запускаете celery worker, затем он запускает ряд процессов (в зависимости от таких вещей, как --concurrency и --autoscale, по умолчанию создается столько процессов, сколько ядер на машине) - person zerohedge; 18.07.2018
comment
Если вы запустите celery -A app worker -c 4 --beat , сельдерей начнет порождать один процесс удара для планирования события, четыре дочерних процесса для обработки очереди. Это называется рабочим узлом. (Может быть, я ошибаюсь насчет worker node = worker process) - person gushitong; 18.07.2018
comment
извините, я до сих пор не понимаю, считается ли это нормальным или нет. celery -A app worker -c 4 --beat действителен в производстве или нет? что называется рабочим узлом, четырьмя одновременными дочерними процессами или...? - person zerohedge; 18.07.2018
comment
Когда вы запускаете celery worker, он создает один родительский процесс для управления запущенными задачами. Этот процесс обрабатывает функции бухгалтерского учета, такие как отправка/получение сообщений очереди, регистрация задач, уничтожение зависших задач, отслеживание статуса и т. д. Затем этот процесс порождает N дочерних рабочих процессов, которые фактически выполняют отдельные задачи. Номер определяется аргументом -c при запуске воркера. Родительский процесс (со всеми его дочерними процессами) называется рабочим узлом. - person gushitong; 18.07.2018
comment
Давайте продолжим обсуждение в чате. - person gushitong; 18.07.2018
comment
Было бы здорово увидеть конец этого разговора. Я думаю, что путаница связана с рабочим сельдереем, порождающим несколько дочерних рабочих процессов (в зависимости от количества ядер ЦП). Будет ли всеми этими дочерними работниками управлять встроенный бит (если вы использовали встроенный бит) или вы рискуете создать повторяющиеся задачи? Не могли бы вы уточнить, приведет ли расписание встроенного бита к дублированию задач, если есть несколько дочерних рабочих процессов, но один рабочий узел сельдерея? - person Ryan-Neal Mes; 10.01.2019
comment
@gushitong, ваша ссылка на чат недоступна, поэтому вы не можете получать дальнейшие обновления. Есть новости по этому поводу? - person M.A.K. Simanto; 12.02.2019