Когда и как использовать Торнадо? Когда это бесполезно?

84

Хорошо, Tornado неблокирующий, довольно быстрый и легко справляется с множеством постоянных запросов.

Но я думаю, это не серебряная пуля, и если мы просто вслепую запустим Django или любой другой сайт с Tornado, это не даст никакого прироста производительности.

Я не смог найти исчерпывающего объяснения этому, поэтому спрашиваю здесь:

  • Когда следует использовать Торнадо?
  • Когда это бесполезно?
  • Что следует учитывать при его использовании?
  • Как сделать сайт неэффективным с помощью Торнадо?
  • Есть сервер и веб-фреймворк. Когда использовать фреймворк, а когда заменить его другим?
Владимир Сидоренко
источник

Ответы:

45

Есть сервер и веб-фреймворк. Когда использовать фреймворк, а когда заменить его другим?

Это различие немного размыто. Если вы обслуживаете только статические страницы, вы должны использовать один из быстрых серверов, например lighthttpd. В остальном большинство серверов предоставляют платформу разной сложности для разработки веб-приложений. Tornado - хороший веб-фреймворк. Twisted еще более эффективен и считается хорошей сетевой структурой. Он поддерживает множество протоколов.

Tornado и Twisted - это фреймворки, которые обеспечивают поддержку неблокирующей асинхронной разработки веб-приложений и сетевых приложений.

Когда следует использовать Торнадо? Когда это бесполезно? Что следует учитывать при его использовании?

По самой своей природе асинхронный / неблокирующий ввод-вывод отлично работает, когда он требует большого количества операций ввода-вывода и не требует интенсивных вычислений. Для этой модели хорошо подходит большинство веб-приложений и сетевых приложений. Если ваше приложение требует выполнения определенной вычислительно-ресурсоемкой задачи, ее необходимо делегировать какой-либо другой службе, которая может лучше справиться с ней. В то время как Tornado / Twisted может выполнять работу веб-сервера, отвечая на веб-запросы.

Как сделать сайт неэффективным с помощью Торнадо?

  1. Выполняйте любую задачу с интенсивными вычислениями
  2. Ввести блокирующие операции

Но я думаю, это не серебряная пуля, и если мы просто вслепую запустим Django или любой другой сайт с Tornado, это не даст никакого прироста производительности.

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

Tornado и Twisted обеспечивают разумную производительность и подходят для создания высокопроизводительных веб-приложений. Вы можете проверить отзывы как для Twisted, так и для торнадо, чтобы увидеть, на что они способны.

pyfunc
источник
1
Спасибо за ответ. Просто хочу прояснить некоторые моменты: могу ли я использовать Flask или Django bihind Tornado и получить все его преимущества (если я не выполняю каких-либо командных задач) без изменения кода приложения?
Владимир Сидоренко
Если да - в чем будет разница по сравнению с бегом, скажем, с провалом? Спасибо.
Владимир Сидоренко
Я хотел бы разобрать RSS-каналы в приложении Tornado. Считаете ли вы, что это довольно ресурсоемко?
Susheel Javadi
6

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

Я хотел бы разобрать RSS-каналы в приложении Tornado. Считаете ли вы, что это довольно ресурсоемко?

Ну, это зависит от того, какой синтаксический анализ вы выполняете и на каком оборудовании :) Долгое время - это долгое время, поэтому, если вашему приложению требуется больше, скажем, полсекунды для ответа, оно будет казаться вялым - профилируйте свое приложение.

Ключ к быстродействию систем - это отличная архитектура, не столько особенности, сколько, например, какой фреймворк вы используете (Twisted, Tornado, Apache + PHP). У Tornado есть асинхронный стиль обработки, и, на мой взгляд, многое из этого сводится к этому. Node.js, Twisted и Yaws - это примеры других асинхронных веб-серверов, которые очень хорошо масштабируются благодаря легковесному подходу и асинхронному стилю обработки.

Так:

Когда следует использовать Торнадо?

Когда это бесполезно?

Tornado хорош для обработки большого количества подключений, поскольку он может отвечать входящему клиенту, отправлять обработчик запросов и не думать об этом клиенте, пока обратный вызов результата не будет помещен в очередь событий. Поэтому для этого конкретного качества следует использовать Tornado, если вы хотите хорошо масштабироваться при обработке большого количества запросов. Асинхронная обработка облегчает функциональную развязку и доступ к данным без совместного использования. Это действительно хорошо сочетается с дизайном без сохранения состояния, таким как REST или другой сервис-ориентированной архитектурой . Вам также не нужно иметь дело с порождением потоков или процессов с присущими им накладными расходами, и вы можете избавиться от некоторых проблем с блокировкой / IPC.

С другой стороны, Tornado не будет иметь большого значения, если вашему бэкэнду и / или хранилищу данных требуется много времени для обработки запросов. Это помогает создавать параллельные проекты и, в частности, веб-сервисы. Параллельная архитектура упрощает масштабирование вашего проекта и сохраняет низкую взаимосвязь. По крайней мере, это мой опыт работы с Торнадо.

Мортен Йенсен
источник
Что делать, если в вашем сервисе есть несколько операций, требующих больших вычислительных ресурсов (скажем,> 1 секунды)? Можно ли по-прежнему выполнять такую ​​обработку без блокировки?
tigeronk2
@ tigeronk2 Да, но вам придется выполнить вычисление в другом потоке / процессе.
Мортен Йенсен
Или можно запустить интенсивный процесс как другую службу, чтобы добиться масштабируемости и разделения с небольшими накладными расходами по сравнению с управлением другим процессом. Посмотрите ссылку на сервис-ориентированные архитектуры.
Tyeth
Синтаксический анализ RSS почти по определению не является тяжелой обработкой, если только вы не делаете это очень-очень неправильно.
tripleee