我需要构建一个计算密集型的Web服务,并且我试图了解如何最好地继续进行.
我希望用户能够连接到我的服务,此时一些计算会在一段时间内完成,通常少于60秒.用户知道他们需要等待,所以这不是一个真正的问题.我的问题是,构建这样的服务的最佳方法是什么,让我头疼最少?我可以使用Node.js,web.py,CherryPy等吗?如果使用,我是否需要坐在这些部件前面的负载平衡器?我不期望大量的用户,可能数百或成千上万.当然,我需要一些机器来托管这么多用户,但这对我来说是一个未知的领域,如果有人可以给我一些指示或要阅读的内容,那就太棒了.
谢谢.
我可以使用Node.js,web.py,CherryPy等吗?
是.选一个.Django也很好.
如果使用,我是否需要坐在这些部件前面的负载平衡器?
几乎从不.
我需要一些机器来托管这么多用户,
疑.
请记住,每个Web事务都有几个不同的(几乎不相关的)部分.
前端(Apache HTTPD或NGINX或类似)接受初始Web请求.它可以处理服务静态文件(.CSS,.JS,图像等),因此您的主Web应用程序可以整理.
像mod_wsgi这样效率相当高的中间件可以管理数十(或数百)个后端进程.
如果您选择聪明的后端处理组件(如芹菜),您应该能够将"实际工作"分配给最少数量的处理器以完成工作.
结果通过mod_wsgi反馈到Apache HTTPD(或NGINX)到用户的浏览器.
现在,后端进程(由celery管理)与基本Web服务器分离.您通过Apache HTTPD和mod_wsgi以及celery实现了大量的并行性,允许您使用每一块处理器资源.
此外,您可以将"计算密集型"流程分解为并行流程 - Unix流水线非常高效并且可以利用所有可用资源.你必须将你的问题分解成step1 | step2 | step3芹菜来管理这些管道.
您可能会发现这种分解导致服务的工作量远远超出您的想象.
许多Python Web框架将用户的会话信息保存在单个公共数据库中.这意味着您的所有后端都可以 - 没有任何实际工作 - 将用户的会话从Web服务器移动到Web服务器,从而无缝且自动地实现"负载平衡".只是有很多HTTPD/NGINX前端产生Django(或web.py或其他)共享一个共同的数据库.它运作得非常好.
| 归档时间: |
|
| 查看次数: |
1046 次 |
| 最近记录: |