ИМ
Игорь Максимов11. Dezember 2018 06:56

django и celery на разных серверах

django, celery

Доброго времени суток. Интересует такой вопрос как разнести приложение django и приложение celery на разные сервера.
Тоесть имею:
2 сервера в одной локальной сети web-server и storage. web-server у меня выполняет роль собственно веб-сервера с приложением, а storage выполняет роль хранилища для видео-контента. Сейчас у меня на web-server крутится приложение, celery+redis+ffmpeg(связка для конвертирования видео-контента). storage же сейчас выполнят только роль хранилища.
Хочу распределить нагрузку на 2 сервера чтобы операция конвертирования велась не на web-server а на storage.
Каким образом это все можно организовать?

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

9
Evgenii Legotckoi
  • 11. Dezember 2018 07:03

Добрый день.

Я пока с такой задачей не сталкивался, но когда столкнусь, то первое, что сделаю, то просто подниму оба инстанса приложения на обоих серверах. Если весь бэкенд написан в одном приложении web+celery.

И просто разнесу нагрузку с помощью nginx. Для команд конвертирования должны быть в данном случае отдельные вьюшки сделаны, а nginx будет отправлять запросы конвертирования в сторону сервера storage. Но это если у вас бэкенд web приложения отвечает за старт конвертирования и т.д.

Запросы в данном случае правильно будет через nginx маршрутизировать.

А потом уже спокойно написал бы полностью отдельное приложение, которое будет отвечать за всю эту кухню по конвертации.

    Илья Чичак
    • 11. Dezember 2018 07:18

    У вас не получится передать нормально сообщение в целери на другом сервере. Даже если будет один и тот же проект на разных хостах. Как вариант - вынести логику обработки в отдельное приложение, его разместить на втором сервере и снабдить каким-нибудь API. И заставить первое приложение отсылать запрос на второй сервер для запуска какой-либо обработки.

      Evgenii Legotckoi
      • 11. Dezember 2018 07:25
      • (bearbeitet)

      Теоретически, можно просто через nginx слать все запросы, касающиеся загрузки, конвертации и работы с celery в сторону storage сервера.

      Это должно работать, если не смешивать одно с другим на одном сервере. Фактически одно приложение и будет получаться.

      В противном случае не работал бы вариант с большим количеством серверов и большим количеством инстансов приложения для балансировки нагрузки. А я уверен, что у того же самого инстаграмма, который также базируется на Django имеются подобные варианты.

        Илья Чичак
        • 11. Dezember 2018 08:56
        • (bearbeitet)
        • Die Antwort wurde als Lösung markiert.

        Я тут подумал:

        Допустим, мы разворачиваем один и тот же проект на двух тачках. На одной из них запускаем redis, rabbitmq. при этом рэбита мы запускаем в сетевом режиме: https://www.rabbitmq.com/networking.html (только при условии, что тачка с рэбитом не светит наружу, иначе дыра в безопасности). оба проекта смотрят на рэббита на второй машине. celery workers запускаются на второй машине.

        впринципе должно работать=)

        Главное, чтобы машина с рэббитом была недоступна извне, только с первой.

          Evgenii Legotckoi
          • 11. Dezember 2018 09:26

          Главное, чтобы машина с рэббитом была недоступна извне, только с первой.

          Пожалуй либо так, не пробовал, но примерно о таком и думал. Просто в тачку с рэббитом можно пускать через шлюзовой nginx на первой машине только по определённым запросам например.

            Да, так все работает. Спасибо вам.
            Еще маленький вопросик по проекту на 2 серверах: Если мысль их синхронизировать средствами rsync или же монтировать средствами nfs с первого сервера на второй?

              Илья Чичак
              • 11. Dezember 2018 11:01
              • (bearbeitet)

              Имеете в виду, чтобы код проекта размазывался по обоим серверам?

              Если да, то категорически не советую.

              Запуская сервер джанго через гуникорн, он полностью инициализирует проект. Если в этот момент синхронизация не закончилась - все, приехали.

              Вариант с NFS - дополнительная нагрузка на сеть. (Правда это всего лишь попытка отговорить=))

              В целом, есть ряд проблем и возможных проблем :

              1. В будущем возможно возникновение дополнительных настроек специфичных для конкретного сервера
              2. В настоящем - все равно требуется перезапуск сервиса или какой там у вас способ запуска проекта используется=)

              Варианты решения проблемы:

              1. Написать на основном сервере bash скрипт, который будет разворачивать проект, а потом ходить по ssh на второй и делать то же самое=)
              2. Почитать про различные системы деплоя, типа ansible (правда там есть свои ограничения, тонкости и нюансы)

              для баш скрипта - все крайне просто:

              1. git pull
              2. pip install -r requirements.txt
              3. sudo service nginx restart
              4. sudo service gunicorn restart
              5. sudo service celery_worker_restart
              6. ssh server2
              7. повторить

              =)

              НАПИСАНИЕ СКРИПТОВ НА BASH

              ФУНКЦИИ BASH В СКРИПТАХ

              кстати, опять же, этот скрипт будет очень удобно хранить в репозитории. так будет возможность из любого места запустить процесс (в отличии от ансибла, где он должен быть установлен и сконфигурирован на машине, с которой запускается процесс)

                Илья Чичак
                • 11. Dezember 2018 11:02
                • (bearbeitet)

                кстати, списки странно рендерятся из маркдауна=) там с красивым супом случайно перебор не случился?=)

                а, не, сам дурак=) меня почему-то переклинило, что список делается через

                1)
                , а не
                1.

                  Нет. тут все проще, и никаких скриптов думаю не нужно. Там где у меня запускается redis+celery+ffmpeg нужно всего лишь одно приложение для конвертации которое статическое. Весь проект туда не обязательно шмалять.

                    Kommentare

                    Nur autorisierte Benutzer können Kommentare posten.
                    Bitte Anmelden oder Registrieren
                    Letzte Kommentare
                    A
                    ALO1ZE19. Oktober 2024 08:19
                    Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                    ИМ
                    Игорь Максимов5. Oktober 2024 07:51
                    Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                    d
                    dblas55. Juli 2024 11:02
                    QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                    k
                    kmssr8. Februar 2024 18:43
                    Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                    Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                    Jetzt im Forum diskutieren
                    J
                    JacobFib17. Oktober 2024 03:27
                    добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
                    JW
                    Jhon Wick1. Oktober 2024 15:52
                    Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
                    КГ
                    Кирилл Гусарев27. September 2024 09:09
                    Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
                    F
                    Fynjy22. Juli 2024 04:15
                    при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

                    Folgen Sie uns in sozialen Netzwerken