👉 這是一個或許對你有用的社群
《專案實戰(影片)》:從書中學,往事上“練” 《網際網路高頻面試題》:面朝簡歷學習,春暖花開 《架構 x 系統設計》:摧枯拉朽,掌控面試高頻場景題 《精進 Java 學習指南》:系統學習,網際網路主流技術棧 《必讀 Java 原始碼專欄》:知其然,知其所以然

👉這是一個或許對你有用的開源專案國產 Star 破 10w+ 的開源專案,前端包括管理後臺 + 微信小程式,後端支援單體和微服務架構。功能涵蓋 RBAC 許可權、SaaS 多租戶、資料許可權、商城、支付、工作流、大屏報表、微信公眾號、ERP、CRM、AI 大模型等等功能:
Boot 多模組架構:https://gitee.com/zhijiantianya/ruoyi-vue-pro Cloud 微服務架構:https://gitee.com/zhijiantianya/yudao-cloud 影片教程:https://doc.iocoder.cn 【國內首批】支援 JDK 17/21 + SpringBoot 3.3、JDK 8/11 + Spring Boot 2.7 雙版本
一 什麼是負載均衡

-
伺服器負載均衡:在多個伺服器之間分配網路流量,以防止任何單個伺服器因請求過多而效能下降。 -
資料中心負載均衡:在資料中心的不同位置或不同資料中心之間分配流量,以最佳化資源利用和提高可靠性。 -
雲服務負載均衡:在雲環境中,負載均衡可以跨多個虛擬機器或容器服務分配流量。
-
DNS 負載均衡 :透過 DNS 服務將域名解析成不同的 IP 地址,將流量分散到不同的伺服器上。 -
硬體負載均衡 :使用專門的硬體裝置(如 F5 BIG-IP)來分配流量。 -
軟體負載均衡 :使用軟體解決方案(如 Nginx、HAProxy)來實現負載均衡。 -
應用層負載均衡 :在應用層(如 HTTP/HTTPS)分配請求到不同的伺服器。 -
傳輸層負載均衡 :在傳輸層(如 TCP/UDP)分配連線到不同的伺服器。
基於 Spring Boot + MyBatis Plus + Vue & Element 實現的後臺管理系統 + 使用者小程式,支援 RBAC 動態許可權、多租戶、資料許可權、工作流、三方登入、支付、簡訊、商城等功能
專案地址:https://github.com/YunaiV/ruoyi-vue-pro 影片教程:https://doc.iocoder.cn/video/
二 常見負載均衡演算法
-
輪詢(Round Robin) :將請求輪流分配給每臺伺服器。 -
最少連線(Least Connections) :將請求分配給當前連線數最少的伺服器。 -
加權輪詢(Weighted Round Robin) :根據伺服器的效能權重來分配請求。 -
加權最少連線(Weighted Least Connections) :根據伺服器的效能權重和當前連線數來分配請求。 -
IP 雜湊(IP Hash) :根據客戶端 IP 地址的雜湊值來分配請求,以保證來自同一 IP 的請求總是被分配到同一臺伺服器上。
基於 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的後臺管理系統 + 使用者小程式,支援 RBAC 動態許可權、多租戶、資料許可權、工作流、三方登入、支付、簡訊、商城等功能
專案地址:https://github.com/YunaiV/yudao-cloud 影片教程:https://doc.iocoder.cn/video/
三 Nginx 配置
3.1 輪詢(Round Robin)
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
...
location / {
proxy_pass http://backend;
}
...
}
3.2 加權輪詢
http {
upstream myapp1 {
# 定義一個名為myapp1的伺服器組
server backend1.example.com weight=5;
# 新增一個伺服器,並設定權重為5
server backend2.example.com;
# 新增另一個伺服器,權重預設為1
server backend3.example.com down;
# 將此伺服器標記為down,不參與負載均衡
server backup1.example.com backup;
# 將此伺服器作為備份伺服器
}
server {
listen 80;
# 監聽80埠
location / {
# 匹配所有請求
proxy_pass http://myapp1;
# 將請求轉發到myapp1伺服器組
proxy_set_header Host
$host
;
# 設定請求頭中的Host欄位為原始請求的Host
proxy_set_header X-Real-IP
$remote_addr
;
# 設定請求頭中的X-Real-IP欄位為客戶端的真實IP地址
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for
;
# 設定請求頭中的X-Forwarded-For欄位,以記錄原始請求和代理鏈的IP地址
proxy_set_header X-Forwarded-Proto
$scheme
;
# 設定請求頭中的X-Forwarded-Proto欄位為原始請求的協議(http或https)
}
}
}
3.3 IP 雜湊(IP Hash)
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
...
location / {
proxy_pass http://backend;
}
...
}
3.4 最少連線(Least Connections)
❝注意:Nginx 原生的 Stream 模組支援最少連線,但在 HTTP 模組中通常需要藉助第三方外掛或指令碼實現。
upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
stream {
server {
listen 12345;
proxy_pass backend;
}
}
3.5 健康檢查
主動健康檢查
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
check interval=3000 rise=2 fall=5 timeout=1000
type
=http;
check_http_send
"HEAD /health HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n"
;
check_http_expect_alive http_2xx http_3xx;
}
server {
location / {
proxy_pass http://backend;
}
}
}
/health
端點發送一個 HEAD 請求。如果伺服器連續兩次返回 2xx 或 3xx 的 HTTP 狀態碼(rise=2),則認為伺服器是健康的。如果伺服器連續五次未能正確響應(fall=5),則認為伺服器不健康。被動健康檢查
http {
upstream backend {
server backend1.example.com;
server backend2.example.com max_fails=2 fail_timeout=30s;
}
server {
listen 80;
location / {
proxy_pass backend;
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
}
}
}
proxy_next_upstream
指令指定了哪些錯誤應該觸發使用不同的伺服器進行重試。一 什麼是負載均衡

