2016-11-28 4 views
1

Обычно, когда люди говорят о «асинхронном» или «решениях КОЛБЫ асинхр», они относятся к ситуациям, когда Колба обезьяна исправленная с некоторым асинхронным-инструментом (GEvent, asyncio и т.д.)Создания синхронной Колбы Асинхронной - Колба Инстансы

Учитывая, что колба достаточно мал, чтобы быть «созданы на лету», я думал, что эта модель может работать:

Входящие запросы HTTP -> HTTP сервер (., например, Nginx/апач) -> HTTP- request-queue -> экземпляр фляжки (для обработки каждого запроса)

Без изменения какого-либо кода, выполняющего какие-либо обезьяньи патчи, вы, по сути, получаете свой код блокировки, который будет обрабатываться изолированно. После некоторого копания, я считаю, что это может быть сделано:

http://flask.pocoo.org/docs/0.11/deploying/wsgi-standalone/#twisted-web][1]

Моими вопросы:

  1. использует этот подход менее эффективный, чем писать управляемые события кода? (например, с использованием GEvent или Tornado)

  2. Какова модель того, как [1] ​​обрабатывает запросы? (это то же, что я описал выше)

  3. Может ли состояние гонки существовать? Например.

    Создание 2 звонков в базу данных, где последний запрос HTTP (запрос-2) обрабатывается первой (из-за асинхронной обработки запросов), в результате чего конфликт для первого запроса HTTP (запрос-1)

ответ

1
  1. Предполагая, что «этот подход» означает использование синхронной фляжку и сервер wisgi, эффективность зависит в том, что делает ваше приложение. Если это относительно небольшое приложение и не требует слишком много длительных задач, то что-то вроде Gunicron + Flask - отличное решение. С другой стороны, если ваше приложение имеет длительные задачи, такие как отправка большого количества запросов на внешний сайт или ожидание задач Celery, чтобы вернуть результат, я бы рекомендовал подход, основанный на событиях + балансировщик прокси/нагрузки. Все, что имеет непредсказуемое количество латентности, обычно лучше обрабатывается с помощью async.

  2. Это более или менее то же, что и вы описали.

  3. Конечно, это может случиться :) Это то, что делает веб-разработку настолько интересной. Разработчики должны проектировать очень тщательно, чтобы такие условия были сведены к минимуму.

С учетом сказанного, моим личным предпочтением является Nginx в качестве HTTP-сервера и балансировки нагрузки + комбинация Tornado/Twisted. Эта настройка обеспечивает максимальную гибкость без многих жертв и хороший баланс, если вы хотите использовать синхронные или асинхронные проекты. Если вам нравится синтаксис Flask, есть очень хороший проект под названием klein, который объединяет Twisted и Werkzeug.

 Смежные вопросы

  • Нет связанных вопросов^_^