高性能可靠服務集羣架構

一、  需求分析

        龐大的業務訪問量需要高性能、可靠的server框架支撐。高性能要求server在巨大壓力下仍然快速執行,讀寫返回正確的業務信息,前端用戶體驗良好。可靠性要求server出現宕機、罷工等狀況,可以及時恢復server正常工做狀態,支持業務系統24小時健康執行。使用緩存、讀寫分離技術提升server訪問資源速度。解決大訪問量資源擁堵問題;使用負載均衡與高可用技術提升server響應速度以及server穩定性,解決server處理大用戶量請求問題以及server宕機的及時恢復能力。
       同一時候,需要部署運維監控平臺。監控server上服務程序與資源使用狀況,出現故障及時報警通知運維人員。前端

server系統的安全加固問題也不能忽視。防範於未然。mysql


二、  基礎架構

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


       client經過域名解析直接訪問到負載代理server,後端全部訪問與響應操做對用戶透明。算法

圖片也可以單獨開來,不通過負載均衡代理server,使用單獨的域名進行圖片讀寫。當圖片服務數量上來了,也要配置單獨的負載均衡代理server。組合server集羣。而這裏圖片server與其它服務共用一樣負載,這樣負載壓力大,easy出現故障,追溯問題源頭工做也會變得複雜。因此說。不一樣的服務集羣。最好使用不一樣域名、不一樣負載均衡進行代理。client直接經過負載訪問相關服務。負載直接代理到服務子羣。再也不對服務進行推斷劃分。分工更加明白,出現故障也easy解決。
sql


 


        圖片server也可以不需要存在與其它服務直接訪問關係。他們僅僅需要保存好訪問圖片相應關係。包含圖片所屬ID、路徑、標識等。數據庫


三、  負載代理

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


 



         負載代理server自己也需要支持高可用性能,主從備份機器,主server發生問題時,從server及時頂替繼續執行負載代理服務。Keepalived可以支持高可用性能,更加可以配置Keepalived本身主動執行本身定義檢測腳本,檢測server的心跳,本身主動遞減server的優先級。實現服務本身主動偏移功能。
        如下幾個組合可以完畢上述功能,各個組合側重點有所不一樣。所處的網絡層次也有不一樣。網絡四層主要針對IP地址負載均衡,而網絡七次針對URL,更有支持四層與七層的,側重於TCP/IP協議棧。
        LVS+Keepalived:LVS工做於網絡四層結構。針對IP地址進行網絡數據報轉發,實現負載均衡代理功能。器配置相對複雜。性能穩定,支持超大訪問量的集羣負載。對外提供統一的虛擬IP,有三種工做模式,十種左右的輪詢算法。後端


        Nginx+Keepalived:Nginx工做與網絡七層結構,配置相對簡單。支持URL、文件夾等正則處理更加貼近實際生產需求。可以支持較大訪問量的集羣負載。
        Haproxy+Keepalived:Haproxy工做網絡四層與網絡七層都可以,配置相對簡單。負載均衡速度不亞於Nginx,值得一提的是Haproxy可以進行DDOS攻擊防護,之後應該深刻研究Haproxy。
緩存

 

四、  主站服務

        主站框架是一個Webserver(apache、tomcat、nginx等)集羣。集羣中全部機器執行一樣業務系統。tomcat

經過負載均衡代理與client通信,每一次通信僅僅有一臺機器爲當前client服務。

需要解決session共享問題。不然將會丟失用戶的登陸狀態,在用戶體驗方面有邏輯錯誤。常見的共享session方法有數據庫共享、cookie共享、內存共享。使用最多的是memcache共享方式,memcache把多個server的共享內存拼接成一塊大的內存使用。保存用戶的session信息。Tomcat服務集羣可以簡單配置memcache共享內存,PHP中也可以直接配置設置memcache共享內存。


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

 

五、  接口服務

         接口服務與主站服務功能大同小異,也是Web服務集羣。在負載代理時候,經過七層代理轉發正則匹配域名與文件夾。指向接口服務地址port。

對於劃分更加細節的系統架構,接口服務也是單獨的域名,啓用四層負載代理鏈接集羣,服務功能更加簡單明瞭。


六、  圖片服務

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


         NFS是共享掛載方式,訪問圖片時仍然佔用網絡帶寬,沒有文件備份處理。出現問題不easy恢復。FastDFS是一個分佈式同步文件系統,穩定性好可靠,提供各類語言clientAPI便於開發。

TFS是淘寶正在使用的圖片server文件系統,支持海量圖片讀寫操做。對於大文件存儲能力欠佳。Hadoop是比較火的大數據平臺。高容錯高吞吐量。技術成熟,分佈式文件系統很好的選擇。

 

七、  數據庫與緩存

7.一、數據庫集羣

         假設服務訪問量很是大,數據庫是訪問速度最重要的影響因素。

數據的讀寫操做每每佔用大部分時間。數據表上百萬級別記錄,update操做時間開銷會很是大。而且外面有一條几萬的數據庫操做隊列。那是人不崩潰,機器已經崩潰。首先是CPU佔滿,數據庫裏面堆滿上鎖sql語句,致使前端反應速度跟不上蝸牛。
         對數據庫訪問頻繁數據記錄數量巨大的表,進行分片操做,細化數據表提升sql運行速度。數據庫server使用分佈式架構部署。前面架設負載均衡server,結合數據庫讀寫分離技術。常見數據庫db二、oracle、mysql等,對於分佈式mysql系統,可以使用MyCat中間件管理。




7.二、緩存服務

          緩存可以提升服務的響應速度,處理及時性要求高的數據時,數據首先進入緩存,而後經過消息隊列寫入到數據庫。從數據庫查詢出來的實時數據也可以保存在緩存中,在緩存中直接提供用戶訪問,運行用戶操做數據請求,再把數據返回數據庫。
          Redis是一款出色的緩存server,內存級別的鍵值對數據庫,支持豐富數據結構,數據庫操做命令也是很是齊全。最重要是Redis操做速度很是快。知足緩存server需求。

Redis提供單機的分片集羣,單機硬件性能要求比較高。Redis也可以進行分佈式部署,搭建分佈式緩存服務。




八、  安全加固

        安全配置:隱藏常見系統服務信息、配置用戶權限、開啓防火牆、關閉無用系統服務、按期更新系統
        風險評估:進行滲透測試、漏洞掃描
        安全防護:配置IDS\IPS、進行源碼審計、DDOS防護、惡意代碼檢測


九、  server監控

        配置運維監控平臺。實時監控server的健康情況。CPU、內存、磁盤、輸入輸出、網絡性能等參數,配置報警規則,觸發報警是立刻調用API接口或者第三方回調,發送報警信息到郵箱、微信等。

同一時候。自定監控數據項。檢測Web服務、數據庫服務、後臺程序等執行狀態,連續出現拒絕服務行爲立馬報警,通知管理員。

相關文章
相關標籤/搜索