何时以及如何使用Tornado?它什么时候是无用的?

88

好的,Tornado是非阻塞且相当快速的,可以轻松处理大量的常规请求。

但我猜它并不是一种万能解决方案,如果我们只是盲目地使用基于Django或其他网站的Tornado,那么它不会带来任何性能提升。

我找不到综合的解释,所以在这里问一下:

  • 应该在什么情况下使用Tornado?
  • 它无用的情况是什么?
  • 在使用它时需要考虑什么?
  • 如何使用Tornado构建效率低下的网站?
  • 有一个服务器和一个Web框架。什么时候应该使用框架,什么时候可以替换为其他框架?
2个回答

51
有一个服务器和 web 框架。什么时候应该使用框架,什么时候可以用其他替代品代替?
这种区分有点模糊。如果您只提供静态页面,则可以使用像 lighthttpd 之类的快速服务器。否则,大多数服务器都提供各种复杂度的框架来开发 Web 应用程序。Tornado 是一个很好的 Web 框架。Twisted 更具有实用性,是一种良好的网络框架。它支持许多协议。
Tornado 和 Twisted 是提供非阻塞异步 Web / 网络应用程序开发支持的框架。
在什么情况下应该使用 Tornado?它无用的情况是什么?使用它时需要考虑什么?
通过其本质,异步/非阻塞 I/O 在 I/O 密集型而不是计算密集型时运行良好。大多数 Web / 网络应用程序适合这种模型。如果您的应用程序要求完成某些计算密集型任务,则必须将其委托给可以更好地处理它的某些其他服务。而 Tornado / Twisted 可以完成 Web 服务器的工作,响应 Web 请求。
如何使用 Tornado 制作效率低下的网站?
1. 进行任何计算密集型任务 2. 引入阻塞操作
但我想这不是万能的,如果我们只是盲目地运行基于 Django 或任何其他网站的 Tornado,则不会提高性能。
性能通常是完整 Web 应用程序架构的特征。如果应用程序设计不当,则可以通过大多数 Web 框架降低性能。考虑缓存、负载平衡等等。
Tornado 和 Twisted 提供了合理的性能,它们适合构建高性能 Web 应用程序。您可以查看 Twisted 和 Tornado 的推荐信息,以了解它们的能力。

1
感谢您的回答。只想澄清一些问题:如果我不进行任何计算任务,我是否可以在Tornado后面使用Flask或Django,并获得所有的好处,而无需更改应用程序的代码? - Vladimir Sidorenko
如果是的话,与使用flup运行相比会有什么区别?谢谢。 - Vladimir Sidorenko
我想在Tornado应用程序中解析RSS订阅源。你认为这个过程会相当消耗计算资源吗? - Susheel Javadi

7

很抱歉回答一个老问题,但我看到这个问题并想知道为什么它没有更多的答案。回答Bart J的问题:

我想在Tornado应用程序中解析RSS源。您认为这相当计算密集吗?

好吧,这取决于您正在做什么样的解析以及使用什么硬件 :) 长时间是很长的时间,因此,如果您的应用程序需要超过半秒钟来响应,则会显得迟缓 - 对您的应用程序进行分析。

快速系统的关键在于出色的架构,而不是具体细节,例如您使用的框架(Twisted,Tornado,Apache+PHP)等。 Tornado具有异步处理风格,这实际上是我认为很多事情的核心。 Node.js,Twisted和Yaws是其他异步Web服务器的例子,由于采用轻量级方法和异步处理风格而具有很好的可扩展性。

所以:

应该在什么时候使用Tornado?

什么时候无用?

Tornado非常适合处理大量连接,因为它可以响应传入的客户端请求,分发请求处理程序,并在结果回调被推送到事件队列之前不再考虑该客户端。因此,当您想要处理大量请求时,应使用Tornado以实现良好的扩展性。
异步处理有助于实现功能解耦和共享无状态数据访问。这非常适合像REST或其他面向服务的架构这样的无状态设计。您也不必过多地处理线程或进程的生成和固有开销,可以避免一些锁定/IPC问题。
另一方面,如果您的后端和/或数据存储需要很长时间来处理请求,则Tornado不会产生太大的差异。它有助于并发设计,特别是Web服务。并发架构使得更容易扩展设计并保持耦合度低。这至少是我使用Tornado的经验。

如果你的服务中有一些计算密集型操作(比如>1秒),那该怎么办呢?是否仍然可能以非阻塞的方式进行处理? - tigeronk2
@tigeronk2 是的,但你需要在另一个线程/进程中运行计算。 - Morten Jensen
或者将高强度的进程作为另一个服务运行,以实现可扩展性和分离,与管理另一个进程相比,开销较小。请查看面向服务的架构链接。 - Tyeth
解析 RSS 通常本质上不是重度处理,除非你做得非常非常错误。 - tripleee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接