高性能可靠服務集羣架構

1、 需求分析

龐大的業務訪問量需要高性能、可靠的服務器框架支撐。高性能要求服務器在巨大壓力下仍然高速運行,讀寫返回正確的業務信息,前端用戶體驗良好。可靠性要求服務器出現宕機、罷工等情況,可以及時恢復服務器正常工作狀態,支持業務系統24小時健康運行。使用緩存、讀寫分離技術提高服務器訪問資源速度,解決大訪問量資源擁堵問題;使用負載均衡與高可用技術提高服務器響應速度以及服務器穩定性,解決服務器處理大用戶量請求問題以及服務器宕機的及時恢復能力。

同時,需要部署運維監控平臺,監控服務器上服務程序與資源使用情況,出現問題及時報警通知運維人員。服務器系統的安全加固問題也不能忽視,防範於未然。

2、 基礎架構

按照上述需求,基礎架構劃分下面幾個模塊:負載均衡與代理、Web主站服務、APP接口服務、圖片服務器、數據庫與緩存服務。

客戶端通過域名解析直接訪問到負載代理服務器,後端全部訪問與響應操作對用戶透明。圖片也可以單獨開來,不經過負載均衡代理服務器,使用單獨的域名進行圖片讀寫。當圖片服務數量上來了,也要配置單獨的負載均衡代理服務器,組合服務器集羣。而這裏圖片服務器與其他服務共用相同負載,這樣負載壓力大,容易出現問題,追溯問題源頭工作也會變得複雜。所以說,不同的服務集羣,最好使用不同域名、不同負載均衡進行代理。客戶端直接通過負載訪問相關服務,負載直接代理到服務子羣,不再對服務進行判斷劃分。分工更加明確,出現問題也容易解決。

圖片服務器也可以不需要存在與其他服務直接訪問關係,他們只需要保存好訪問圖片對應關係,包括圖片所屬ID、路徑、標識等。

3、 負載代理

負載均衡代理主要是兩個作用:實現多臺機器按照算法輪流工作,分擔服務壓力,當一臺機器宕機或者罷工,其他機器也可以繼續運行;代理隱藏服務內部真實結構,多臺對外提供統一地址,運行相同業務系統。

負載代理服務器本身也需要支持高可用性能,主從備份機器,主服務器發生故障時,從服務器及時頂替繼續運行負載代理服務。Keepalived可以支持高可用性能,更加可以配置Keepalived自動執行自定義檢測腳本,檢測服務器的心跳,自動遞減服務器的優先級,實現服務自動偏移功能。

下面幾個組合可以完成上述功能,各個組合側重點有所不同,所處的網絡層次也有不同。網絡四層主要針對IP地址負載均衡,而網絡七次針對URL,更有支持四層與七層的,側重於TCP/IP協議棧。

LVS+Keepalived:LVS工作於網絡四層結構,針對IP地址進行網絡數據報轉發,實現負載均衡代理功能,器配置相對複雜。性能穩定,支持超大訪問量的集羣負載。對外提供統一的虛擬IP,有三種工作模式,十種左右的輪詢算法。

Nginx+Keepalived:Nginx工作與網絡七層結構,配置相對簡單,支持URL、目錄等正則處理更加貼近實際生產需求,可以支持較大訪問量的集羣負載。

Haproxy+Keepalived:Haproxy工作網絡四層與網絡七層都可以,配置相對簡單,負載均衡速度不亞於Nginx,值得一提的是Haproxy可以進行DDOS***防禦,以後應該深入研究Haproxy。

4、 主站服務

主站框架是一個Web服務器(apache、tomcat、nginx等)集羣,集羣中全部機器運行相同業務系統。通過負載均衡代理與客戶端通訊,每一次通訊只有一臺機器爲當前客戶端服務。需要解決session共享問題,否則將會丟失用戶的登錄狀態,在用戶體驗方面有邏輯錯誤。常見的共享session方法有數據庫共享、cookie共享、內存共享。使用最多的是memcache共享方式,memcache把多個服務器的共享內存拼接成一塊大的內存使用,保存用戶的session信息。Tomcat服務集羣可以簡單配置memcache共享內存,PHP中也可以直接配置設置memcache共享內存。

