网站大流量高并发访问的处理解决办法
————————目錄————————-
1、硬件升級
2、服務器集群、負載均衡、分布式
3、CDN
4、頁面靜態(tài)化
5、緩存技術(Memcache、Redis)
以上為架構層面
以下為網(wǎng)站本地項目層面
6、數(shù)據(jù)庫優(yōu)化
? 1、數(shù)據(jù)庫分表技術
? 2、數(shù)據(jù)庫讀寫分離
? 3、表建立相應的索引
7、禁止盜鏈
8、控制大文件的上傳下載
服務器并發(fā)處理
1、什么是服務器并發(fā)處理能力
? 一臺服務器在單位時間里能處理的請求越多,服務器的能力越高,也就是服務器并發(fā)處理能力越強.HTTP請求通常是對不同資源的請求,也就是請求不同的URL,有的是請求圖片,有的是獲取動態(tài)內(nèi)容,有的是靜態(tài)頁面,顯然這些請求所花費的時間各不相同,而這些請求再不同時間的組成比例又是不確定的.
? 說個題外話
? 假如100個用戶同時向服務器分別進行10個請求,與1個用戶向服務器連續(xù)進行1000次請求,對服務器的壓力是一樣嗎?(服務器緩沖區(qū)只有1個和100個請求等待處理)
2、提高服務器的并發(fā)處理能力
提高CUP并發(fā)的處理能力
? 1.多進程:多進程的好處不僅在于CPU時間的輪流使用,還在于對CPU計算和I/O操作進行很好的重疊利用.
??2.減少進程切換:進程擁有獨立的內(nèi)存空間,每個進程都只能共享CPU寄存器。一個進程被掛起的本質(zhì)是將它在CPU寄存器中的數(shù)據(jù)拿出來暫存在內(nèi)存態(tài)堆棧著那個,而一個進程恢復工作的本質(zhì)就是把它的數(shù)據(jù)重新裝入CPU寄存器,這段裝入和移出的數(shù)據(jù)稱為“硬件上下文”,當硬件上下文頻繁裝入和移出時,所消耗的時間是非常明顯的
? 3.減少使用不必要的鎖:服務器處理大量并發(fā)請求時,多個請求處理任務時存在一些資源搶占競爭,這時一般采用“鎖”機制來控制資源的占用,當一個任務占用資源時,我們鎖住資源,這時其它任務都在等待鎖的釋放.
? 4.其他:不寫了.對于老板來說,買就是了o(* ̄︶ ̄*)o
服務器集群、負載均衡、分布式
1、什么是集群?
? 單機處理到達瓶頸的時候,你就把單機復制幾份,這樣就構成了一個“集群”.集群中的每一臺服務器叫做這個集群的節(jié)點,節(jié)點構成集群(廢話…).每個節(jié)點提供<相同>的業(yè)務或者服務.這樣系統(tǒng)的處理能力就會翻倍.
??那么問題來了,用戶的請求到底哪一臺服務器去處理執(zhí)行的?必須有”領導(負載均衡器)”.這個領導的職責就是進行調(diào)度所有的請求以達到使得每一臺服務器的負載均衡(是不是很熟悉=.=),不能讓有的人閑著,有的人忙死.
2、集群結構的優(yōu)點?
? 集群結構的好處就是系統(tǒng)擴展非常容易.如果隨著你們系統(tǒng)業(yè)務的發(fā)展,當前的系統(tǒng)又支撐不住了,那么給這個集群再增加節(jié)點就行了.所有節(jié)點處于活動狀態(tài),有一臺down(宕)機,那么整個的業(yè)務還在跑(分布式的話,emmmm….)?
3、集群分類:
? Linux集群主要分成三大類:(高可用集群,負載均衡集群,科學計算集群),其他兩個沒了解,估計原理差不多吧…
4、集群負載的原理?
DNS輪詢、HTTP重定向、IP欺騙(又稱三角傳輸)????(這三種實現(xiàn)方式都是在用戶通過域名來訪問目標服務器時,由GSLB設備(Global Server Load Balancing)進行智能決策,將用戶引導到一個最佳的服務IP)
智能DNS可以通過多種負載均衡策略來將客戶端需要訪問的域名解析到不同的數(shù)據(jù)中心不同的線路上,比如通過IP地理信息數(shù)據(jù)庫解析到最近的線路,或者權衡不同線路的繁忙度解析到空閑的線路等等.
下面介紹一個解析線路的過程:
1、DNS的負載均衡:
用戶訪問某個網(wǎng)站時,需要首先通過域名解析服務(DNS)獲得網(wǎng)站的IP。域名解析通常不是一次性完成的,常常需要查詢?nèi)舾刹煌挠蛎掌鞑拍苷业綄腎P。如下圖所示,用戶首先在本地配置一個本地DNS服務器地址,本地DNS服務器收到DNS請求后若不能解析,會將請求轉發(fā)給更高一級的DNS服務器直到找到域名對應的IP或確定域名不存在
?
普通的訪問流程:
?
加入GBLS(全局負載均衡設備)訪問流程:
?
優(yōu)點:部署容易,成本低。缺點:GSLB只能拿到本地DNS的IP(獲取的地理信息或者其他信息),不能拿到用戶的IP,或者說用戶的指定的本地DNS如果離自己較遠,那么,GSLB就回錯誤的認為你在本地DNS處,然后返回錯誤的IP。
2、HTTP重定向負載均衡:
使用基于HTTP重定向方案,首先在DNS中將GSLB設備的IP地址登記為域名的A記錄(既域名對應的IP)。如上圖所示,用戶首先通過DNS得到GSLB設備的IP地址,此時用戶以為這就是站點服務器的IP,并向其發(fā)送HTTP請求。GSLB設備收到HTTP請求后使用一定策略選擇一個最合適的服務器,然后GSLB設備向用戶發(fā)送一個HTTP重定向指令(HTTP302),并附上選出的服務器的IP地址。最后,用戶根據(jù)重定向IP訪問站點的服務器。
?
3、基于IP欺騙的負載均衡:
?
5、和單機結構,集群結構的區(qū)別:
從單機到集群,你項目的架構,代碼基本不用動(也會改動,因為服務器之間的響應也需要你的項目中有對應的模塊或者功能),因為你是通過服務器的數(shù)量和負載均衡來增加并發(fā)和大流量問題的.
舉個栗子:電商網(wǎng)站的某一款娃娃熱賣((@^_^@)),負責娃娃的模塊瞬間生熱,多臺服務器也滿足不了大家只買這一款娃娃,然而網(wǎng)站的其他模塊或者部分基本閑著,調(diào)度者(負載均衡器)也表示愛莫能助(因為每一臺服務器的局部發(fā)熱嚴重),已經(jīng)非常平衡的分配了用戶請求,但是請求的是都是娃娃,這一模塊卡頓甚至500(http狀態(tài)碼都5開頭了),也不能滿足用戶需求. 明顯是需要把所有的節(jié)點服務器中空余的資源分出一部分來給娃娃模塊.
6、分布式結構工作機理:
分布式結構就是將一個完整的系統(tǒng),按照業(yè)務功能,拆分成一個個獨立的子系統(tǒng),在分布式結構中,每個子系統(tǒng)就被稱為“服務”.這些子系統(tǒng)能夠獨立運行在web容器中,它們之間通過RPC方式通.
如果上述的網(wǎng)站采用分布式結構,你的服務器器們不在做同一件事情,各司其職,娃娃賣的好,那就多用幾臺服務器來負責娃娃相關的模塊,利用率得到提高.
?
7、分布式結構的優(yōu)點:
<1>系統(tǒng)之間的耦合度大大降低,可以獨立開發(fā)、獨立部署、獨立測試,系統(tǒng)與系統(tǒng)之間的邊界非常明確,排錯也變得相當容易,開發(fā)效率大大提升
<2>系統(tǒng)之間的耦合度降低,從而系統(tǒng)更易于擴展.我們可以針對性地擴展某些服務.假設這個商城要搞一次大促,下單量可能會大大提升,因此我們可以針對性地提升訂單系統(tǒng)、產(chǎn)品系統(tǒng)的節(jié)點數(shù)量,而對于后臺管理系統(tǒng)、數(shù)據(jù)分析系統(tǒng)而言,節(jié)點數(shù)量維持原有水平即可
<3>服務的復用性更高.比如,當我們將用戶系統(tǒng)作為單獨的服務后,該公司所有的產(chǎn)品都可以使用該系統(tǒng)作為用戶系統(tǒng),無需重復開發(fā)
CDN
1、什么是CDN?
內(nèi)容分發(fā)網(wǎng)絡(Content Delivery Network, CDN)其目的是通過在現(xiàn)有的Internet中增加一層新的網(wǎng)絡架構,將網(wǎng)站的內(nèi)容發(fā)布到最接近用戶的網(wǎng)絡”邊緣”,使用戶可以就近取得所需的內(nèi)容,解決Internet網(wǎng)絡擁塞狀況,提高用戶訪問網(wǎng)站的響應速度。從技術上全面解決由于網(wǎng)絡帶寬小、用戶訪問量大、網(wǎng)點分布不均等原因所造成的用戶訪問網(wǎng)站響應速度慢的問題。
2、CDN組成有什么?
一個CDN網(wǎng)絡主要由以下幾部分組成:內(nèi)容緩存設備、內(nèi)容分發(fā)管理設備、本地負載均衡交換機、GSLB設備和CDN管理系統(tǒng),其網(wǎng)絡結構如下圖所示
?
各部分的工作:
1、內(nèi)容緩存設備Cache用于緩存內(nèi)容實體和對緩存內(nèi)容進行組織和管理。當有用戶訪問該客戶內(nèi)容時,直接由各緩存服務器響應用戶的請求
2、內(nèi)容分發(fā)管理設備主要負責核心Web服務器內(nèi)容到CDN網(wǎng)絡內(nèi)緩存設備的內(nèi)容推送、刪除、校驗以及內(nèi)容的管理、同步。
3、GSLB設備則實現(xiàn)CDN全網(wǎng)各緩存節(jié)點之間的資源負載均衡,它與各節(jié)點的SLB設備保持通信,搜集各節(jié)點緩存設備的健康狀態(tài)、性能、負載等,自動將用戶指引到位于其地理區(qū)域中的服務器或者引導用戶離開擁擠的網(wǎng)絡和服務器。還可以通過使用多站點的內(nèi)容和服務來提高容錯性和可用性,防止因本地網(wǎng)或區(qū)域網(wǎng)絡中斷、斷電或自然災害而導致的故障。
3、CDN的工作流程
用戶訪問某個站點的內(nèi)容時,若該站點使用了CDN網(wǎng)絡,則在用戶會在域名解析時獲得CDN網(wǎng)絡GSLB設備的IP地址。GSLB設備根據(jù)其預設的選擇策略(如,地理區(qū)域、用戶時間等)為用戶選擇最合適的內(nèi)容緩存節(jié)點,并且使用某種方式(如,基于DNS、基于HTTP重定向、基于IP欺騙的方式等)導引用戶訪問所選的內(nèi)容緩存節(jié)點。用戶繼續(xù)向緩存節(jié)點發(fā)出請求,若緩存中包含請求的內(nèi)容,則直接返回給用戶,否則從核心Web服務器中獲取該內(nèi)容,緩存后返回給用戶。這樣當用戶再次訪問相同內(nèi)容或其他用戶訪問相同內(nèi)容時,可以直接從緩存中讀取,提高了效率
寫在最后:
集群強調(diào)的是任務的同一性,分布式強調(diào)的是差異性.但是不是絕對對立的.上海的服務器處理上海的文件上傳事務,北京服務器處理北京文件上傳事務,最終結果都完成文件上傳,從全局考慮是分布式的結構,但是就北京而言,北京那邊有多臺服務器在做同樣的事情那么北京那邊就是集群結構…分布式的每一個節(jié)點都可以做集群,但是集群不一定就是分布式的.
轉載于:https://www.cnblogs.com/zhang0807/p/10581074.html
總結
以上是生活随笔為你收集整理的网站大流量高并发访问的处理解决办法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cut和tr命令的联合使用
- 下一篇: perl 用网易发邮件报错 554 DT