網站大流量高併發訪問的處理解決辦法

————————目錄————————-

1、硬件升級
2、服務器集羣、負載均衡、分佈式
3、CDN
4、頁面靜態化
5、緩存技術(Memcache、Redis)
以上爲架構層面
以下爲網站本地項目層面
6、數據庫優化
  1、數據庫分表技術
  2、數據庫讀寫分離
  3、表建立相應的索引
7、禁止盜鏈
8、控制大文件的上傳下載


服務器併發處

1、什麼是服務器併發處理能力

  一臺服務器在單位時間裏能處理的請求越多,服務器的能力越高,也就是服務器併發處理能力越強.HTTP請求通常是對不同資源的請求,也就是請求不同的URL,有的是請求圖片,有的是獲取動態內容,有的是靜態頁面,顯然這些請求所花費的時間各不相同,而這些請求再不同時間的組成比例又是不確定的.

  說個題外話

  假如100個用戶同時向服務器分別進行10個請求,與1個用戶向服務器連續進行1000次請求,對服務器的壓力是一樣嗎?(服務器緩衝區只有1個和100個請求等待處理)

2、提高服務器的併發處理能力

提高CUP併發的處理能力

  1.多進程:多進程的好處不僅在於CPU時間的輪流使用,還在於對CPU計算和I/O操作進行很好的重疊利用.

  2.減少進程切換:進程擁有獨立的內存空間,每個進程都只能共享CPU寄存器。一個進程被掛起的本質是將它在CPU寄存器中的數據拿出來暫存在內存態堆棧着那個,而一個進程恢復工作的本質就是把它的數據重新裝入CPU寄存器,這段裝入和移出的數據稱爲“硬件上下文”,當硬件上下文頻繁裝入和移出時,所消耗的時間是非常明顯的

  3.減少使用不必要的鎖:服務器處理大量併發請求時,多個請求處理任務時存在一些資源搶佔競爭,這時一般採用“鎖”機制來控制資源的佔用,當一個任務佔用資源時,我們鎖住資源,這時其它任務都在等待鎖的釋放.

  4.其他:不寫了.對於老闆來說,買就是了o(* ̄︶ ̄*)o


服務器集羣、負載均衡、分佈式

1、什麼是集羣?

  單機處理到達瓶頸的時候,你就把單機複製幾份,這樣就構成了一個“集羣”.集羣中的每一臺服務器叫做這個集羣的節點,節點構成集羣(廢話…).每個節點提供<相同>的業務或者服務.這樣系統的處理能力就會翻倍.

  那麼問題來了,用戶的請求到底哪一臺服務器去處理執行的?必須有”領導(負載均衡器)”.這個領導的職責就是進行調度所有的請求以達到使得每一臺服務器的負載均衡(是不是很熟悉=.=),不能讓有的人閒着,有的人忙死.

2、集羣結構的優點?

  集羣結構的好處就是系統擴展非常容易.如果隨着你們系統業務的發展,當前的系統又支撐不住了,那麼給這個集羣再增加節點就行了.所有節點處於活動狀態,有一臺down(宕)機,那麼整個的業務還在跑(分佈式的話,emmmm….) 

3、集羣分類:

  Linux集羣主要分成三大類:(高可用集羣,負載均衡集羣,科學計算集羣),其他兩個沒了解,估計原理差不多吧…

4、集羣負載的原理?

DNS輪詢、HTTP重定向、IP欺騙(又稱三角傳輸)    (這三種實現方式都是在用戶通過域名來訪問目標服務器時,由GSLB設備(Global Server Load Balancing)進行智能決策,將用戶引導到一個最佳的服務IP)

智能DNS可以通過多種負載均衡策略來將客戶端需要訪問的域名解析到不同的數據中心不同的線路上,比如通過IP地理信息數據庫解析到最近的線路,或者權衡不同線路的繁忙度解析到空閒的線路等等.

下面介紹一個解析線路的過程:

1、DNS的負載均衡:

用戶訪問某個網站時,需要首先通過域名解析服務(DNS)獲得網站的IP。域名解析通常不是一次性完成的,常常需要查詢若干不同的域名服務器才能找到對應的IP。如下圖所示,用戶首先在本地配置一個本地DNS服務器地址,本地DNS服務器收到DNS請求後若不能解析,會將請求轉發給更高一級的DNS服務器直到找到域名對應的IP或確定域名不存在

普通的訪問流程:

加入GBLS(全局負載均衡設備)訪問流程:

優點:部署容易,成本低。缺點:GSLB只能拿到本地DNS的IP(獲取的地理信息或者其他信息),不能拿到用戶的IP,或者說用戶的指定的本地DNS如果離自己較遠,那麼,GSLB就回錯誤的認爲你在本地DNS處,然後返回錯誤的IP。

2、HTTP重定向負載均衡:

使用基於HTTP重定向方案,首先在DNS中將GSLB設備的IP地址登記爲域名的A記錄(既域名對應的IP)。如上圖所示,用戶首先通過DNS得到GSLB設備的IP地址,此時用戶以爲這就是站點服務器的IP,並向其發送HTTP請求。GSLB設備收到HTTP請求後使用一定策略選擇一個最合適的服務器,然後GSLB設備向用戶發送一個HTTP重定向指令(HTTP302),並附上選出的服務器的IP地址。最後,用戶根據重定向IP訪問站點的服務器。

