网站大流量高并发访问的处理解决办法
————————目錄————————-
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服務器中獲取該內容,緩存后返回給用戶。這樣當用戶再次訪問相同內容或其他用戶訪問相同內容時,可以直接從緩存中讀取,提高了效率
寫在最后:
集群強調的是任務的同一性,分布式強調的是差異性.但是不是絕對對立的.上海的服務器處理上海的文件上傳事務,北京服務器處理北京文件上傳事務,最終結果都完成文件上傳,從全局考慮是分布式的結構,但是就北京而言,北京那邊有多臺服務器在做同樣的事情那么北京那邊就是集群結構…分布式的每一個節點都可以做集群,但是集群不一定就是分布式的.
轉載于:https://www.cnblogs.com/zhang0807/p/10581074.html
總結
以上是生活随笔為你收集整理的网站大流量高并发访问的处理解决办法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cut和tr命令的联合使用
- 下一篇: perl 用网易发邮件报错 554 DT