Сельдерей: обзор архитектуры и как она работает - Vinta Software

  1. Брокер
  2. Веб и рабочие узлы

Асинхронные очереди задач - это инструменты, позволяющие программным элементам запускаться на отдельном компьютере / процессе

Асинхронные очереди задач - это инструменты, позволяющие программным элементам запускаться на отдельном компьютере / процессе. Он часто используется в веб-архитектурах как способ делегирования длительных задач и быстрого ответа на запросы. Делегированная задача может инициировать действие, такое как отправка электронной почты пользователю или просто обновить данные внутри системы, когда она завершит выполнение.

В этой статье вы поймете, как работает очередь задач и каковы компоненты ее архитектуры. Мы сосредоточимся на Сельдерей , самый популярный инструмент для работы в проектах Python. Большинство других инструментов используют ту же архитектуру, поэтому принципы также применяются.

В общих чертах, причина, по которой мы используем очереди асинхронных задач, заключается в том, что мы хотим быстро отвечать нашим пользователям. Самый простой вариант использования для этого - делегировать длительные задания ЦП. Но самая популярная причина, по которой люди используют асинхронные задачи, - это выполнение внешних вызовов API. Всякий раз, когда вы зависите от внешних служб, вы больше не контролируете, сколько времени потребуется, чтобы быть готовым. Также может быть так, что они никогда не будут готовы, так как система может быть повреждена или сломана. Еще одно хорошее применение для асинхронных задач - это подготовка и кэширование значений результатов. Вы также можете использовать их для распространения массовых вставок в базу данных с течением времени. Это может помочь вам избежать DDoS'а в вашей собственной базе данных. Задания Cron - еще один хороший пример того, что вы можете с ними сделать. Существует множество инструментов для управления асинхронными задачами в Python. RQ кажется, в последнее время привлекают внимание, но Сельдерей пока что абсолютный чемпион

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

Затем потребители проверяют начало очереди на наличие ожидающих заданий, выбирают первое и выполняют

В контексте очередей асинхронных задач «производителями» обычно являются «веб-узлы» или любая система, в которой размещаются задания, очередь называется «посредником», а потребителей - «работниками». Поскольку работники также могут помещать новые задачи в очередь, они также могут вести себя как «производители». Теперь, когда у нас есть обзор, давайте копнем немного глубже.

Брокер

Концепция брокера очень проста: очередь. Но каковы доступные способы реализации очереди в компьютерной системе? Одним из самых простых будет использовать текстовый файл. Текстовые файлы могут содержать последовательность описаний выполняемых заданий, поэтому мы можем использовать их в качестве посредника нашей системы. Проблема с текстовыми файлами заключается в том, что они не предназначены для решения реальных проблем приложений, таких как сеть и одновременный доступ. Из-за этого нам нужно что-то более надежное. С другой стороны, базы данных SQL способны работать в сети и работать с одновременным доступом. Проблема с ними в том, что они слишком медленные. Базы данных NoSQL, напротив, довольно быстрые, но во многих случаях им не хватает надежности. Поэтому при построении очередей мы должны использовать быстрые, надежные инструменты с поддержкой параллелизма, такие как RabbitMQ , Redis а также SQS ,

Сельдерей полностью поддерживает RabbitMQ и Redis. Хотя SQS и Работник зоопарка также доступны, они предлагаются с ограниченными возможностями. ( смотри здесь больше )

Веб и рабочие узлы

Веб и рабочие узлы являются простыми серверами. Единственное отличие состоит в том, что веб-узлы получают запросы из Интернета и размещают задания для асинхронной обработки, а рабочие - это машины, которые выбирают эти задания, выполняют их и предоставляют ответ. Несмотря на это логическое разделение, вы обычно найдете код для обоих в одном и том же хранилище. Это хорошо, потому что оба приложения могут получить выгоду от совместного использования таких вещей, как модели и сервисы. Этот подход также предотвращает несоответствия.

Вот очень простой пример задачи Celery и код для ее выполнения:

# Это происходит в `рабочем узле` из импорта из сельдерея. Celery app = Celery (...) @ app.task def add (a, b): return a + b # Это происходит в` веб-узле` из импорта импорта задач. г = доп. задержка (4, 5). get () print (r) # 9

Первый пример показывает код, который должен выполняться асинхронно. Это идет в рабочем узле. Второй пример - это код, который помещает задание в очередь для запуска. Обычно это происходит в веб-узле. В этом примере веб-узел помещает задание на добавление и ждет, пока результат станет доступен. Когда ответ готов, выводится результат.

