1. 程式人生 > >域名到站點的負載均衡技術一覽(主要是探討一臺Nginx抵禦大並發的解決方案)(轉)

域名到站點的負載均衡技術一覽(主要是探討一臺Nginx抵禦大並發的解決方案)(轉)

零成本 參考 硬件 名詞 virt 很好 web 常見 .com

繼上一篇文章Http://www.cnblogs.com/EasonJim/p/7807794.html中說到的,Nginx雖然很強大,但是面對大並發時,一臺Nginx總是有限的。即使後端有多臺Nginx組成的集群時,前端畢竟只有一臺Nginx,資源往往有限。

下面將介紹應對這樣的情況應該有的解決方案,其實原理就是集群,使用的是LVS。

我猜測和簡單的理解(觀點雖然是錯的,但是好理解,如果要深入原理遠沒有這麽簡單):為什麽LVS的集群能夠抵禦這麽大的並發,一切都出在VIP上,首先依托LVS的負載均衡調度器,這個是在Linux內核級別的,估計是在網絡七層中的第一層就轉發了,然後就是鏈表處理,然後把請求轉發到各個集群,再到Nginx。既然是內核級別的,那麽資源肯定占用的非常少,只做個最基本的轉發。

下面是詳細的介紹:

一、問題域

Nginx、LVS、Keepalived、F5、DNS輪詢,往往討論的是接入層的這樣幾個問題:

1)可用性:任何一臺機器掛了,服務受不受影響

2)擴展性:能否通過增加機器,擴充系統的性能

3)反向代理+負載均衡:請求是否均勻分攤到後端的操作單元執行

二、上面那些名詞都是什麽概念

1)Nginx:一個高性能的Web-Server和實施反向代理的軟件

2)LVS:Linux Virtual Server,使用集群技術,實現在Linux操作系統層面的一個高性能、高可用、負載均衡服務器

3)Keepalived:一款用來檢測服務狀態存活性的軟件,常用來做高可用

4)F5:一個高性能、高可用、負載均衡的硬件設備

5)DNS輪詢:通過在DNS-Server上對一個域名設置多個IP解析,來擴充Web-Server性能及實施負載均衡的技術

三、接入層技術演進

【裸奔時代單機架構】

技術分享

裸奔時代的架構圖如上:

1)瀏覽器通過DNS-Server,域名解析到IP

2)瀏覽器通過IP訪問Web-Server

缺點

1)非高可用,Web-Server掛了整個系統就掛了

2)擴展性差,當吞吐量達到Web-Server上限時,無法擴容

註:單機不涉及負載均衡的問題

【DNS輪詢】

假設Tomcat的吞吐量是1000次每秒,當系統總吞吐量達到3000時,如何擴容是首先要解決的問題,DNS輪詢是一個很容易想到的方案:

技術分享

此時的架構圖如上:

1)多部署幾份Web-Server,1個Tomcat抗1000,部署3個Tomcat就能抗3000

2)在DNS-Server層面,域名每次解析到不同的IP

優點

1)零成本:在DNS-Server上多配幾個IP即可,功能也不收費

2)部署簡單:多部署幾個Web-Server即可,原系統架構不需要做任何改造

3)負載均衡:變成了多機,但負載基本是均衡的

缺點

1)非高可用:DNS-Server只負責域名解析IP,這個IP對應的服務是否可用,DNS-Server是不保證的,假設有一個Web-Server掛了,部分服務會受到影響

2)擴容非實時:DNS解析有一個生效周期

3)暴露了太多的外網IP

【Nginx】

Tomcat的性能較差,但Nginx作為反向代理的性能就強多了,假設線上跑到1w,就比Tomcat高了10倍,可以利用這個特性來做擴容:

技術分享

此時的架構圖如上:

1)站點層與瀏覽器層之間加入了一個反向代理層,利用高性能的Nginx來做反向代理

2)Nginx將Http請求分發給後端多個Web-Server

優點

1)DNS-Server不需要動

2)負載均衡:通過Nginx來保證

3)只暴露一個外網IP,Nginx->Tomcat之間使用內網訪問

4)擴容實時:Nginx內部可控,隨時增加Web-Server隨時實時擴容

5)能夠保證站點層的可用性:任何一臺Tomcat掛了,Nginx可以將流量遷移到其他Tomcat

缺點

1)時延增加+架構更復雜了:中間多加了一個反向代理層

2)反向代理層成了單點,非高可用

【高可用方案Keepalived】

為了解決高可用的問題,Keepalived出場了:

技術分享

此時:

1)做兩臺Nginx組成一個集群,分別部署上Keepalived,設置成相同的虛IP,保證Nginx的高可用

2)當一臺Nginx掛了,Keepalived能夠探測到,並將流量自動遷移到另一臺Nginx上,整個過程對調用方透明。


優點

1)解決了高可用的問題

缺點

1)資源利用率只有50%

2)Nginx仍然是接入單點,如果接入吞吐量超過的Nginx的性能上限怎麽辦,例如qps達到了50000呢?

【垂直擴容方案 LVS/F5】

Nginx畢竟是軟件,性能比Tomcat好,但總有個上限,超出了上限,還是扛不住。

LVS就不一樣了,它實施在操作系統層面;F5的性能又更好了,它實施在硬件層面;它們性能比Nginx好很多,例如每秒可以抗10w,這樣可以利用他們來擴容,常見的架構圖如下:

技術分享

此時:

1)如果通過Nginx可以擴展多個Tomcat一樣,可以通過LVS來擴展多個Nginx

2)通過Keepalived+VIP的方案可以保證可用性

多數的公司到這一步基本就能解決接入層高可用、擴展性、負載均衡的問題。

好吧,不管是使用LVS還是F5,這些都是scale up(垂直擴展)的方案,根本上,LVS/F5還是會有性能上限,假設每秒能處理10w的請求,一天也只能處理80億的請求(10w秒吞吐量*8w秒),那萬一系統的日PV超過80億怎麽辦呢?

【水平擴容方案DNS輪詢】

水平擴展,才是解決性能問題的根本方案,能夠通過加機器擴充性能的方案才具備最好的擴展性。

facebook,google,baidu的PV是不是超過80億呢,它們的域名只對應一個IP麽,還是得通過DNS輪詢來進行擴容

技術分享

此時:

1)通過DNS輪詢來線性擴展入口LVS層的性能

2)通過Keepalived來保證高可用

3)通過LVS來擴展多個Nginx

4)通過Nginx來做負載均衡,業務七層路由

四、總結

稍微做一個簡要的總結:

1)接入層架構要考慮的問題域為:高可用、擴展性、反向代理+擴展均衡

2)Nginx、Keepalived、LVS、F5可以很好的解決高可用、擴展性、反向代理+擴展均衡的問題

3)水平擴展scale out是解決擴展性問題的根本方案,DNS輪詢是不能完全被Nginx/LVS/F5所替代的

參考:

Https://www.cnblogs.com/wade-luffy/p/6406394.html(以上內容轉自此篇文章)

域名到站點的負載均衡技術一覽(主要是探討一臺Nginx抵禦大並發的解決方案)(轉)