講講億級PV的負載均衡架構

原文鏈接:https://www.cnblogs.com/rjzheng/p/10263562.html

DNS

開始呢,我們的應用只有一臺web-server。那麼你希望:輸入guduyan.com就能定位到該server

那很簡單,只要在DNS裏配上域名和你的server映射關係,就能訪問到啦!流程如下圖所示

好,現在呢,多了一臺web-server,你就可以通過在DNS里加一條配置,以DNS輪詢方式進行負載均衡。如下圖所示

Nginx+DNS

現在假設,我們多了一些需求啊。你的系統按照功能模塊拆成兩個系統:用戶系統和訂單系統。那麼你希望輸入guduyan.com/user/的時候定位到用戶系統。輸入guduyan.com/order/的時候定位到訂單系統。

那這時候,光靠DNS就不行了,就需要採用DNS+nginx進行負載均衡!如下圖所示

ps:nginx還可以做動靜分離哦,大家應該懂的!

那如果系統的訪問壓力進一步加大,萬一nginx掛了怎麼辦?如何給nginx引入熱備?

這裏就要用keepalived了,用兩臺nginx組成一個集羣,分別部署上keepalived,設置成相同的虛IP,這樣一個節點在崩潰的情況下,另一個節點能夠自動接替其工作,如下圖所示

Lvs+Nginx+DNS

接下來隨着系統規模的繼續增大,你會慢慢的發現nginx也扛不住了!nginx工作在網絡的第7層,所以它可以針對http應用本身來做分流策略,比如針對域名、目錄結構等。

而Lvs工作在網絡4層,抗負載能力強,性能高,能達到F5的60%,對內存和CPU資源消耗比較低,且穩定,可靠性高。它利用linux的內核進行轉發,不產生流量。它能撐的併發量取決於機器的內存大小,一般來說撐個幾十萬併發問題不大!

ps:好好思考爲什麼會出現nginx+Lvs被同時使用,注意看我演變的過程,面試必問!注意了,如果是比較小的網站(日pv<1000萬),用nginx就完全可以了,如果機器也不少,可以用dns輪詢,Lvs所耗費的機器還是比較多的;大型網站或者重要的服務,機器不發愁的時候要多多考慮利用Lvs。

那麼,在這種情況下的架構圖如下所示

可能有個疑問,爲什麼nginx層不用keepalived做熱備?

主要原因是:在這種架構下,nginx不是單臺,如果nginx掛了,Lvs會幫你轉發到其他可用的nginx上!

最後,爲了應對億級的PV,一般會在DNS端配多個Lvs集羣的地址。如下所示

方案擴展到了這一步,Lvs層就沒有必要再進行擴展新的節點了。這套架構已經能扛得住億級的PV。當然,前提是你的應用沒問題!

另外:

DNS(Domain Name System)是因特網的一項服務,它作爲域名和IP地址相互映射的一個分佈式數據庫,能夠使人更方便的訪問互聯網。人們在通過瀏覽器訪問網站時只需要記住網站的域名即可,而不需要記住那些不太容易理解的IP地址。在DNS系統中有一個比較重要的的資源類型叫做主機記錄也稱爲A記錄,A記錄是用於名稱解析的重要記錄,它將特定的主機名映射到對應主機的IP地址上。如果你有一個自己的域名,那麼要想別人能訪問到你的網站,你需要到特定的DNS解析服務商的服務器上填寫A記錄,過一段時間後,別人就能通過你的域名訪問你的網站了。DNS除了能解析域名之外還具有負載均衡的功能,下面是利用DNS工作原理處理負載均衡的工作原理圖:

                

    由上圖可以看出,在DNS服務器中應該配置了多個A記錄,如:

      www.apusapp.com IN A 114.100.20.201;

      www.apusapp.com IN A 114.100.20.202;

      www.apusapp.com IN A 114.100.20.203;

因此,每次域名解析請求都會根據對應的負載均衡算法計算出一個不同的IP地址並返回,這樣A記錄中配置多個服務器就可以構成一個集羣,並可以實現負載均衡。上圖中,用戶請求www.apusapp.com,DNS根據A記錄和負載均衡算法計算得到一個IP地址114.100.20.203,並返回給瀏覽器,瀏覽器根據該IP地址,訪問真實的物理服務器114.100.20.203。所有這些操作對用戶來說都是透明的,用戶可能只知道www.apusapp.com這個域名。

   DNS域名解析負載均衡有如下優點:

1. 將負載均衡的工作交給DNS,省去了網站管理維護負載均衡服務器的麻煩。

2. 技術實現比較靈活、方便,簡單易行,成本低,使用於大多數TCP/IP應用。

3. 對於部署在服務器上的應用來說不需要進行任何的代碼修改即可實現不同機器上的應用訪問。

3. 服務器可以位於互聯網的任意位置。

4. 同時許多DNS還支持基於地理位置的域名解析,即會將域名解析成距離用戶地理最近的一個服務器地址,這樣就可以加速用戶訪問,改善性能。

    同時,DNS域名解析也存在如下缺點:

1. 目前的DNS是多級解析的,每一級DNS都可能緩存A記錄,當某臺服務器下線之後,即使修改了A記錄,要使其生效也需要較長的時間,這段時間,DNS任然會將域名解析到已下線的服務器上,最終導致用戶訪問失敗。

2. 不能夠按服務器的處理能力來分配負載。DNS負載均衡採用的是簡單的輪詢算法,不能區分服務器之間的差異,不能反映服務器當前運行狀態,所以其的負載均衡效果並不是太好。

3. 可能會造成額外的網絡問題。爲了使本DNS服務器和其他DNS服務器及時交互,保證DNS數據及時更新,使地址能隨機分配,一般都要將DNS的刷新時間設置的較小,但太小將會使DNS流量大增造成額外的網絡問題。

 事實上,大型網站總是部分使用DNS域名解析,利用域名解析作爲第一級負載均衡手段,即域名解析得到的一組服務器並不是實際提供服務的物理服務器,而是同樣提供負載均衡服務器的內部服務器,這組內部負載均衡服務器再進行負載均衡,請請求發到真實的服務器上,最終完成請求。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章