Web負載平衡(Load Balancing),簡單地說就是給我們的伺服器叢集分配“工作任務”,而採用恰當的分配方式,對於保護處於後端的Web伺服器來說,非常重要。
反向代理負載平衡
反向代理服務的核心工作主要是轉送HTTP請求,扮演了瀏覽器端和後台Web伺服器中轉的角色。因為它工作在HTTP層(應用層),也就是網路七層結構中的第七層,因此也被稱為「七層負載平衡」。可以做反向代理的軟體很多,比較常見的一種是Nginx。
Nginx是一種非常靈活的反向代理軟體,可以自由客製化轉送策略,分配伺服器流量的權重等。反向代理中,常見的一個問題,就是Web伺服器儲存的session數據,因為一般負載平衡的策略都是隨機分配請求的。同一個登入使用者的請求,無法保證一定分配到相同的Web機器上,會導致無法找到session的問題。
解決方案主要有兩種:
設定反向代理程式的轉送規則,讓同一個使用者的請求一定落在同一台機器上(透過分析cookie ),複雜的轉送規則將會消耗更多的CPU,也增加了代理伺服器的負擔。
將session這類的信息,專門用某個獨立服務來存儲,例如redis/memchache,這個方案是比較推薦的。
反向代理服務,也是可以開啟快取的,如果開啟了,會增加反向代理的負擔,需要謹慎使用。這種負載平衡策略實現和部署非常簡單,而且效能表現也比較好。但是,它有「單點故障」的問題,如果掛了,會帶來很多的麻煩。而且,到了後期Web伺服器持續增加,它本身可能成為系統的瓶頸。
設定檔樣本:
#user nobody; worker_processes 1; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream www.hcoder.net { server 192.168.1.188:80 weight=5; server 192.168.1.158:80; } server { listen 80; server_name www.hcoder.net; location / { proxy_pass http://www.hcoder.net; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
以上是網站負載平衡解決方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!