我在Dotcloud上部署了一个Web应用程序,每个页面上的数据计算成本非常高(很多秒)。我想通过返回缓存的信息然后用一堆导致完整计算的AJAX请求命中服务器来尽可能快地进行初始页面加载。但我不希望这些AJAX请求为其他用户堵塞初始页面加载,所以我希望它们单独排队。
我认为应该为两台服务器使用相同的Django应用程序,尤其是因为数据模型是共享的。所以dotcloud.yml
文件有点像:
www:
type: python
www-ajax:
type: python
(...)
但是如何将不同的URL路由到每个实例类?另外,我已经阅读了关于Gunicorn的长期请求。这些AJAX请求很长,但除了DB之外,它们不依赖于外部资源。这是Gunicorn的情况,如果是这样,有没有一种简单的方法将它集成到配置中?
答案 0 :(得分:1)
如果按照您在示例dotcloud.yml
文件中描述的方式进行设置,您将拥有两种不同的服务,其中包含两个不同的网址。因此,如果您想将内容发送到ajax服务,则使用ajax网址,如果您想要常规网址,则可以使用www网址。
要运行gunicorn,您可以使用python-worker用户并为python worker分配一个http端口,然后在http端口上列出gunicorn。值得注意的是,python-worker并不像python服务那样拥有nginx,所以gunicorn需要直接监听流量。
所以把它放在一起就会看起来像这样。
www:
type: python
approot: myapp
www-ajax:
type: python-worker
approot: myapp
ports:
www: tcp
process: gunicorn -b 0.0.0.0:$PORT_WWW yourapp:app
您的过程字符串很可能看起来不同,但您可以了解情况。
你也不需要这个例子,只是把它作为一个例子。