Вот пример Django:

# Это происходит в `worker node` @ app.task def update_attendees (event, n): event.attendees_number = n event.save () # Это идет в` web node` event = Event.objects.get (name = 'DjangoCon') update_attendees.delay (событие, 9001)

В этом случае веб-узел ставит задачу обновить количество посетителей события. Обратите внимание, что мы передаем объект события в задачу. Не делай этого .

Не передавайте сложные объекты в качестве параметров задачи

Объекты сериализуются и сохраняются в брокере. Затем они десериализуются перед передачей на задание. Передача сложных объектов, таких как экземпляр модели, в качестве параметра сопряжена с несколькими проблемами. Прежде всего, в старых версиях Celery Pickle использовался как метод сериализации по умолчанию. Как вы, возможно, знаете, Pickle имеет уязвимости в безопасности. Допуская сложные объекты, вы увеличиваете шансы на разоблачение. Последняя версия Celery решает эту проблему, используя JSON в качестве метода сериализации по умолчанию. Что еще более важно: объект базы данных, который вы передали, может измениться между временем, когда вы ставите задачу, и временем ее выполнения. В этом случае вы будете работать с устаревшей версией.

Что вы хотите сделать, это передать идентификатор объекта и получить свежую копию из базы данных в начале задачи:

@ app.task def update_attendees (event_id, n): e = Event.objects.get (id = id_event) e.attendees_number = n e.save () e = Event.objects.get (name = 'DjangoCon') update_attendees. задержка (e.id, 9001)

В предыдущих примерах мы вызывали задержку и собирались вместе, как если бы они были одним действием. На самом деле это две разные вещи. Функция delay помещает задачу в очередь и возвращает обещание, которое можно использовать для отслеживания состояния и получения результата, когда он будет готов. Вызов get в этом обещании заблокирует выполнение до тех пор, пока результат не станет доступен. Задача добавления должна где-то хранить результат, чтобы к нему мог обращаться процесс, который его вызвал. Это означает, что мы пропустили часть архитектуры. Помимо веб, брокерских и рабочих компонентов, есть также бэкэнд для результатов.

Помимо веб, брокерских и рабочих компонентов, есть также бэкэнд для результатов

Бэкэнд результатов будет использоваться для хранения результатов задачи. На практике вы можете использовать тот же экземпляр, который вы используете для брокера, чтобы также хранить результаты. Есть и другие технологии Помимо поддерживаемых параметров брокера, которые могут быть использованы в качестве бэкэнда результатов в Celery, но есть некоторые различия в зависимости от того, что вы используете. Например, в Postgres метод get выполнит опрос, чтобы проверить, готов ли результат. Для других инструментов, таких как Redis, это делается по протоколу pub / sub.

Хорошо, это должно охватывать основы компонентов в архитектуре Celery. Надеюсь, что это помогло вам лучше понять, как это работает, и теперь вы чувствуете себя более уверенно.

Узнайте больше из нашего блога:
- Как убедиться, что ваши задачи Celery Beat работают
- Multitenancy: манипулирование данными клиентов в Django

Похожие