-
伺服器負載均衡:在多個伺服器之間分配網路流量,以防止任何單個伺服器因請求過多而效能下降。 -
資料中心負載均衡:在資料中心的不同位置或不同資料中心之間分配流量,以最佳化資源利用和提高可靠性。 -
雲服務負載均衡:在雲環境中,負載均衡可以跨多個虛擬機器或容器服務分配流量。
-
DNS 負載均衡 :透過 DNS 服務將域名解析成不同的 IP 地址,將流量分散到不同的伺服器上。 -
硬體負載均衡 :使用專門的硬體裝置(如 F5 BIG-IP)來分配流量。 -
軟體負載均衡 :使用軟體解決方案(如 Nginx、HAProxy)來實現負載均衡。 -
應用層負載均衡 :在應用層(如 HTTP/HTTPS)分配請求到不同的伺服器。 -
傳輸層負載均衡 :在傳輸層(如 TCP/UDP)分配連線到不同的伺服器。
二 常見負載均衡演算法
-
輪詢(Round Robin) :將請求輪流分配給每臺伺服器。 -
最少連線(Least Connections) :將請求分配給當前連線數最少的伺服器。 -
加權輪詢(Weighted Round Robin) :根據伺服器的效能權重來分配請求。 -
加權最少連線(Weighted Least Connections) :根據伺服器的效能權重和當前連線數來分配請求。 -
IP 雜湊(IP Hash) :根據客戶端 IP 地址的雜湊值來分配請求,以保證來自同一 IP 的請求總是被分配到同一臺伺服器上。
三 Nginx 配置
3.1 輪詢(Round Robin)
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
...
location / {
proxy_pass http://backend;
}
...
}
3.2 加權輪詢
http {
upstream myapp1 {
# 定義一個名為myapp1的伺服器組
server backend1.example.com weight=5;
# 新增一個伺服器,並設定權重為5
server backend2.example.com;
# 新增另一個伺服器,權重預設為1
server backend3.example.com down;
# 將此伺服器標記為down,不參與負載均衡
server backup1.example.com backup;
# 將此伺服器作為備份伺服器
}
server {
listen 80;
# 監聽80埠
location / {
# 匹配所有請求
proxy_pass http://myapp1;
# 將請求轉發到myapp1伺服器組
proxy_set_header Host
$host
;
# 設定請求頭中的Host欄位為原始請求的Host
proxy_set_header X-Real-IP
$remote_addr
;
# 設定請求頭中的X-Real-IP欄位為客戶端的真實IP地址
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for
;
# 設定請求頭中的X-Forwarded-For欄位,以記錄原始請求和代理鏈的IP地址
proxy_set_header X-Forwarded-Proto
$scheme
;
# 設定請求頭中的X-Forwarded-Proto欄位為原始請求的協議(http或https)
}
}
}
3.3 IP 雜湊(IP Hash)
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
...
location / {
proxy_pass http://backend;
}
...
}
3.4 最少連線(Least Connections)
❝注意:Nginx 原生的 Stream 模組支援最少連線,但在 HTTP 模組中通常需要藉助第三方外掛或指令碼實現。
upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
stream {
server {
listen 12345;
proxy_pass backend;
}
}
3.5 健康檢查
主動健康檢查
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
check interval=3000 rise=2 fall=5 timeout=1000
type
=http;
check_http_send
"HEAD /health HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n"
;
check_http_expect_alive http_2xx http_3xx;
}
server {
location / {
proxy_pass http://backend;
}
}
}
/health
端點發送一個 HEAD 請求。如果伺服器連續兩次返回 2xx 或 3xx 的 HTTP 狀態碼(rise=2),則認為伺服器是健康的。如果伺服器連續五次未能正確響應(fall=5),則認為伺服器不健康。被動健康檢查
http {
upstream backend {
server backend1.example.com;
server backend2.example.com max_fails=2 fail_timeout=30s;
}
server {
listen 80;
location / {
proxy_pass backend;
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
}
}
}
proxy_next_upstream
指令指定了哪些錯誤應該觸發使用不同的伺服器進行重試。




