tornado服務的demo
# coding: utf-8import tornado.ioloopimport tornado.webfrom multiprocessing import Poolimport sysimport osclass MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world! PID: %s" % os.getpid())application = tornado.web.Application([ (r"/", MainHandler),])if __name__ == "__main__": def run(port): PRint 'Start Process on port: %s' % port sys.stdout.flush() application.listen(port) tornado.ioloop.IOLoop.instance().start() pool = Pool(3) pool.map(run, [8001, 8002, 8003])tornado會啟動三個進程,分別偵聽8001, 8002, 8003三個端口。
安裝Nginx
Max上安裝Nginx執行brew install nginx
即可。 Nginx是一個輕量級的、高性能的WebServer,主要可以干下面兩件事:作為http服務器(和apache的效果一樣);作為反向代理服務器實現負載均衡。
調整Nginx配置
負載均衡的目的是為了解決單個節點壓力過大,造成Web服務響應過慢,嚴重的情況下導致服務癱瘓,無法正常提供服務的問題。 Nginx負載均衡是通過upstream模塊來實現的,內置實現了多種負載策略。Mac上Nginx的配置文件位于/usr/local/etc/nginx
,用vim打開進行編輯。
負載均衡配置
upstream tornado.server { server 127.0.0.1:8001; server 127.0.0.1:8002; server 127.0.0.1:8003;}nginx 的 upstream默認是以輪詢的方式實現負載均衡,這種方式中,每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除。此外還有ip_hash、weight、url_hash、fair等負載均衡策略。 upstream命名和服務器地址根據實際情況修改。我這里是本地起的三個tornado服務,所以server IP地址都配的是127.0.0.1,默認輪詢的負載均衡。
反向代理配置
location / { proxy_pass_header Server; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_pass http://tornado.server; }反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個反向代理服務器。
完整配置示例
worker_processes 1;events { worker_connections 1024; use kqueue;}http { include mime.types; default_type application/octet-stream; # 負載均衡配置 upstream tornado.server { server 127.0.0.1:8001; server 127.0.0.1:8002; server 127.0.0.1:8003; } sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # 反向代理配置 location / { proxy_pass_header Server; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_pass http://tornado.server; } }}代理地址根據實際情況修改,其他缺省配置項采用默認值就可以。
重新加載nginx.conf
nginx基本操作
1) 啟動Nginx:start nginx2) 停止Nginx:nginx -s stop3) 修改配置后重啟:nginx -s reload如果已經啟動了Nginx,執行sudo nginx -s reload
重新加載配置。
訪問結果
直接在瀏覽器中訪問http://127.0.0.1/
,就可以訪問demo應用了。每次刷新都返回了Hello, world! PID:18854
,后面跟的pid是交替出現,說明負載均衡生效了。