天天看點

如何解決伺服器網站高并發問題,如何解決網站高并發通路? 3大方案

WEB腳本和靜态資源的分離。一開始,應用程式腳本和靜态資源存儲在一起。當并發達到一定程度時,靜态資源需要存儲在一個特殊的伺服器上。靜态資源主要包括圖檔、視訊、js、css和一些資源檔案等。這些檔案很容易分離,因為它們沒有狀态,是以可以直接存儲在響應伺服器上,通常使用特殊的域名進行通路。通過不同的域名,浏覽器可以直接通路資源伺服器,而無需通路應用伺服器。

2.頁面緩存。頁面緩存就是緩存應用生成的頁面,這樣就不需要每次都生成頁面,節省了大量的CPU資源。如果将緩存的頁面放入記憶體,速度會更快。如果使用Nginx伺服器,可以使用自己的緩存功能,當然也可以使用專門的Squid伺服器。頁面緩存的預設失效機制是根據緩存時間來處理的,但是修改資料後可以手動使對應的緩存失效。頁面緩存主要用于資料很少變化的頁面,但在很多頁面中,大部分資料很少變化,少數資料變化非常頻繁。例如,顯示文章的頁面通常可以是靜态的。但如果文章後面有“top”和“step”功能,顯示的回複數量多,資料變化頻繁,會影響靜态。這個問題可以通過建立一個靜态頁面,然後使用Ajax讀取和修改響應資料來解決,這樣可以一舉兩得,還可以使用頁面緩存,實時顯示一些變化頻率較高的資料。

事實上,衆所周知,效率最高、成本最低的是純靜态html頁面,是以我們盡最大努力讓我們網站上的頁面使用靜态頁面。這個最簡單的方法其實是最有效的。但是對于内容量大、更新頻繁的網站,我們無法逐個手動實作,于是就出現了我們通用的資訊釋出系統CMS。對于一個大型網站來說,新聞管道甚至其他管道都是通過資訊釋出系統來管理和實作的。資訊釋出系統可以實作最簡單的資訊錄入和自動生成靜态頁面,還可以具有管道管理、權限管理和自動抓取功能。對于一個大型網站來說,它有一套高效率。除了門戶網站和資訊釋出網站之外,對于互動要求高的基于社群的網站,盡可能的靜态化也是提升性能的必要手段。實時統計社群中的文章和文章,有更新時重新統計,也是廣泛使用的政策,比如Mop的大雜燴,網易社群等。同時,html統計化也是一些緩存政策使用的手段。對于經常使用資料庫查詢但系統中内容更新很少的應用,可以考慮使用html統計化,比如論壇中論壇的公共設定資訊,目前主流論壇可以背景管理,資料庫存儲。其實這些資訊有很大一部分是前台程式調用的,隻是更新頻率很小。是以,可以考慮在背景靜态更新這些内容,進而避免大量的資料庫通路請求。

3.叢集和分布。

叢集是指每個伺服器都有相同的功能,在處理請求時可以調用哪個伺服器,主要起到分流的作用。分布式就是把不同的服務放在不同的伺服器上,可能需要多個伺服器來處理一個請求,可以提高一個請求的處理速度,叢集和分布式也可以同時使用。叢集有兩種方式:一種是在靜态資源叢集中。另一個是應用叢集。靜态資源聚類相對簡單。會話同步是應用叢集處理的核心問題。會話同步有兩種處理方法:一種是在會話改變後自動同步到其他伺服器,另一種是使用程式統一管理會話。群集中的所有伺服器都使用同一個會話。Tomcat預設是第一種方式,簡單配置即可實作。第二種方式是使用一個特殊的伺服器安裝Mencached等高效的緩存程式統一管理Session,然後重寫Request并覆寫應用程式中的getSession方法,獲得伺服器中的會話。叢集的另一個核心問題是負載平衡,即接收請求并将其配置設定給該伺服器進行處理。這個問題可以通過軟體處理或者特殊硬體(比如F5)來解決。