Всемирная паутина: учит или вредит?
... ин Ингатьев, Еврейский Колотинский Эксперты из Лаборатории Касперского Большинство пользователей компьютеров рассматривают Интернет как часть повседневной жизни. Многие из них используют его постоянно, на работе и дома, и не могут представить себе жизнь без этого инструмента, который, учитывая,
Как мне запрограммировать Honeywell 5800WAVE на L5210?
5800WAVE полностью совместим с LYNX 5210. Для L5210 чтобы использовать 5800WAVE, установите одинаковый идентификатор дома на 5800WAVE и L5210. Пока сирена находится в зоне действия, а L5210 запрограммирован на включение сирены во время тревоги, система активирует сирену. DIP-переключатели на сирене 5800WAVE расположены внутри устройства в верхнем
Как установить и использовать консоль восстановления Windows XP
Оглавление Что такое консоль восстановления? Как установить консоль восстановления на жесткий диск Как запустить консоль восстановления Удалить запрос пароля Как использовать консоль восстановления Удаление
Как отслеживать доход вашего сайта с помощью Google Analytics
Хотя некоторые люди создают
Решено: слот PCMCIA не работает на ноутбуке Dell Latitude E5520
Привет SpeedStep. СООБРАЖЕНИЯ ПО ВАШЕМУ ПОСТУ Я ценю ваши усилия в ответ на мой пост. Это хороший репозиторий проблем, связанных с проблемами PCMCIA / PC Card / Cardbus и некоторыми обходными путями. Я вижу, это обновленная версия вашего поста Вот : http://en.community.dell.com/support-forums/laptop/f/3518/p/19351953/19897449.aspx
Как установить мод Minecraft
... или Minecraft и потратили некоторое время на то, чтобы дурачиться в глыбовой стране чудес - и теперь вы хотите немного больше опыта. Это где моды приходят. Одиночная игра Моддинг Установка модов для однопользовательского клиента - довольно запутанный процесс. Шаги варьируются от мода к моду, поэтому вы должны следовать инструкциям, приведенным для конкретного мода, который вы ищете, но общая техника та же. Я пройдусь по установке одного мода на Windows: пользователь Minecraft
Обзор концерта: Beyoncé и Jay-Z's On the Run Tour II
Но что в любом случае реально? Фото: Ларри Бусакка / PW18 / Getty Images для Parkwood Entert В последний раз Бейонсе и Jay-Z гастролировали вместе Их брак был в опасности, хотя они могли одурачить толпу. Несколькими неделями ранее, в мае 2014 года, сестра Бейонсе Соланж была запечатлена
О T3: кто мы, чем занимаемся и как с нами связаться
... веб-сайтов, посвященных образу жизни потребителей, а журнал T3 - его печатный аналог. Вы можете подписаться на нас в щебет , facebook а также Instagram , Мы представляем товары в полезных руководствах по покупке и тщательно отобранных предложениях о стилях, быту, авто, умном доме, часах, путешествиях, фитнесе и многом другом.
Microsoft .NET Framework: зачем он нужен и как его установить в Windows
... software-windows/"> часто загружайте и устанавливайте программное обеспечение Как найти программное обеспечение с открытым исходным кодом для Windows Как найти программное обеспечение с открытым исходным кодом для Windows Вы беспокоитесь о конфиденциальности, безопасности данных или вредоносном коде, скрытом в вашем программном
Обзор 7-дюймового планшета Xido X70 с Android 4.4.2 и множеством аксессуаров менее чем за 50 евро
Как правило, планшет с диагональю экрана 7 дюймов и техническими данными, указанными здесь, стоит около 40 евро. Таким образом, цена не будет ничего особенного. Но, конечно, это не так ... Прежде всего, безусловно, очень качественная упаковка в благородном футляре из ДВП. Это не просто планшет. Он также богат аксессуарами. Вероятно, наиболее важным из них является защитный чехол со встроенной проводной клавиатурой.
Обзор GeForce GTX 1060: Nvidia борется с AMD за лучшее место для игр нового поколения
... ионный Radeon RX 480 за $ 200 в графической войне следующего поколения. Одно это немного шокирует. После Nvidia-сюрприза запустили чудовищные 650 долларов GeForce GTX 1080 и Titan X-beating 380 долларов

Комментарии

