部署时扭曲和龙卷风的区别?

时间:2014-06-28 22:33:50

标签: twisted tornado

我对Tornado只有很少的了解,当涉及到部署时,最好使用Nginx作为负载平衡器和Tornado进程的数量。

扭曲怎么样?是这样的吗?

2 个答案:

答案 0 :(得分:7)

如果我正确地追踪你的问题,你似乎在问:" Tornado应该是Nginx的前端,Twisted怎么样?"

如果确实存在这个问题,那么它就会得到一个"它取决于"回答但也许是你可能没想到的。 在运行时意义上,扭曲,龙卷风和Nginx 在很多方面相同

这三个系统在其核心中使用相同的编程模式。 OO人称之为Reactor模式的东西,通常也称为异步I / O事件编程,以及老派unix人称之为select样式事件循环的东西。 (通过select / epoll / kqueue / WaitForMultipleObjects /等完成)

为了建立答案,有一些背景知识:

  • Twisted 是一个基于Reactor的框架,是为了以最通用的形式编写基于python的异步I / O 项目而创建的。因此,虽然它非常适合Web应用程序(通过Twisted Web子模块),但它同样适用于处理串行数据(通过SerialPort子模块)或实现完全不同的网络协议,如{ {3}}。

Twisted在灵活性方面表现出色。如果您需要将许多IO类型粘合在一起,特别是如果您想将IO连接到Web,那就太棒了。正如remudada回答中所述,它还内置了应用工具(ssh)。

作为异步I / O框架,Twisted的周数非常少。作为一个 Web框架虽然(虽然它正在积极地继续发展),但与twistd这样的插件丰富的框架相比,它确实落后于曲线,而Tornado肯定在Twisted上有很多Web便利网页。

  • Torando 是python中基于Reactor的框架,是为非常快地提供 webpages / webapps 而创建的(基本上和python一样快)可以提供网页服务)。编写它的人的目标是编写一个如此之快的系统,以至于生产代码本身可能是python。

Tornado核心几乎与Twisted的核心在逻辑上相匹配。这些项目的核心非常相似,在现代版本中,您可以运行Flask或运行Twisted inside of Tornado

Tornado专注于快速提供网页/网络应用程序。在大多数应用程序中,它比Twisted Web快20%,但远不如支持其他异步I / O使用那样灵活。它(像twisted)仍然是基于python的,所以如果给定的webapp做了太多基于CPU的工作,它的性能会很快下降。

  • Nginx 是基于Reactor的应用是为提供网页和连接重定向而编写的 >在C 。虽然Twisted和Tornado使用Reactor模式使python变得更快,但Nginx将事情转移到下一步并在C中使用该逻辑。

当人们比较Python和C时,他们经常谈论Python的速度要慢1.2到100倍。然而,在Reactor模式中(当它正确地花费大部分时间在操作系统中时)语言效率最低化 - 只要在反应堆外没有太多逻辑发生。

我没有硬数据来支持这一点,但我的期望是你会找到最简单的“你好世界”#34; (I.E.服务静态测试)在Tornado上运行速度不超过50%然后在Nginx上运行(Twisted Web平均比Tornado慢20%)。

同一件事的速度差异,这让我们离开了什么?

你问过"最好使用Nginx作为负载均衡器和Tornado进程的数量#34;所以要回答我需要回答问题。

  

您的部署方式是否具有先进多核的关键性?

为了换取异常的IO速度,Reactor模式有一个缺点:

  • 每个Reactor只能利用一个流程核心。

正如您可能猜到的那样,这个弱点的另一面是Reactor模式非常有效地使用该核心,如果您有负载,应该能够使该核心接近100%使用。

这可以追溯到你所询问的设计类型,但是这个答案中所有背景的原因是因为这些服务的分层(在Tornado或Twisted之前的Nginx)只应该才能完成多核机器的优势

如果您在单核系统(最低级别的云服务器或像Raspberry Pi这样的嵌入式平台)上运行,您不应该在反应堆前端运行。这样做会简化整个系统的速度。

如果运行更多(负载很重)的反应堆服务,那么CPU核心,你也将会对自己起作用。

所以:

  • 如果您要在单核系统上进行部署:
    • 运行Tornado或Twisted的一个实例(如果是静态页面则单独使用Nginx)
  • 如果您尝试充分利用多个核心
    • 在应用程序端口上运行Nginx(或扭曲),为每个剩余的处理器核心运行一个Tornado或Twisted实例。

答案 1 :(得分:1)

Twisted是一个足够好的应用程序服务器,我宁愿按原样使用它(不像Tornado)

如果你看一下官方指南http://twistedmatrix.com/documents/11.1.0/core/howto/application.html

你可以看到它是如何设置的。当然你可以使用uwsgi / nginx / emperor,因为它可以作为标准应用程序运行,但我建议你在真正需要扩展和负载平衡时这样做。