如何處理項目中的高併發、大數據

1.HTML靜態化

如果網站的請求量過大,我們可以將頁面靜態化提供訪問來緩解服務器壓力,能夠緩解服務器壓力加大以及降低數據庫數據的頻繁交換。適合於某些訪問了過大,但是內容不經常改變的頁面,如首頁、新聞頁等

2.文件服務器

顧名思義,文件服務器就是將文件系統單獨拿出來提供專注於處理文件的存儲訪問系統,甚至於對個文件服務器。因爲對於圖片這種資源的訪問存儲是web服務最耗資源的地方,將文件服務器單獨部署既可以將壓力轉移,交給專門的系統處理,又可以分擔風險,如果圖片服務器出現問題,那麼主服務器能夠保證正常,頂多就是文件請求不到。

3.負載均衡

負載均衡將是大型網站解決高負荷訪問和大量併發請求採用的終極解決辦法。

負載均衡建立在現有網絡結構之上,它提供了一種廉價有效透明的方法擴展網絡設備和服務器的帶寬、增加吞吐量、加強網絡數據處理能力、提高網絡的靈活性和可用性。其原理就是將大量工作分攤到多個操作單元上進行執行,例如Web服務器、FTP服務器、企業關鍵應用服務器和其它關鍵任務服務器等,從而共同完成工作任務。

4.反向代理

客戶端直接訪問的服務器並不是直接提供服務的服務器,它從別的服務器獲取資源,然後將結果返回給用戶。

代理服務器和反向代理服務器:

代理服務器是代我們訪獲取資源,然後將結果返回。例如,訪問外網的代理服務器。反向代理服務器是我們正常訪問一臺服務器的時候,服務器自己調用了別的服務器。

反向代理就是說,用戶的請求請求到負載均衡的設備上,負載均衡設備再講請求分發到空閒的應用服務器上處理,處理完成之後再通過負載均衡設備返回給用戶,這樣對於用戶來說,後來的分發是不可見的。

反向代理的實現

1)需要有一個負載均衡設備來分發用戶請求,將用戶請求分發到空閒的服務器上

2)服務器返回自己的服務到負載均衡設備

3)負載均衡將服務器的服務返回用戶

代理服務器我們主動使用,是爲我們服務的,不需要有自己的域名;反向代理是服務器自己使用的,我們並不知道,有自己的域名。

5.動靜分離

所謂動靜分離就是將網站靜態資源(HTML,JavaScript,CSS,img等文件)與後臺應用分開部署,提高用戶訪問靜態代碼的速度,降低對後臺應用訪問。上面的文件服務器就是動靜分離的一部分。

動靜分離的一種做法是將靜態資源部署在nginx上,後臺項目部署到應用服務器上,根據一定規則靜態資源的請求全部請求nginx服務器,達到動靜分離的目標。

靜態資源部署至CDN上

我們的方案是直接將靜態資源全部存放在CDN服務器上。因爲之前項目中的JavaScript,CSS以及img文件都是存放在CDN服務器上,將HTML文件一起存放到CDN上之後,可以將靜態資源統一放置在一種服務器上,便於前端進行維護;而且用戶在訪問靜態資源時,可以很好利用CDN的優點——CDN系統能夠實時地根據網絡流量和各節點的連接、負載狀況以及到用戶的距離和響應時間等綜合信息將用戶的請求重新導向離用戶最近的服務節點上。

後端API提供數據

後端應用提供API,根據前端的請求進行處理,並將處理結果通過JSON格式返回至前端。目前應用主要採用Java平臺開發,因此應用服務器主要是Tomcat服務器,現在也開始有部分應用採用 node進行開發,應用服務器也開始使用node服務器。

前後端域名

動靜分離因爲靜態資源和應用服務分別部署在不同的服務器上,因此會面臨域名策略的選擇。

相同域名

採用相同域名下,用戶請求api時可以避免跨域所帶來的問題,相對開發更爲快速,工作量也相對小一些。

不同域名

前後端採用不同域名時,需要前後端開發時兼容跨域請求的情況,開發量相對上一種會稍多一些。解決跨域方式最常用的方式就是採用JSONP,還有一種解決方式使用CORS(HTTP訪問控制)允許某些域名下的跨域請求。

目前在我們的項目中JSONP方式更多,CORS因爲需要瀏覽器支持,因此只會在APP內嵌HTML5,且需要POST方式時中使用。

採用不同域名的方式優點也是非常明顯的,不同域名採用兩個域名服務器,不同的域名服務器根據請求的不同採用不同的負載均衡策略;而且不同域名也可以郵箱方式前端攜帶過多的Cookie。

6.數據庫sql優化

對於相同功能的sql,如果數據庫的sql沒有做過優化和做過優化的sql比較起來,其處理能力完全是天壤之別,其差距可以有幾倍甚至幾十上百上千的速度差距、資源消耗差距。所以對於一個優秀的web應用,sql優化是必須做的。

7.數據緩存

對於緩存我想大家都不陌生,緩存可以讓我們將一些有時效性的、經常訪問的、不便於存儲數據庫等的數據,我們可以將數據存儲在專門的用於緩存的應用程序中,如果有必要,還可以將緩存應用服務器單獨部署,如果數據量過大,我們還可以組成緩存服務器集羣,比如:cache、redis等都是比較專注於緩存數據的。

只所以使用緩存,是因爲一是減少數據庫的訪問壓力,二是一般專注於緩存的應用對於數據的讀寫較於數據庫都是非常快的

8.數據庫讀寫分離

讀寫分離是爲了提供程序的性能,隨着用戶的增加,數據庫的壓力也會越來越大,對數據庫或者SQL的基本優化可能達不到最終的效果,讀寫分離簡單的說是把對數據庫讀和寫的操作分開對應不同的數據庫服務器,這樣能有效地減輕數據庫壓力,也能減輕io壓力。主數據庫提供寫操作,從數據庫提供讀操作。主數據庫提供寫操作,從數據庫提 供讀操作,其實在很多系統中,主要是讀的操作。當主數據庫進行寫操作時,數據要同步到從的數據庫,這樣纔能有效保證數據庫完整性。Quest SharePlex就是比較牛的同步數據工具,聽說比oracle本身的流複製還好,mysql也有自己的同步數據技術。mysql只要是通過二進制日誌來複制數據。通過日誌在從數據庫重複主數據庫的操作達到複製數據目的。這個複製比較好的就是通過異步方法,把數據同步到從數據庫。

當然同樣的因爲數據的複製同步需要時間,對於一些實時性要求非常高的邏輯可能會有問題。

9.數據庫活躍數據分離

所謂的活躍數據就是經常用到的數據,比如經常活躍的用戶數據等。不活躍數據,比如好長時間不等路的用戶數據,還有幾個月前的數據等等

更多優質文章請關注我的微信公衆號【java後端技術精選】,回覆“1024”和“面試”可以領取優質的視頻學習資源

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