Форум сайта python.su
django + db – srv1
redis – srv2
some app – srv3, srv4, srv5, …
Модель одна – на сайте. Больше ничего нет.
Сайте (srv1) просто интерфейс для пользователя, в базе же общая инфа. На srv3, srv4, srv5, некая софтина (далее soft) без каких либо баз (soft – библиотека, в которой через subprocess/some_libs происходит управление системой, что-то делает). И сам soft ничего в базу не пишет. Если б я мог, я б писал пару строк в базу, чтоб пользователь мог увидеть результат работы задачи – максимум false/true и на каком сервере было выполнение. Но я не очень понимаю как это сделать, ведь мне нужна структура базы (model). А городить костыли для того чтоб из soft используя чистый SQL и писать что-то в базу я не горю желанием. А там еще и отношения между моделями…
Как получать результат. Тут я думал о трех вариантах. 1 – очередь, в которую “воркеры” кидают результаты. 2 – читать результат из Redis (лучше). Для этого нужно хранить UID в базе и по нему запрашивать результат в Redis. 3 – API на сайте (жалкое подобие уже почти готово – todo: изучить django rest framework) Это лучше всего, как мне кажется.
Т.е. у меня нет каких-то огромных данных, которые я кидаю между серверами предварительно потроша базу. Отправляю dictionary, получаю dictionary, пишу в базу. В dictionary обычно от 3 до 10 параметров. И то они почти всегда зависят какую кнопку пользователь нажимает на сайте.
И я вижу что Ваш опыт разработки в этой среде выше моего. И Вы упомянули про Alchemy. Я же ничего кроме django ORM не использую, что видимо меня и ограничивает в некоторых телодвижения.
Фактически из всего что я сделал осталось реализовать только получение данных от ворверов (скорее всего для этого буду использовать 2 вариант, а когда “подрасту” 3).
4kpt_IVЧто из себя представляет очередь? Использовать RabbitMQ?
Для обмена данными между “задающим задачу” и “выполняющим задачу” должна быть очередь.
Офлайн
Можно и кролика. Есть и другие варианты. Мне больше по-душе beanstalkd.
k0st1an
Т.е. у меня нет каких-то огромных данных, которые я кидаю между серверами предварительно потроша базу. Отправляю dictionary, получаю dictionary, пишу в базу. В dictionary обычно от 3 до 10 параметров. И то они почти всегда зависят какую кнопку пользователь нажимает на сайте.
k0st1an
Как получать результат. Тут я думал о трех вариантах. 1 – очередь, в которую “воркеры” кидают результаты. 2 – читать результат из Redis (лучше). Для этого нужно хранить UID в базе и по нему запрашивать результат в Redis. 3 – API на сайте (жалкое подобие уже почти готово – todo: изучить django rest framework) Это лучше всего, как мне кажется.
k0st1an
И Вы упомянули про Alchemy. Я же ничего кроме django ORM не использую, что видимо меня и ограничивает в некоторых телодвижения.
Офлайн
4kpt_IVОк, гляну. Встречал недавно. RabbitMQ – круто, но гораздо больше кода писать, который я пока не готов отлаживать ввиду сроков.
Мне больше по-душе beanstalkd
4kpt_IVИменно по этому этот вариант мне не очень нравится.
Но в этом случае нужно реализовывать “чтеца” со стороны сервера…
4kpt_IVНесколько раз пытался найти инфу как подружить, но всё костыли, причем очень жуткие. А потом еще и поддерживать это…
Аналог Django ORM.
Офлайн
k0st1an
Несколько раз пытался найти инфу как подружить, но всё костыли, причем очень жуткие. А потом еще и поддерживать это…
Офлайн
4kpt_IVДа это давно было…
Так и не надо поддерживать. Эта штука для тех, кто не пользуется django
Отредактировано k0st1an (Фев. 10, 2016 22:15:04)
Офлайн
k0st1an
Опасно тем, что кто-то другой может подобрать задание.
k0st1an
Да это давно было…
Офлайн
4kpt_IVНу, как алхимию прикрутить к django.
Не понял, если честно
4kpt_IV
Кто? Если у Вас один проверяющий? Ставьте его на блок сами. С кроля тоже может привалить несколько заданий, так что не питайте иллюзий.
Офлайн
k0st1an
Ну, как алхимию прикрутить к django.
Офлайн
4kpt_IVЯ как роз про это и понял тогда
Еще раз. Алхимия не для джанги.
Офлайн
k0st1an
Celery/RedisQ и либы дают один функционал, один результат. И разницу уловить не могу . Celery/RedisQ даже своих воркеров дают, только строчи код для своих задач.
Офлайн