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是交替出现,说明负载均衡生效了。