Web服務高可用性技術演化

2021-10-09 09:54:32 字數 2785 閱讀 1740

一、問題域

nginx、lvs、keepalived、f5、dns輪詢,每每提到這些技術,往往討論的是接入層的這樣幾個問題:

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

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

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

二、上面那些名詞都是幹嘛的

1)nginx:乙個高效能的web-server和實施反向**的軟體

2)lvs:linux virtual server,使用集群技術,實現在linux作業系統層面的乙個高效能、高可用、負載均衡伺服器

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

4)f5:乙個高效能、高可用、負載均衡的硬體裝置(聽上去和lvs功能差不多?)

5)dns輪詢:通過在dns-server上對乙個網域名稱設定多個ip解析,來擴充web-server效能及實施負載均衡的技術

三、接入層技術演進

【裸奔時代(0)單機架構】

裸奔時代的架構圖如上:

1)瀏覽器通過dns-server,網域名稱解析到ip

2)瀏覽器通過ip訪問web-server

缺點:1)非高可用,web-server掛了整個系統就掛了

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

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

假設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

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)反向**層成了單點,非高可用:tomcat掛了不影響服務,nginx掛了怎麼辦?

為了解決高可用的問題,keepalived出場了(之前的文章「使用shadow-master保證系統可用性」詳細介紹過):

此時:1)做兩台nginx組成乙個集群,分別部署上keepalived,設定成相同的虛ip,保證nginx的高可用

2)當一台nginx掛了,keepalived能夠探測到,並將流量自動遷移到另一台nginx上,整個過程對呼叫方透明

優點:1)解決了高可用的問題

缺點:1)資源利用率只有50%

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

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

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

此時:1)如果通過nginx可以擴充套件多個tomcat一樣,可以通過lvs來擴充套件多個nginx

2)通過keepalived+vip的方案可以保證可用性

99.9999%的公司到這一步基本就能解決接入層高可用、擴充套件性、負載均衡的問題。

這就完美了嘛?還有潛在問題麼?

好吧,不管是使用lvs還是f5,這些都是scale up的方案,根本上,lvs/f5還是會有效能上限,假設每秒能處理10w的請求,一天也只能處理80億的請求(10w秒吞吐量*8w秒),那萬一系統的日pv超過80億怎麼辦呢?(好吧,沒幾個公司要考慮這個問題)

如之前文章所述,水平擴充套件,才是解決效能問題的根本方案,能夠通過加機器擴充效能的方案才具備最好的擴充套件性。

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所替代的

sql server 高可用性技術總結

原文 sql server 高可用性技術總結 應用場景 負載均衡 提供副本讀,寫操作。分割槽將歷史資料複製到其它表中。授權,將資料提供它人使用。資料合併。故障轉移。優點 實現簡單。資料同時同步,幾乎達到映象。可以實現對某些表,或表資料過濾進行複製。缺點 不適合做高可用,因為整個庫複製影響效能。不支援...

Web可用性測試

專案 問題 答案 yes no n a 瀏覽1 對瀏覽者所處網頁有清晰的標記?2 有清楚指向主頁的鏈結?3 各主要部分都可以由主頁進入?4 有 索引,已備需要?5 架構簡單,沒有不必要的分級?6 有易用的搜尋功能,已備需要?功能1 所有功能都有清晰的標籤?2 不需要離開 即可運用各必需的功能?3 沒...

架構要素 高可用性

實現高可用架構的主要手段是資料和服務的冗餘備份及失效轉移。高可用的應用 應用層主要處理 應用的業務邏輯,因此也稱業務邏輯層,應用的乙個顯著特點是應用的無狀態。所謂無狀態的應用是指應用伺服器不儲存業務的上下文資訊,而僅根據每次請求提交的資料進行相應的業務邏輯處理,多個服務例項 伺服器 之間完全對等,請...