Есть ли способ программно ограничить количество одновременных задач, которые запускает Celery? - PullRequest
0 голосов
/ 12 апреля 2020

Я работаю с системой на основе Django, в которой долго выполняющиеся аналитические запросы откладываются на асинхронный рабочий на основе Celery. Сельдерей также выполняет другие задачи, а не только запросы. Эта система использует k8s, и каждый узел сервера приложений Django имеет рабочий узел Celery, поэтому пропускная способность Celery масштабируется с пропускной способностью приложения.

Я ищу способ ограничить общее количество аналитических задач, выполняемых одновременно для всех работников. Это связано с тем, что если мы удвоим количество серверов приложений, у нас не будет 2-кратной пропускной способности аналитических запросов. Насколько я могу судить, единственное 100% решение Celery - иметь выделенного сотрудника (-ей) и иметь аналитические задачи в своей собственной очереди, которая направляет их к указанным c работникам. Все остальные задачи по сельдерею будут направлены на других работников. Это на самом деле не 100% Celery, потому что мне нужно изменить конфигурацию k8s, чтобы иметь выделенные рабочие узлы в дополнение к стандартному рабочему для каждого узла приложения.

Или я могу использовать токен Celery bucket без ограничения скорости, чтобы сделать это? Документы о том, что именно это делает, мне не ясны, и я не смог найти пример того, как кто-то использовал это для того, что я хочу.

Единственное другое решение, не относящееся к Celery, может заключаться в использовании распределенного счетного семафора, который все мои аналитические задачи Celery пытаются получить перед выполнением работы. Таким образом, столько, сколько вы хотите, могут поставить в очередь и попытаться выполнить, но только n сможет продолжить работу одновременно. Но это порождает проблему сложности обработки сбоя или смерти сервера приложений при проведении семафора и др. c. и, насколько я могу судить, только Zookeeper делает это по-настоящему простым и надежным благодаря проверкам живучести для автоматического выпуска. Однако я бы предпочел не вводить Zookeeper в этот проект, если мне действительно не нужно.

...