Как обеспечить качественное изображение, как быстро оно становится четким, и как оно делает снимки на практике?
Как обеспечить качественное изображение, как быстро оно становится четким, и как оно делает снимки на практике? В чем разница между Sigma 70-300 APO DG и Canon 70-300 IS USM? Узнайте больше в нашем обзоре. Canon EF-S 55-250mm f / 4-5.6 IS, который мы позаимствовали в магазине Digihit.cz является часто используемым телеобъективом на практике. Это стоит сравнительно небольших
Но как вы можете отлаживать приложение, которое работает на клиентском компьютере?
Но как вы можете отлаживать приложение, которое работает на клиентском компьютере? Ответ прост, в браузере. Недостаток очевиден: если вы можете отлаживать JavaScript через браузер, клиент также может, т. Е. Клиент на другом компьютере в другой части мира, также может получить доступ к системе и отладить файлы JavaScript. Риск этого будет зависеть от того, как реализован ваш код. Примечательно, что язык JavaScript
КАК ДАТЬ ИНТЕРНЕТ ВЕЛИКОЙ СТЕНЫ?
КАК ДАТЬ ИНТЕРНЕТ ВЕЛИКОЙ СТЕНЫ? Конечно, есть способы перейти на другую сторону стены, но мы должны подумать об этом, прежде чем приехать в Китай, потому что (как вы можете догадаться) все лозунги / страницы о способах прорыва блокады здесь заблокированы. Наименее требовательный от пользователя, потому что бесплатный и онлайн (без необходимости установки дополнительного программного обеспечения) являются прокси-шлюзами. Однако они также являются наиболее ненадежными,
Как работает модуль родительского контроля?
Как работает модуль родительского контроля? По умолчанию модуль родительского контроля не включен, поэтому родители могут пользоваться Интернетом без ограничений. Однако вы можете настроить активацию этого модуля, когда ребенок входит в систему. Родители могут выбирать категории сайтов, которые их дети не могут смотреть. Они могут быть порнографического, вульгарного языка, предлагая нелегальное программное обеспечение, оружие и наркотики или страницы поощрять насилие и
Как JavaScript работает на сервере?
Как JavaScript работает на сервере? Node.js работает на среда v8 - это виртуальная машина или механизм JavaScript, который выполняет код JavaScript, поэтому для хостинга вы не можете использовать обычные веб-хосты. Вам понадобятся те, которые имеют среду v8 . Вот несколько предложений провайдера для хостинга Node.js: Облако Литейное
Помните функцию смартфона, которую мы всегда принимаем как должное?
Помните функцию смартфона, которую мы всегда принимаем как должное? Да, это именно так. Адаптивная яркость приглушает или осветляет дисплей в зависимости от вашего окружения, поэтому независимо от того, где вы находитесь, ваш дисплей не будет слишком темным или слишком ярким. При этом в Windows 10 функция адаптивной яркости доступна только для пользователей Pro и Enterprise. Как бы это ни было полезно, большинству из нас нравится вручную настраивать яркость экрана, чтобы мы могли
Как улучшить производительность Minecraft?
Как улучшить производительность Minecraft? Эти семь шагов позволят вам выжать из игры дополнительную производительность, что может быть особенно важно после того, как вы добавите всевозможные захватывающие моды и пакеты текстур, которые, к сожалению, но в конечном итоге, замедляют игру даже больше, чем уже должен был начать с. Интересно, если вы пусть ваш ребенок играет
Вы когда-нибудь задумывались, как программы на вашем компьютере и посещаемых вами сайтах «общаются» друг с другом?
Вы когда-нибудь задумывались, как программы на вашем компьютере и посещаемых вами сайтах «общаются» друг с другом? Читать далее ) которые программисты могут использовать для простого взаимодействия с определенными службами, такими как Windows Store. Вместо того, чтобы писать вручную весь код, который требуется приложению, чтобы его можно было считать, например, приложением UWP (универсальная платформа Windows), .NET Framework
Как ваш инструмент SAM обрабатывает Java?
Как ваш инструмент SAM обрабатывает Java? Что на дорожной карте? Сайт Oracle Java SE Roadmap сообщает нам, что: «… Oracle не будет публиковать дальнейшие обновления Java SE 8 на своих общедоступных
Если нет, как вы можете защитить свои данные, не заплатив выкуп?
Если нет, как вы можете защитить свои данные, не заплатив выкуп? Читать далее , Даже если вы постоянно обновляете программное обеспечение, такое как Java, ваш компьютер все еще находится в опасности, если вы не устанавливаете обновления Windows. Windows 10 делает эти автоматические обновления простыми
Если вы хотите экспортировать диапазон данных в виде веб-страницы (HTML-файл), как вы справляетесь с этим?
Если вы хотите экспортировать диапазон данных в виде веб-страницы (HTML-файл), как вы справляетесь с этим? В этой статье мы обсудим, как быстро экспортировать данные Excel в выборку в файл HTML. Экспорт данных Excel в HTML-файлы с помощью команды «Сохранить как» Экспорт данных Excel в HTML-файлы с Kutools для Excel Экспортируйте область данных из файла Excel в

Но каковы доступные способы реализации очереди в компьютерной системе?
Как обеспечить качественное изображение, как быстро оно становится четким, и как оно делает снимки на практике?
В чем разница между Sigma 70-300 APO DG и Canon 70-300 IS USM?
Но как вы можете отлаживать приложение, которое работает на клиентском компьютере?
КАК ДАТЬ ИНТЕРНЕТ ВЕЛИКОЙ СТЕНЫ?
Как работает модуль родительского контроля?
Как JavaScript работает на сервере?
Помните функцию смартфона, которую мы всегда принимаем как должное?
Как улучшить производительность Minecraft?
Вы когда-нибудь задумывались, как программы на вашем компьютере и посещаемых вами сайтах «общаются» друг с другом?