ИМ
Dec. 11, 2018, 5:56 p.m.
django и celery на разных серверах
Доброго времени суток. Интересует такой вопрос как разнести приложение django и приложение celery на разные сервера.
Тоесть имею:
2 сервера в одной локальной сети web-server и storage. web-server у меня выполняет роль собственно веб-сервера с приложением, а storage выполняет роль хранилища для видео-контента. Сейчас у меня на web-server крутится приложение, celery+redis+ffmpeg(связка для конвертирования видео-контента). storage же сейчас выполнят только роль хранилища.
Хочу распределить нагрузку на 2 сервера чтобы операция конвертирования велась не на web-server а на storage.
Каким образом это все можно организовать?
3
100
Do you like it? Share on social networks!
- Last comments
- AKApril 1, 2025, 11:41 a.m.Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
- VPMarch 9, 2025, 4:14 p.m.Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
- ИМNov. 22, 2024, 9:51 p.m.Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
- Now discuss on the forum
- МАApril 1, 2025, 4:21 p.m.0ff763fe-4e50-455d-a3a6-5699c243b1a5_17_44_22_1.xml
- fFeb. 15, 2025, 1:46 p.m.Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
Добрый день.
Я пока с такой задачей не сталкивался, но когда столкнусь, то первое, что сделаю, то просто подниму оба инстанса приложения на обоих серверах. Если весь бэкенд написан в одном приложении web+celery.
И просто разнесу нагрузку с помощью nginx. Для команд конвертирования должны быть в данном случае отдельные вьюшки сделаны, а nginx будет отправлять запросы конвертирования в сторону сервера storage. Но это если у вас бэкенд web приложения отвечает за старт конвертирования и т.д.
Запросы в данном случае правильно будет через nginx маршрутизировать.
А потом уже спокойно написал бы полностью отдельное приложение, которое будет отвечать за всю эту кухню по конвертации.
У вас не получится передать нормально сообщение в целери на другом сервере. Даже если будет один и тот же проект на разных хостах. Как вариант - вынести логику обработки в отдельное приложение, его разместить на втором сервере и снабдить каким-нибудь API. И заставить первое приложение отсылать запрос на второй сервер для запуска какой-либо обработки.
Теоретически, можно просто через nginx слать все запросы, касающиеся загрузки, конвертации и работы с celery в сторону storage сервера.
Это должно работать, если не смешивать одно с другим на одном сервере. Фактически одно приложение и будет получаться.
В противном случае не работал бы вариант с большим количеством серверов и большим количеством инстансов приложения для балансировки нагрузки. А я уверен, что у того же самого инстаграмма, который также базируется на Django имеются подобные варианты.
Я тут подумал:
Допустим, мы разворачиваем один и тот же проект на двух тачках. На одной из них запускаем redis, rabbitmq. при этом рэбита мы запускаем в сетевом режиме: https://www.rabbitmq.com/networking.html (только при условии, что тачка с рэбитом не светит наружу, иначе дыра в безопасности). оба проекта смотрят на рэббита на второй машине. celery workers запускаются на второй машине.
впринципе должно работать=)
Главное, чтобы машина с рэббитом была недоступна извне, только с первой.
Пожалуй либо так, не пробовал, но примерно о таком и думал. Просто в тачку с рэббитом можно пускать через шлюзовой nginx на первой машине только по определённым запросам например.
Да, так все работает. Спасибо вам.
Еще маленький вопросик по проекту на 2 серверах: Если мысль их синхронизировать средствами rsync или же монтировать средствами nfs с первого сервера на второй?
Имеете в виду, чтобы код проекта размазывался по обоим серверам?
Если да, то категорически не советую.
Запуская сервер джанго через гуникорн, он полностью инициализирует проект. Если в этот момент синхронизация не закончилась - все, приехали.
Вариант с NFS - дополнительная нагрузка на сеть. (Правда это всего лишь попытка отговорить=))
В целом, есть ряд проблем и возможных проблем :
Варианты решения проблемы:
для баш скрипта - все крайне просто:
=)
НАПИСАНИЕ СКРИПТОВ НА BASH
ФУНКЦИИ BASH В СКРИПТАХ
кстати, опять же, этот скрипт будет очень удобно хранить в репозитории. так будет возможность из любого места запустить процесс (в отличии от ансибла, где он должен быть установлен и сконфигурирован на машине, с которой запускается процесс)
кстати, списки странно рендерятся из маркдауна=) там с красивым супом случайно перебор не случился?=)
а, не, сам дурак=) меня почему-то переклинило, что список делается через
, а неНет. тут все проще, и никаких скриптов думаю не нужно. Там где у меня запускается redis+celery+ffmpeg нужно всего лишь одно приложение для конвертации которое статическое. Весь проект туда не обязательно шмалять.