何时及如何使用Tornado?何时无效?
好的,Tornado 是一种非阻塞的网络框架,速度很快,可以轻松处理很多同时的请求。
不过,我觉得它并不是万能的,如果我们只是盲目地把基于 Django 或其他网站的代码放到 Tornado 上运行,可能并不会提高性能。
我找不到详细的解释,所以我在这里问:
- 什么时候应该使用 Tornado?
- 什么时候使用它就没什么用?
- 使用 Tornado 时,有哪些需要注意的地方?
- 我们怎么能用 Tornado 搞出一个效率低下的网站?
- 有一个服务器和一个网络框架。我们什么时候应该使用框架,什么时候可以用其他框架替代?
2 个回答
抱歉我来回答一个旧问题,但我看到这个问题后,想知道为什么没有更多的回答。来回答Bart J的问题:
我想在Tornado应用中解析RSS源。你觉得这算是比较耗计算资源吗?
这要看你具体在做什么样的解析,以及你用的硬件 :) 时间长就是时间长,所以如果你的应用响应时间超过半秒,那就会显得很慢——你需要分析一下你的应用。
快速系统的关键在于良好的架构,具体使用哪个框架(比如Twisted、Tornado、Apache+PHP)并不是最重要的。Tornado采用异步处理方式,我认为这就是它的核心所在。Node.js、Twisted和Yaws都是其他异步网络服务器的例子,它们因为轻量级和异步处理的方式而能很好地扩展。
那么:
什么时候应该使用Tornado?
什么时候它就没用了?
Tornado适合处理大量连接,因为它可以在接收到客户端请求后,分派请求处理程序,然后不再关注这个客户端,直到结果回调被推入事件队列。因此,当你需要处理很多请求并且希望系统能够良好扩展时,Tornado是个不错的选择。异步处理有助于功能解耦和无共享数据访问。这与无状态设计(比如REST)或其他面向服务架构非常契合。你也不需要太多处理线程或进程带来的开销,这样可以减少一些锁和进程间通信的问题。
另一方面,如果你的后端和/或数据存储处理请求的时间很长,Tornado就不会有太大帮助。它确实有助于并发设计,特别是Web服务。并发架构使得扩展设计变得更容易,同时保持低耦合。这是我使用Tornado的经验。
有一个服务器和一个网络框架。我们什么时候应该使用框架,什么时候可以用其他的替代它呢?
这个区分有点模糊。如果你只是提供静态页面,可以使用一些快速的服务器,比如lighthttpd。否则,大多数服务器都提供不同复杂程度的框架来开发网络应用。Tornado是一个不错的网络框架,而Twisted更强大,被认为是一个很好的网络框架,它支持很多协议。
Tornado和Twisted是支持非阻塞、异步网络/网络应用开发的框架。
什么时候应该使用Tornado?它什么时候没用?使用它时需要考虑什么?
从本质上讲,异步/非阻塞输入输出在输入输出密集型的情况下表现很好,而在计算密集型的情况下就不太适合了。大多数网络应用都很适合这种模型。如果你的应用需要进行某些计算密集型的任务,那就得把这些任务交给其他更能处理的服务。虽然Tornado和Twisted可以作为网络服务器,响应网络请求。
我们怎么能用Tornado做一个效率低下的网站呢?
- 做任何计算密集型的任务
- 引入阻塞操作
但我想这不是万能的,如果我们只是盲目地用Tornado运行基于Django或其他任何网站,可能不会有性能提升。
性能通常是整个网络应用架构的特征。如果应用设计不当,使用大多数网络框架都会降低性能。要考虑缓存、负载均衡等因素。
Tornado和Twisted提供了合理的性能,适合构建高效的网络应用。你可以查看Tornado和Twisted的用户反馈,了解它们的能力。