天天看點

域名與伺服器負載均衡技術學習總結域名到站點的負載均衡技術學習總結一、問題域二、上面那些名詞都是什麼概念三、接入層技術演進【裸奔時代單機架構】【DNS輪詢】【nginx】【高可用方案keepalived】【垂直擴容方案 lvs/f5】【水準擴容方案DNS輪詢】

域名到站點的負載均衡技術學習總結

目錄

域名到站點的負載均衡技術一覽

一、問題域

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

三、接入層技術演進

【裸奔時代單機架構】

【DNS輪詢】

【nginx】

【高可用方案keepalived】

【垂直擴容方案 lvs/f5】

【水準擴容方案DNS輪詢】

一、問題域

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性能及實施負載均衡的技術 

三、接入層技術演進

【裸奔時代單機架構】

域名與伺服器負載均衡技術學習總結域名到站點的負載均衡技術學習總結一、問題域二、上面那些名詞都是什麼概念三、接入層技術演進【裸奔時代單機架構】【DNS輪詢】【nginx】【高可用方案keepalived】【垂直擴容方案 lvs/f5】【水準擴容方案DNS輪詢】

裸奔時代的架構圖如上:

1)浏覽器通過DNS-server,域名解析到ip

2)浏覽器通過ip通路web-server

缺點:

1)非高可用,web-server挂了整個系統就挂了

2)擴充性差,當吞吐量達到web-server上限時,無法擴容

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

【DNS輪詢】

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

域名與伺服器負載均衡技術學習總結域名到站點的負載均衡技術學習總結一、問題域二、上面那些名詞都是什麼概念三、接入層技術演進【裸奔時代單機架構】【DNS輪詢】【nginx】【高可用方案keepalived】【垂直擴容方案 lvs/f5】【水準擴容方案DNS輪詢】
域名與伺服器負載均衡技術學習總結域名到站點的負載均衡技術學習總結一、問題域二、上面那些名詞都是什麼概念三、接入層技術演進【裸奔時代單機架構】【DNS輪詢】【nginx】【高可用方案keepalived】【垂直擴容方案 lvs/f5】【水準擴容方案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倍,可以利用這個特性來做擴容:

域名與伺服器負載均衡技術學習總結域名到站點的負載均衡技術學習總結一、問題域二、上面那些名詞都是什麼概念三、接入層技術演進【裸奔時代單機架構】【DNS輪詢】【nginx】【高可用方案keepalived】【垂直擴容方案 lvs/f5】【水準擴容方案DNS輪詢】
域名與伺服器負載均衡技術學習總結域名到站點的負載均衡技術學習總結一、問題域二、上面那些名詞都是什麼概念三、接入層技術演進【裸奔時代單機架構】【DNS輪詢】【nginx】【高可用方案keepalived】【垂直擴容方案 lvs/f5】【水準擴容方案DNS輪詢】

此時的架構圖如上:

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出場了:

域名與伺服器負載均衡技術學習總結域名到站點的負載均衡技術學習總結一、問題域二、上面那些名詞都是什麼概念三、接入層技術演進【裸奔時代單機架構】【DNS輪詢】【nginx】【高可用方案keepalived】【垂直擴容方案 lvs/f5】【水準擴容方案DNS輪詢】
域名與伺服器負載均衡技術學習總結域名到站點的負載均衡技術學習總結一、問題域二、上面那些名詞都是什麼概念三、接入層技術演進【裸奔時代單機架構】【DNS輪詢】【nginx】【高可用方案keepalived】【垂直擴容方案 lvs/f5】【水準擴容方案DNS輪詢】

此時:

1)做兩台nginx組成一個叢集,分别部署上keepalived,設定成相同的虛IP,保證nginx的高可用

2)當一台nginx挂了,keepalived能夠探測到,并将流量自動遷移到另一台nginx上,整個過程對調用方透明。

域名與伺服器負載均衡技術學習總結域名到站點的負載均衡技術學習總結一、問題域二、上面那些名詞都是什麼概念三、接入層技術演進【裸奔時代單機架構】【DNS輪詢】【nginx】【高可用方案keepalived】【垂直擴容方案 lvs/f5】【水準擴容方案DNS輪詢】

優點:

1)解決了高可用的問題

缺點:

1)資源使用率隻有50%

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

【垂直擴容方案 lvs/f5】

nginx畢竟是軟體,性能比tomcat好,但總有個上限,超出了上限,還是扛不住。

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

域名與伺服器負載均衡技術學習總結域名到站點的負載均衡技術學習總結一、問題域二、上面那些名詞都是什麼概念三、接入層技術演進【裸奔時代單機架構】【DNS輪詢】【nginx】【高可用方案keepalived】【垂直擴容方案 lvs/f5】【水準擴容方案DNS輪詢】

此時:

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輪詢來進行擴容:

域名與伺服器負載均衡技術學習總結域名到站點的負載均衡技術學習總結一、問題域二、上面那些名詞都是什麼概念三、接入層技術演進【裸奔時代單機架構】【DNS輪詢】【nginx】【高可用方案keepalived】【垂直擴容方案 lvs/f5】【水準擴容方案DNS輪詢】

此時:

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

2)通過keepalived來保證高可用

3)通過lvs來擴充多個nginx

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

四、總結

稍微做一個簡要的總結:

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

2)nginx、keepalived、lvs、f5可以很好的解決高可用、擴充性、反向代理+擴充均衡的問題

3)水準擴充scale out是解決擴充性問題的根本方案,DNS輪詢是不能完全被nginx/lvs/f5所替代的

繼續閱讀