<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何為 Django 服務(wù)配置負(fù)載均衡

          共 2267字,需瀏覽 5分鐘

           ·

          2021-11-20 09:25

          現(xiàn)在的 Web 服務(wù)有一個很重要的性能指標(biāo)叫 QPS,QPS 的全稱是 Queries Per Second 意思是“每秒查詢率”,是一臺服務(wù)器每秒能夠相應(yīng)的查詢次數(shù),是對一個特定的查詢服務(wù)器在規(guī)定時間內(nèi)所處理流量多少的衡量標(biāo)準(zhǔn)。QPS 越高,說明并發(fā)度高,服務(wù)器每秒可以服務(wù)更多的用戶。

          Python 愛好者多數(shù)會選擇 Django 來開發(fā) Web 應(yīng)用。但是 Python 多線程的性能并不是很高,如何提升 Django 服務(wù)的并發(fā)性和可用性呢?一個很簡單的辦法就是負(fù)載均衡,本文分享如何為 Django 服務(wù)配置負(fù)載均衡。

          所謂負(fù)載均衡不難理解,就是我們會有多個后端服務(wù),一般分配在多個服務(wù)器上,前端的請求會被均衡的分配到后端的服務(wù)上,示意圖如下所示:

          負(fù)載均衡器接收來自客戶端的請求,然后將請求轉(zhuǎn)發(fā)到其中一臺服務(wù)器。服務(wù)器然后將所需的 HTML 內(nèi)容或資源返回給負(fù)載均衡器,然后負(fù)載均衡器將其轉(zhuǎn)發(fā)回客戶端。

          有多種負(fù)載均衡器可供選擇,例如 Nginx、Apache、Tomcat 和 HAProxy,你可以選擇其中任何一個,但現(xiàn)在我將只展示如何在 Windows 上使用 Nginx。

          下載 nginx

          首先,到 nginx 的下載地址https://nginx.org/en/download.html,它會顯示如下頁面:

          然后點擊任一版本的 Nginx,我推薦使用穩(wěn)定版,但其實無所謂。下載后,將其解壓縮到任何位置(在您的桌面或文檔上即可)。解壓后,進入剛才安裝的 nginx 目錄,在目錄地址輸入“cmd”,如下圖。并且會出現(xiàn)命令提示符。

          在命令提示符下,輸入“start nginx”。完成后,您可以通過打開瀏覽器并在 url 欄中輸入“l(fā)ocalhost”來檢查 nginx 是否正常工作。如果在輸入“l(fā)ocalhost”后出現(xiàn)下面的屏幕,Nginx 可以正常工作。

          一旦 Nginx 完美運行,我們就可以配置 Nginx 以將負(fù)載分配到我們的服務(wù)器,我這里用 Django 的 runserver 作為服務(wù)進行演示。

          配置 nginx

          進入nginx目錄,打開“conf”文件夾,然后你應(yīng)該看到“nginx.conf”文件。在您熟悉的任何文本編輯器上打開它,我現(xiàn)在將使用 Visual Studio Code,默認(rèn)情況下 nginx.conf 的內(nèi)容如下所示:

          只需要注釋掉 http 部分或者直接刪除它,添加以下內(nèi)容:

          http {
          upstream myproject {
          server localhost:8000;
          server localhost:8001;
          server localhost:8002;
          server localhost:8003;
          }

          server {
          listen 8080;
          server_name localhost;
          location / {
          proxy_pass http://myproject;
          }
          }
          }

          這段配置的意思為 nginx 會監(jiān)聽本機的 8080 端口,一旦有訪問,就會隨機分配到以下四個服務(wù)進行請求:

          ????server?localhost:8000;
          ????server?localhost:8001;
          ????server?localhost:8002;
          ????server?localhost:8003;

          請確保開啟 4 個終端來模擬 4 個服務(wù),每個終端都執(zhí)行這個命令,后面跟上自己的端口號:

          python?manage.py?runserver?{port}

          配置 Django

          不過你可能很想知道我這個請求到底分配給了誰,那就在 views.py 中加入這個方法:

          from?django.http?import?HttpResponse
          def?nginx_view(request):
          ????html?=?"

          Using?port?"?+?request.META["SERVER_PORT"]?+?"

          "
          ????return?HttpResponse(html)

          然后在對應(yīng)的 urls.py 上配置好路徑 / ,來映射到上面的視圖函數(shù):

          from?django.contrib?import?admin
          from?django.urls?import?path
          from?.views?import?nginx_view
          urlpatterns?=?[
          ????path('test_load_banlance/',?nginx_view),
          ]

          驗證

          打開瀏覽器,地址欄輸入 localhost/test_load_banlance/ 回車,會發(fā)現(xiàn)如下頁面:

          然后關(guān)閉 8000 服務(wù),再次刷新瀏覽器,會發(fā)現(xiàn)負(fù)載均衡器已經(jīng)轉(zhuǎn)發(fā)至 8001:

          是不是很酷呢?

          如果你持續(xù)刷新,它會在剩余的服務(wù)中進行隨機循環(huán)請求,也就是說每當(dāng)刷新一次,就會隨機換一個服務(wù)器進行請求。當(dāng)然了,你可以參考 nginx 文檔對這種選擇后端服務(wù)的方式進行修改。




          最后的話

          本文分享了 nginx 作為負(fù)載均衡器的最簡單配置,以及如何在 Django 中檢測訪問的是哪一個服務(wù),都比較簡單,如果有收獲還請點贊、在看、關(guān)注支持。



          瀏覽 68
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩精品在线观看免费 | www.俺去 | 亚洲精品久久久久久久久久久久久久 | 一区二区三区无码在线 | 免费视频网站啊啊啊 |