Dotcloud разделяет первичные и вторичные веб-запросы

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

Я думаю, что одно и то же приложение Django следует использовать для обоих серверов, особенно потому, что модель данных является общей. Таким образом, файл dotcloud.yml будет выглядеть примерно так:

www:
  type: python
www-ajax:
  type: python
(...)

Но как я могу направить разные URL-адреса для каждого класса экземпляров? Кроме того, я читал о Gunicorn для длинных запросов. Эти AJAX-запросы длинные, но они не зависят от внешних ресурсов, кроме БД. Это ситуация для Gunicorn, и если да, то есть ли простой способ интегрировать его в конфиг?


person acjay    schedule 04.04.2013    source источник


Ответы (1)


Если вы настроите его так, как вы описываете в своем примере файла dotcloud.yml, у вас будет две разные службы с двумя разными URL-адресами. Поэтому, если вы хотите отправить материал в службу ajax, вы используете URL-адрес ajax, если вам нужен обычный, вы можете использовать URL-адрес www.

Чтобы запустить gunicorn, вы можете использовать пользователя python-worker и выделить http-порт для работника python, а затем указать gunicorn на порту http. Важно отметить, что у python-worker нет nginx перед ним, как у службы python, поэтому gunicorn должен будет напрямую прослушивать трафик.

Таким образом, чтобы собрать это вместе, это будет выглядеть примерно так.

www:
  type: python
  approot: myapp
www-ajax:
  type: python-worker
  approot: myapp
  ports:
    www: tcp
  process: gunicorn -b 0.0.0.0:$PORT_WWW yourapp:app

Ваша строка процесса, скорее всего, будет выглядеть иначе, но вы получите представление.

Вам также не нужен approot, просто поместите его для примера.

person Ken Cochrane    schedule 04.04.2013
comment
Круто, выглядит очень полезно. Как узнать, какой URL использовать для www-ajax? - person acjay; 04.04.2013
comment
Похоже на это (docs.dotcloud.com/0.9/services/ custom/#expose-additional-ports) немного объясняет. Итак, что мне нужно сделать, это создать параметр в моем приложении Django, чтобы в моем развертывании Dotcloud читалась переменная среды DOTCLOUD_SERVICE_HTTP_URL. Собираюсь попробовать это... - person acjay; 04.04.2013
comment
@acjohnson55, вы можете назначить личный домен как для .. www.myapp.com, так и для ajax.myapp.com, и тогда вы всегда будете знать, что они из себя представляют. - person Ken Cochrane; 04.04.2013