我对Tornado只有很少的了解,当涉及到部署时,最好使用Nginx作为负载平衡器和Tornado进程的数量。
扭曲怎么样?是这样的吗?
答案 0 :(得分:7)
如果我正确地追踪你的问题,你似乎在问:" Tornado应该是Nginx的前端,Twisted怎么样?"
如果确实存在这个问题,那么它就会得到一个"它取决于"回答但也许是你可能没想到的。 在运行时意义上,扭曲,龙卷风和Nginx 在很多方面相同 。
这三个系统在其核心中使用相同的编程模式。 OO人称之为Reactor模式的东西,通常也称为异步I / O事件编程,以及老派unix人称之为select
样式事件循环的东西。 (通过select
/ epoll
/ kqueue
/ WaitForMultipleObjects
/等完成)
Twisted在灵活性方面表现出色。如果您需要将许多IO类型粘合在一起,特别是如果您想将IO连接到Web,那就太棒了。正如remudada回答中所述,它还内置了应用工具(ssh)。
作为异步I / O框架,Twisted的周数非常少。作为一个 Web框架虽然(虽然它正在积极地继续发展),但与twistd
这样的插件丰富的框架相比,它确实落后于曲线,而Tornado肯定在Twisted上有很多Web便利网页。
Tornado核心几乎与Twisted的核心在逻辑上相匹配。这些项目的核心非常相似,在现代版本中,您可以运行Flask或运行Twisted inside of Tornado。
Tornado专注于快速提供网页/网络应用程序。在大多数应用程序中,它比Twisted Web快20%,但远不如支持其他异步I / O使用那样灵活。它(像twisted)仍然是基于python的,所以如果给定的webapp做了太多基于CPU的工作,它的性能会很快下降。
当人们比较Python和C时,他们经常谈论Python的速度要慢1.2到100倍。然而,在Reactor模式中(当它正确地花费大部分时间在操作系统中时)语言效率最低化 - 只要在反应堆外没有太多逻辑发生。
我没有硬数据来支持这一点,但我的期望是你会找到最简单的“你好世界”#34; (I.E.服务静态测试)在Tornado上运行速度不超过50%然后在Nginx上运行(Twisted Web平均比Tornado慢20%)。
你问过"最好使用Nginx作为负载均衡器和Tornado进程的数量#34;所以要回答我需要回答问题。
您的部署方式是否具有先进多核的关键性?
为了换取异常的IO速度,Reactor模式有一个缺点:
正如您可能猜到的那样,这个弱点的另一面是Reactor模式非常有效地使用该核心,如果您有负载,应该能够使该核心接近100%使用。
这可以追溯到你所询问的设计类型,但是这个答案中所有背景的原因是因为这些服务的分层(在Tornado或Twisted之前的Nginx)只应该才能完成多核机器的优势。
如果您在单核系统(最低级别的云服务器或像Raspberry Pi这样的嵌入式平台)上运行,您不应该在反应堆前端运行。这样做会简化整个系统的速度。
如果运行更多(负载很重)的反应堆服务,那么CPU核心,你也将会对自己起作用。
所以:
答案 1 :(得分:1)
Twisted是一个足够好的应用程序服务器,我宁愿按原样使用它(不像Tornado)
如果你看一下官方指南http://twistedmatrix.com/documents/11.1.0/core/howto/application.html
你可以看到它是如何设置的。当然你可以使用uwsgi / nginx / emperor,因为它可以作为标准应用程序运行,但我建议你在真正需要扩展和负载平衡时这样做。