開頭先理解一下所謂的“均衡”
不能狹義地理解為分配給所有實際服務器一樣多的工作量,因為多臺服務器的承載能力各不相同,這可能體現在硬件配置、網絡帶寬的差異,也可能因為某臺服務器身兼多職,我們所說的“均衡”,也就是希望所有服務器都不要過載,并且能夠最大程序地發揮作用。
一、http重定向
當http代理(比如瀏覽器)向web服務器請求某個URL后,web服務器可以通過http響應頭信息中的Location標記來返回一個新的URL。這意味著HTTP代理需要繼續請求這個新的URL,完成自動跳轉。
性能缺陷:
1、吞吐率限制
主站點服務器的吞吐率平均分配到了被轉移的服務器。現假設使用RR(Round Robin)調度策略,子服務器的最大吞吐率為1000reqs/s,那么主服務器的吞吐率要達到3000reqs/s才能完全發揮三臺子服務器的作用,那么如果有100臺子服務器,那么主服務器的吞吐率可想而知得有大?相反,如果主服務的最大吞吐率為6000reqs/s,那么平均分配到子服務器的吞吐率為2000reqs/s,而現子服務器的最大吞吐率為1000reqs/s,因此就得增加子服務器的數量,增加到6個才能滿足。
2、重定向訪問深度不同
有的重定向一個靜態頁面,有的重定向相比復雜的動態頁面,那么實際服務器的負載差異是不可預料的,而主站服務器卻一無所知。因此整站使用重定向方法做負載均衡不太好。
我們需要權衡轉移請求的開銷和處理實際請求的開銷,前者相對于后者越小,那么重定向的意義就越大,例如下載。你可以去很多鏡像下載網站試下,會發現基本下載都使用了Location做了重定向。
二、DNS負載均衡
DNS負責提供域名解析服務,當訪問某個站點時,實際上首先需要通過該站點域名的DNS服務器來獲取域名指向的IP地址,在這一過程中,DNS服務器完成了域名到IP地址的映射,同樣,這樣映射也可以是一對多的,這時候,DNS服務器便充當了負載均衡調度器,它就像http重定向轉換策略一樣,將用戶的請求分散到多臺服務器上,但是它的實現機制完全不同。
使用dig命令來看下”baidu”的DNS設置
