如果我正确地追踪你的问题,你似乎在问:"Tornado应该是Nginx的前端,Twisted怎么样?"
如果那确实是问题所在,那么它得到了一个"它取决于"的答案,但也许是你可能没想到的. 在运行时意义上,扭曲,龙卷风和Nginx在很多方面都不是同一件事.
所有这三个系统在其核心中使用相同的编程模式.OO人称之为Reactor模式的东西,通常也称为异步I/O事件编程,以及老派unix人称之为select样式事件循环的东西.(通过select/ epoll/ kqueue/ WaitForMultipleObjects/等完成)
扭曲擅长灵活性.如果您需要将许多IO类型粘合在一起,特别是如果您想将IO连接到Web,那就太棒了.正如remudada回答中所述,它还内置了应用工具(twistd).
作为异步I/O框架,Twisted的周数非常少.作为一个Web框架虽然(虽然它正在积极地继续发展),但与Flask这样的插件丰富的框架相比,它确实在曲线背后明显感觉,而Tornado肯定比Twisted Web有许多Web便利.
Tornado核心几乎与Twisted的核心在逻辑上相匹配.这些项目的核心非常相似,在现代版本中,您可以在Tornado中运行Twisted或在Twisted中运行Tornado端口.
龙卷风一心一意专注于快速提供网页/网络应用程序.在大多数应用程序中,它比Twisted Web快20%,但远不如支持其他异步I/O使用那样灵活.它(像twisted)仍然是基于python的,所以如果给定的webapp做了太多基于CPU的工作,它的性能会很快下降.
当人们比较Python和C时,他们经常谈论Python的速度要慢1.2到100倍.然而,在Reactor模式中(当它在操作系统中大部分时间花费时),语言效率最低化 - 只要在反应堆外没有太多逻辑发生.
我没有硬数据支持这一点,但我的期望是你会发现最简单的"Hello world"(IE服务静态测试)在Tornado上运行速度不会低于50%然后在Nginx上运行(Twisted Web为20%)比平均更慢的龙卷风).
你问"最好使用Nginx作为负载平衡器和Tornado进程的数量",所以要回答我需要回答问题.
您是否采用了一种先进多核的关键部署方式?
为了换取异常的IO速度,Reactor模式有一个缺点:
正如您可能猜到的那样,该弱点的另一面是Reactor模式非常有效地使用该核心,如果您有负载,应该能够使该核心接近100%使用.
这导致了你所要求的设计类型,但是这个答案中所有背景的原因是因为这些服务的分层(在Tornado或Twisted之前的Nginx)应该只是为了利用多核机器.
如果您在单核系统(最低级别的云服务器或像Raspberry Pi这样的嵌入式平台)上运行,您不应该在反应堆前端运行.这样做会简化整个系统的速度.
如果你运行更多(负载很重的)反应堆服务然后CPU核心,你也将会对自己起作用.
所以:
| 归档时间: |
|
| 查看次数: |
1834 次 |
| 最近记录: |