Я опытный разработчик Python, начинающий работать над серверной системой веб-сервиса. Система передает данные (постоянно) из Интернета в базу данных MySQL. Эти данные позже отображаются на стороне фронтенда (между фронтендом и бэкендом связи нет). Бэкенд-система постоянно загружает информацию о рейсах из Интернета (некоторые данные извлекаются через API, а некоторые — путем загрузки и анализа текстовых/xls-файлов). У меня уже есть скрипт, который загружает данные, анализирует их и вставляет в базу данных MySQL — все в большом цикле. Внешний интерфейс — это просто набор php-страниц, которые правильно отображают данные, запрашивая сервер MySQL.

Крайне важно, чтобы этот веб-сервис был надежным, сильным и надежным. Поэтому я искал правильные способы ее разработки и нашел следующие части, из которых состоит моя система:
1) django как фреймворк (для HTTP-соединений и для использования Piston)
2) Piston в качестве поставщика API (это здорово, потому что тогда мой внешний интерфейс может использовать API вместо фактического выполнения запросов)
3) SQLAlchemy в качестве уровня БД (мне не нравится небольшой контроль, который вы получаете при использовании django ORM, я хочу иметь возможность запускать более сложную структуру БД)
4) Apache с mod_wsgi для запуска всего
5) И, наконец, Celery (или django-cron) для фактического запуска моего бесконечного цикла, который извлекает данные из Интернета - надеюсь, в каком-то формате организованных задач). Это та часть, в которой я меньше всего уверен, и любые указатели приветствуются.

Все это звучит великолепно. Раньше я использовал django для написания веб-сайтов (также известных как обработчики запросов, которые возвращают данные). Однако, кроме использования Celery или django-cron, я действительно не понимаю, как он подходит для роли постоянного сервера подачи данных.

Я просто хотел, чтобы вы, ребята, услышали ваши идеи/комментарии. Будем очень признательны за любой ваш вклад / указатели на документацию и / или другие библиотеки!

1
Aviv 16 Апр 2011 в 03:53

1 ответ

Если вы собираетесь использовать SQLAlchemy, я бы воздержался от использования Django: с Django все в порядке, если вы используете весь стек, но поскольку вы собираетесь содрать модели, я не вижу особой ценности в его использовании, и я бы взял посмотрите на другой вариант (возможно, подойдут Pylons или чистый старый CherryPy).

Тем более, если FE не будут выполнять запросы, а будут обращаться только к поставщикам API.

Что касается надежности, то меня больше устраивает запуск отдельных процессов fcgi с супервизором и использование более легковесного веб-сервера (ligty/nginx), но это дело вкуса.

Для части «бесконечный цикл» это зависит от того, какое поведение вы хотите: если есть проблема с источником, вы просто хотите пропустить шаг или повторить его несколько раз, когда источник резервируется?

Периодические задачи могут подойти бывшим , в то время как cron, который просто порождает задачи очистки, лучше подходит для последнего.

0
Almad 17 Апр 2011 в 01:08