3、基於IP欺騙的負載均衡:


5、和單機結構,集羣結構的區別:

從單機到集羣,你項目的架構,代碼基本不用動(也會改動,因爲服務器之間的響應也需要你的項目中有對應的模塊或者功能),因爲你是通過服務器的數量和負載均衡來增加併發和大流量問題的.

舉個栗子:電商網站的某一款娃娃熱賣((@^_^@)),負責娃娃的模塊瞬間生熱,多臺服務器也滿足不了大家只買這一款娃娃,然而網站的其他模塊或者部分基本閒着,調度者(負載均衡器)也表示愛莫能助(因爲每一臺服務器的局部發熱嚴重),已經非常平衡的分配了用戶請求,但是請求的是都是娃娃,這一模塊卡頓甚至500(http狀態碼都5開頭了),也不能滿足用戶需求. 明顯是需要把所有的節點服務器中空餘的資源分出一部分來給娃娃模塊.

6、分佈式結構工作機理:

分佈式結構就是將一個完整的系統,按照業務功能,拆分成一個個獨立的子系統,在分佈式結構中,每個子系統就被稱爲“服務”.這些子系統能夠獨立運行在web容器中,它們之間通過RPC方式通.

如果上述的網站採用分佈式結構,你的服務器器們不在做同一件事情,各司其職,娃娃賣的好,那就多用幾臺服務器來負責娃娃相關的模塊,利用率得到提高.

7、分佈式結構的優點:

<1>系統之間的耦合度大大降低,可以獨立開發、獨立部署、獨立測試,系統與系統之間的邊界非常明確,排錯也變得相當容易,開發效率大大提升

<2>系統之間的耦合度降低,從而系統更易於擴展.我們可以針對性地擴展某些服務.假設這個商城要搞一次大促,下單量可能會大大提升,因此我們可以針對性地提升訂單系統、產品系統的節點數量,而對於後臺管理系統、數據分析系統而言,節點數量維持原有水平即可

<3>服務的複用性更高.比如,當我們將用戶系統作爲單獨的服務後,該公司所有的產品都可以使用該系統作爲用戶系統,無需重複開發

CDN

1、什麼是CDN?

內容分發網絡(Content Delivery Network, CDN)其目的是通過在現有的Internet中增加一層新的網絡架構,將網站的內容發佈到最接近用戶的網絡”邊緣”,使用戶可以就近取得所需的內容,解決Internet網絡擁塞狀況,提高用戶訪問網站的響應速度。從技術上全面解決由於網絡帶寬小、用戶訪問量大、網點分佈不均等原因所造成的用戶訪問網站響應速度慢的問題。

2、CDN組成有什麼?

一個CDN網絡主要由以下幾部分組成:內容緩存設備、內容分發管理設備、本地負載均衡交換機、GSLB設備和CDN管理系統,其網絡結構如下圖所示

各部分的工作:

1、內容緩存設備Cache用於緩存內容實體和對緩存內容進行組織和管理。當有用戶訪問該客戶內容時,直接由各緩存服務器響應用戶的請求

2、內容分發管理設備主要負責核心Web服務器內容到CDN網絡內緩存設備的內容推送、刪除、校驗以及內容的管理、同步。

3、GSLB設備則實現CDN全網各緩存節點之間的資源負載均衡,它與各節點的SLB設備保持通信,蒐集各節點緩存設備的健康狀態、性能、負載等,自動將用戶指引到位於其地理區域中的服務器或者引導用戶離開擁擠的網絡和服務器。還可以通過使用多站點的內容和服務來提高容錯性和可用性,防止因本地網或區域網絡中斷、斷電或自然災害而導致的故障。

3、CDN的工作流程

用戶訪問某個站點的內容時,若該站點使用了CDN網絡,則在用戶會在域名解析時獲得CDN網絡GSLB設備的IP地址。GSLB設備根據其預設的選擇策略(如,地理區域、用戶時間等)爲用戶選擇最合適的內容緩存節點,並且使用某種方式(如,基於DNS、基於HTTP重定向、基於IP欺騙的方式等)導引用戶訪問所選的內容緩存節點。用戶繼續向緩存節點發出請求,若緩存中包含請求的內容,則直接返回給用戶,否則從核心Web服務器中獲取該內容,緩存後返回給用戶。這樣當用戶再次訪問相同內容或其他用戶訪問相同內容時,可以直接從緩存中讀取,提高了效率

寫在最後:

集羣強調的是任務的同一性,分佈式強調的是差異性.但是不是絕對對立的.上海的服務器處理上海的文件上傳事務,北京服務器處理北京文件上傳事務,最終結果都完成文件上傳,從全局考慮是分佈式的結構,但是就北京而言,北京那邊有多臺服務器在做同樣的事情那麼北京那邊就是集羣結構…分佈式的每一個節點都可以做集羣,但是集羣不一定就是分佈式的.

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