搭建Tornado Https服务器之Tornado Nginx负载均衡(10)

       本章在上一章nginx反向代理的基础上,实现负载均衡。

       负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。----百度百科

       为什么要实现负载均衡?我们tornado在允行的时候,它是异步的,对于请求是一个一个处理的,一个端口绑定对应一个进程,当很多人同时访问的时候,服务器就会很慢,同样的如果我们服务器是多核的,它可以同时处理多个进程,如果我们不用岂不是浪费资源?并且如果你有钱那么你是不是会部署多个服务器呢,来缓解访问量,那如何进行相同的请求路径映射到不同服务器呢?那就是需要反向代理,负载均衡。

1、https_mian.py 模拟多个进程,开启多个端口

from tornado import httpserver
from tornado import ioloop
from tornado import web
# 开启多进程
from multiprocessing import Pool

class TestHandler(web.RequestHandler):
    # 允许跨域,否则报错
    def set_default_headers(self):
        self.set_header("Access-Control-Allow-Origin", "*")
        self.set_header("Access-Control-Allow-Headers", "Content-Type")
        self.set_header("Access-Control-Allow-Methods", "POST,GET,OPTIONS")

    def get(self):
        self.write("Hello, World!")

def main(port):
    application = web.Application([
        (r"/", TestHandler),
    ])
    server = httpserver.HTTPServer(application, ssl_options={
           "certfile":"server.crt",
           "keyfile": "server.key",
        }
    )
    server.listen(port)# 单进程开启
    # server.bind(port)
    # server.start(3) # 方法指定开启几个进程,默认cpu核数
    ioloop.IOLoop.instance().start()

if __name__ == "__main__":
    p = Pool(3)
    for port in range(8000,8003):
        p.apply_async(main, args=(port,))
    p.close()
    p.join()

2、配置我们的nginx

 

重启nginx 

3、这是我们上一章节的前端代码

<html>

<head>
    <script type="text/javascript">
    function loadXMLDoc() {
        var xmlhttp;
        if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        } else { // code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
            }
        }
        xmlhttp.open("GET", document.getElementById("host").value, true);
        xmlhttp.send();
    }
    </script>
</head>

<body>
    request url: <input type="text" name="lname" id="host"><br>
    <button type="button" onclick="loadXMLDoc()">request</button>
    <div id="myDiv"></div>
</body>

</html>

4、这是我们Cetons上的目录文件

5、执行https_main.py,nohup意思是在后台启动,目的是当前进程死掉也不会影响它,方便我们在控制台继续执行其他命令

 

我们看一下端口开启了没,发现了已经开启了,在访问前别忘记在云服务器控制台开启8000,8001,8002端口

 

6、我们在浏览器测试一下

 

 前端是看不到转发到那个端口

 

 

 

可以看到 这三个端口都是可以用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江湖人称王某人的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值