事實上,你試圖避免幾乎看起來像一個microservice architecture(馬丁福勒文章)。基本上它提出了最小化的自包含服務,它被多路複用以作爲一個整體,而不是一個單一的應用程序。它有其優點和缺點,但今天它被認爲更好。至少在大規模。
因此,設計應用程序的一種方式是微服務架構,並且運行多個內部服務器不成問題。請注意,這種方法的一些複雜性轉移到基礎設施。也就是說你需要高質量的部署,監控等。
Andew的答案是正確的。但具體來說CherryPy是一個全功能的HTTP服務器。您通常不需要另一箇中間點失敗點,gunicorn左右,您可以完全避免WSGI。只需使用HTTP即nginx作爲CherryPy內部HTTP服務器的反向HTTP代理。
以最簡單的方式,它看起來像以下內容。
蟒2應用
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import cherrypy
config = {
'global' : {
'server.socket_host' : '127.0.0.1',
'server.socket_port' : 8080,
'server.thread_pool' : 8
},
'/' : {
'tools.proxy.on' : True
}
}
class App:
@cherrypy.expose
def index(self):
return type({}.keys()).__name__
if __name__ == '__main__':
cherrypy.quickstart(App(), '/app1', config)
蟒3應用
#!/usr/bin/env python3
import cherrypy
config = {
'global' : {
'server.socket_host' : '127.0.0.1',
'server.socket_port' : 8081,
'server.thread_pool' : 8
},
'/' : {
'tools.proxy.on' : True
}
}
class App:
@cherrypy.expose
def index(self):
return type({}.keys()).__name__
if __name__ == '__main__':
cherrypy.quickstart(App(), '/app2', config)
nginx的配置
server {
listen 80;
server_name ngx-test;
root /var/www/ngx-test/www;
location /app1 {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /app2 {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
對於盛放的CherryP y部署看看this answer。
謝謝!我今天會試一試。最初的閱讀看起來很有希望。 – ashrles 2014-12-04 15:24:38