#python #django #backend
#python #django #серверная часть
Вопрос:
Я опытный разработчик Python, начинающий работать над серверной системой веб-сервиса. Система передает данные (постоянно) из Интернета в базу данных MySQL. Эти данные позже отображаются на стороне интерфейса (между интерфейсом и серверной частью нет связи). Серверная система постоянно загружает информацию о рейсах из Интернета (часть данных извлекается через API, а часть — путем загрузки и синтаксического анализа текстовых / xls-файлов). У меня уже есть скрипт, который загружает данные, анализирует их и вставляет в базу данных MySQL — и все это в большом цикле. Внешняя часть — это просто набор php-страниц, которые правильно отображают данные, запрашивая сервер MySQL.
Крайне важно, чтобы этот веб-сервис был надежным. Поэтому я искал правильные способы ее разработки и наткнулся на следующие части, составляющие мою систему:
1) django как фреймворк (для HTTP-соединений и для использования Piston)
2) Piston как поставщик API (это здорово, потому что тогда мой интерфейс может использовать API вместо фактического выполнения запросов)
3) SQLAlchemy как уровень DB (мне не нравится тот небольшой контроль, который вы получаете при использовании django ORM, я хочу иметь возможность запускать более сложную структуру DB)
4) Apache с mod_wsgi для запуска всего
5) И, наконец, Celery (или django-cron), чтобы фактически запустить мой бесконечный цикл, который извлекает данные из Интернета — надеюсь, в каком-то организованном формате задач). В этой части я меньше всего уверен, и любые указания приветствуются.
Все это звучит великолепно. Раньше я использовал django для написания веб-сайтов (он же обработчик запросов, который возвращает данные). Однако, кроме использования Celery или django-cron, я действительно не вижу, как это подходит для роли сервера постоянной передачи данных.
Я просто хотел запустить это с вами, ребята, чтобы услышать ваши идеи / комментарии. Мы будем очень признательны за любые имеющиеся у вас данные / указатели на документацию и / или другие библиотеки!
Ответ №1:
Если вы собираетесь использовать SQLAlchemy, я бы воздержался от использования Django: Django подойдет, если вы используете весь стек, но поскольку вы собираетесь копировать модели, я не вижу особой ценности в его использовании, и я бы взглянул на другой вариант (возможно, подойдут Pylons или чистый старый CherryPy).
Тем более, если FEs не будет запускать запросы, а только запрашивать поставщиков API.
Что касается надежности, я больше доволен запуском отдельных процессов fcgi с помощью supervise и использованием более легкого веб-сервера (ligty / nginx), но это дело вкуса.
Что касается части «бесконечного цикла», это зависит от того, какое поведение вы хотите: если есть проблема с исходным кодом, вы просто хотели бы пропустить шаг или повторить его несколько раз при резервном копировании исходного кода?
Периодические задачи могут быть хороши для первых, в то время как cron, который просто порождает задачи очистки, лучше для последних.