當網站的人數使用量增加時,會出現效能、吞吐量...議題,所以常見的做法就是負載平衡,簡單說就是同個系統重複建置(例如建置4個: A, B, C, D),但是透過一個主要的入口,系統自動分配使用者訪問到A, B, C, D其中一個系統,達到分散流量的目的。
本次目的: 使用 Asp.net + Mvc + NGinx + IIS 分布式部署和負載平衡,一個網站分布式部署四個port分別是8001~8004,並且我使用nginx會設定port 8888,並且由系統自動分配導至 8001~8004 其中一個。
Step1: 建立Asp.net mvc網站 (這邊就是新開專案而已。)
Step2: IIS建立網站
執行發佈後,發佈檔複製四個,每一個的Index.chtml都給上對應編號1~4。
並建立四個網站,port從8001~8004
Step3: 安裝 Nginx (官網:https://nginx.org/en/download.html)
我使用的是 windows 版,版本是 1.20,安裝後就解壓縮。。
Step4: 設定 Nginx
將 conf\nginx.conf 內容置換為以下。
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#gzip on;
upstream myapp {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
server 127.0.0.1:8004;
}
server {
listen 8888;
location / {
proxy_pass http://myapp;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
Step5: 啟動 Nginx
cmd 到 ..\nginx\nginx-1.20.2 資料夾後,輸入指令一
# 指令一: 啟動 nginx
start nginx
# 指令二: 重啟 nginx
nginx -s reload
# 指令三: 停止 nginx
nginx -s stop
Step6: 測試
輸入 http://localhost:8888/ 或是 http://127.0.0.1:8888/ 就可以導到 port 8001~8004 摟。
Step7: 補充及總結
這次不僅是load balancing,其實也有用到反向代理,而port 8888 就是我們的反向代理器。
且負載均衡也有分以下幾種:
# 輪詢演算法的負載均衡 (最基本的,不用調整就有)
# 方式: 依次分配。
upstream backend_servers {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
server 127.0.0.1:8004;
}
# IP Hash演算法的負載均衡
# 方式: 根據IP位址的Hash值分配給不同的目標伺服器。
upstream backend_servers {
ip_hash;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
server 127.0.0.1:8004;
}
# Least Connections演演算法的負載均衡
# 方式: 用戶端請求分配給當前連接數最少的目標伺服器。
upstream backend_servers {
least_conn;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
server 127.0.0.1:8004;
}
如果說有使用到網站身分驗證、緩存...等等,理論上使用 IP Hash演算法會比較恰當。