搭建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、我們在瀏覽器測試一下

 

 前端是看不到轉發到那個端口

 

 

 

可以看到 這三個端口都是可以用的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章