我有一个简单的网络服务,我需要大幅扩展。
我正在尝试决定在各种网络框架、负载平衡器、应用程序服务器(例如 Mongrel2、Tornado 和 nginx、mod_proxy)中选择哪个位置。
我有一个现有的 Python 应用程序(目前通过 BaseHTTPServer 公开)接受一些 JSON 数据(每个请求大约 900KB),并返回一些 JSON 数据(大约 1k)。处理是通过算法进行的,并混合使用 Python 和一些 C(通过 Cython)完成。
这已经进行了大量优化(从 >1 小时减少到每个作业 1.1 秒)。但我无法进一步优化它。虽然我重写了一些对线程更友好的东西,但我需要水平扩展(可能是 ec2)。
没有 session 或状态,但应用程序的启动时间很慢(即使有 pickling 和 cashing)。加载所有源数据大约需要 3 秒。一旦运行,每个请求大约需要 1.1 秒。我
也许我可以启动多个副本然后反向代理它们?也许我可以在其中一个框架中做一些时髦的工作池?但我仍然处于未知的未知之中。
最佳答案
首先,您应该将网络服务层与数字运算分离。使用外部作业队列(例如 http://celeryproject.org/ )来卸载 Web 前端。然后您可以相互依赖地缩放每个部分。
您应该寻找 IaaS 类型的云提供商(EC2、Rackspace、Linode、Softlayer 等),您应该能够在其中自动添加节点(首选方式是启动一些预配置的镜像以最大限度地减少节点设置时间)。
关于python - 帮我选择一个网络服务平台来扩展现有的 python 网络服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6357606/