我有一个简单的网络服务,我需要大幅度扩展。
我正在尝试决定在各种Web框架,负载均衡器,应用服务器(例如Mongrel2,Tornado和nginx,mod_proxy)中的哪个位置。
我有一个现有的Python应用程序(目前通过BaseHTTPServer公开)接受一些JSON数据(每个请求大约900KB),并返回一些JSON数据(大约1k)。处理是算法,并在Python和一些C(通过Cython)的混合中完成。
已经进行了大量优化(从> 1小时开始,每个作业减少到1.1秒)。但我可以不再进一步优化。当我重写一些更友好的线程时,我需要横向扩展(ec2)。
没有会话或状态,但应用程序的启动时间非常慢(即使是腌制和兑现)。加载所有源数据大约需要3秒钟。一旦运行,每个请求大约需要1.1秒。我
也许我可以旋转一些副本然后反向代理它们?也许我可以在其中一个框架中做一些时髦的工作池?但我仍然处于未知的未知状态。
答案 0 :(得分:1)
首先,您应该将Web服务层与数字运算分离。使用外部作业队列(例如http://celeryproject.org/)来卸载Web前端。然后,您可以相互依赖地缩放每个部分。
您应该寻找IaaS类型的云提供商(EC2,Rackspace,Linode,Softlayer等),您应该能够自动添加节点(首选方法是启动一些预先配置的映像以最大限度地缩短节点设置时间)。