單個系統的高可用和高性能并不等于整體業務的高可用和高性能,網際網路業務的高性能和高可用需要從更高的角度去設計,這個高點就是“網絡”。這裡的網絡強調的是站在網絡層的角度整體設計架構,而不是某個具體網絡的搭建。
負載均衡就是将請求均衡地配置設定到多個系統上。使用負載均衡的原因也很簡單:每個系統的處理能力是有限的,為了應對大容量的通路,必須使用多個系統。
DNS是最簡單也是最常見的負載均衡方式,一般用來實作地理級别的均衡。
比如,北方的使用者通路北京的機房,南方的使用者通路深圳的機房。
DNS負載均衡也可以叫做鍊路負載均衡,示意圖如下:

DNS負載均衡實作簡單、成本低,但也存在粒度太粗、負載均衡算法少等缺點。
優點:
簡單、成本低:負載均衡工作交給DNS伺服器處理,無須自己開發或者維護負載均衡裝置。
就近通路,提升通路速度:DNS解析時可以根據請求來源IP,解析成距離使用者最近的伺服器位址,可以加快通路速度,改善性能。
缺點:
DNS緩存的時間比較長,即使将某台業務機器從DNS伺服器上删除,由于緩存的原因,還是有很多使用者會繼續通路已經被删除的機器。
DNS不夠靈活。DNS不能感覺後端伺服器的狀态,隻能根據配置政策進行負載均衡,無法做到更加靈活的負載均衡政策。比如說某台機器的配置比其他機器要好很多,理論上來說應該多配置設定一些請求給它,但DNS無法做到這一點。
用于同一地點内機器級别的負載均衡
Nginx簡單介紹
CDN是為了解決使用者網絡通路時的“最後一公裡”效應,本質上是一種“以空間換時間”的加速政策,即:将内容緩存在離使用者最近的地方,使用者通路的是緩存的内容,而不是站點實時的内容。
通過在現有的Internet中增加一層新的網絡架構,使使用者可以就近取得所需内容,提高使用者通路網站的響應速度。
最初CDN都以緩存網站中的靜态資料為主,如 CSS、JS、圖檔和靜态頁面等資料;如今在通路量驕傲的網站、直播、視訊平台均用CDN網絡加速技術。
CDN如何實作加速?
通常情況下,我們所要的資料都是從主伺服器中擷取,但假如我們的主伺服器在南方,而通路使用者在北方,那麼通路速度就會相對變慢,變慢的原因有很多,例如傳輸距離,營運商,帶寬等等因素,而使用CDN技術的話,我們會将CDN節點分布在各地,當使用者發送請求到達伺服器時,伺服器會根據使用者的區域資訊,為使用者配置設定最近的CDN伺服器。
CDN資料從哪裡來?
複制,緩存,CDN伺服器可以在使用者請求後緩存檔案,也可以主動抓取主伺服器内容。
CDN解決的問題
CDN是一個經政策性部署的整體系統,從技術上全面解決由于網絡帶寬小、使用者通路量大、網點分布不均而産生的使用者通路網站響應速度慢的根本原因。
1.使用者向浏覽器輸入www.web.com這個域名,浏覽器第一次發現本地沒有dns緩存,則向網站的DNS伺服器請求;
2.網站的DNS域名解析器設定了CNAME,指向了www.web.51cdn.com,請求指向了CDN網絡中的智能DNS負載均衡系統;
3.智能DNS負載均衡系統解析域名,把對使用者響應速度最快的IP節點傳回給使用者;
4.使用者向該IP節點(CDN伺服器)送出請求;
5.由于是第一次通路,CDN伺服器會向原web站點請求,并緩存内容;
6.請求結果發給使用者。
同城多機房
同城的兩個機房通過一根專線連接配接,應對機房級别的最優架構
這種對業務影響小,但投入大
跨城多機房
機房間通過網絡進行資料備份(MySQL主備複制)
異地距離遠帶來的網絡延遲問題,容易導緻資料不一緻。
需要考慮的是資料是否要求強一緻性!!不适用于強一緻性的需求。
例如:微網誌類産品,B關注了A使用者,A使用者在北京機房發出,B在廣州機房不必立刻看到A使用者發的微網誌,等10分鐘也行。
跨國多機房
和跨城多機房類似,隻是地理上分布更遠,時延更大。由于時延太大和使用者跨國通路實在太慢,跨國多機房一般僅用于備份和服務本國使用者。
多中心必須以多機房為前提,但難度大
具體來說,組合的基本原則為:
DNS負載均衡用于實作地理級别的負載均衡;
硬體負載均衡用于實作叢集級别的負載均衡;
軟體負載均衡用于實作機器級别的負載均衡。
整個系統的負載均衡分為三層:
地理級别負載均衡:www.xxx.com部署在北京、廣州、上海三個機房,當使用者通路時,DNS會根據使用者的地理位置來決定傳回哪個機房的IP,圖中傳回了廣州機房的IP位址,這樣使用者就通路到廣州機房了。
叢集級别負載均衡:廣州機房的負載均衡用的是F5裝置,F5收到使用者請求後,進行叢集級别的負載均衡,将使用者請求發給3個本地叢集中的一個,我們假設F5将使用者請求發給 了“廣州叢集2”。
機器級别的負載均衡:廣州叢集2的負載均衡用的是Nginx,Nginx收到使用者請求後,将使用者請求發送給叢集裡面的某台伺服器,伺服器處理使用者的業務請求并傳回業務響應。