Nginx負載解決session的方式:ip_hash、sticky。ip_hash根據IP保存響應服務器,在一張存儲表單中,IP對應上次訪問的服務器,以後來自於該IP的訪問都使用這個這臺服務器,解決session問題,存在侷限性影響負載均衡的功能。Sticky使用cookie的方式解決session共享問題,其實是避開session共享。Sticky把cookie與服務器綁定,存儲於客戶端緩存當中,客戶端再次訪問時直接進入到cookie綁定的服務器,關閉客戶端session也隨之消失。

5、 接口服務

接口服務與主站服務功能大同小異,也是Web服務集羣。在負載代理時候,通過七層代理轉發正則匹配域名與目錄,指向接口服務地址端口。對於劃分更加細節的系統架構,接口服務也是單獨的域名,啓用四層負載代理連接集羣,服務功能更加簡單明瞭。

6、 圖片服務

圖片服務建立在分佈式文件系統基礎上,搭建Web服務主要支持圖片訪問上次下載功能。結合讀寫分離技術,圖片上傳劃分一個子羣,圖片下載劃分一個子羣。前面搭建負載均衡服務器支持大量讀寫操作,兩個子羣建立在同一個文件系統,組成分佈式文件系統。常見的文件系統有NFS、FastDFS、TFS、Hadoop等。

NFS是共享掛載方式,訪問圖片時仍然佔用網絡帶寬,沒有文件備份處理,出現故障不容易恢復。FastDFS是一個分佈式同步文件系統,穩定性好可靠,提供各種語言客戶端API便於開發。TFS是淘寶正在使用的圖片服務器文件系統,支持海量圖片讀寫操作,對於大文件存儲能力欠佳。Hadoop是比較火的大數據平臺,高容錯高吞吐量,技術成熟,分佈式文件系統非常好的選擇。

7、 數據庫與緩存

7.1、數據庫集羣

如果服務訪問量非常大,數據庫是訪問速度最重要的影響因素。數據的讀寫操作往往佔用大部分時間,數據表上百萬級別記錄,update操作時間開銷會很大。而且外面有一條几萬的數據庫操作隊列,那是人不崩潰,機器已經崩潰。首先是CPU佔滿,數據庫裏面堆滿上鎖sql語句,導致前端反應速度跟不上蝸牛。

對數據庫訪問頻繁數據記錄數量巨大的表,進行分片操作,細化數據表提高sql執行速度。數據庫服務器使用分佈式架構部署,前面架設負載均衡服務器,結合數據庫讀寫分離技術。常見數據庫db2、oracle、mysql等,對於分佈式mysql系統,可以使用MyCat中間件管理。

7.2、緩存服務

緩存可以提高服務的響應速度,處理及時性要求高的數據時,數據首先進入緩存,然後通過消息隊列寫入到數據庫。從數據庫查詢出來的實時數據也可以保存在緩存中,在緩存中直接提供用戶訪問,執行用戶操作數據請求,再把數據返回數據庫。

Redis是一款出色的緩存服務器,內存級別的鍵值對數據庫,支持豐富數據結構,數據庫操作命令也是很齊全。最重要是Redis操作速度非常快,滿足緩存服務器需求。Redis提供單機的分片集羣,單機硬件性能要求比較高。Redis也可以進行分佈式部署,搭建分佈式緩存服務。

8、 安全加固

安全配置:隱藏常見系統服務信息、配置用戶權限、開啓防火牆、關閉無用系統服務、定期更新系統

風險評估:進行***測試、漏洞掃描

安全防禦:配置IDS\IPS、進行源代碼審計、DDOS防禦、惡意代碼檢測

9、 服務器監控

配置運維監控平臺,實時監控服務器的健康狀況。CPU、內存、磁盤、輸入輸出、網絡性能等參數,配置報警規則,觸發報警是立即調用API接口或者第三方回調,發送報警信息到郵箱、微信等。同時,自定監控數據項,檢測Web服務、數據庫服務、後臺程序等運行狀態,連續出現拒絕服務行爲立刻報警,通知管理員。


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