很多平台一旦做大了,平台的流量就會陡增,同時并發通路的流量也會暴增,原本規劃的硬體配置就無法滿足當下的流量問題。
那麼如何處理好高并發的流量問題呢?
小編将這些分為2個方面:架構層面和網站本地項目層面。
一、架構層面
1、硬體更新
假設一台伺服器最多能支援每天10萬獨立IP,如果通路量增大的話,那麼必須更新這台伺服器的配置才能解決問題,否則怎麼優化都不可能徹底解決性能問題。
這對于企業使用者來說不是問題,買就是了。
為了避免采購浪費,建議先對伺服器做一下壓力測試,看看到底能支援多少通路量。
詳細參考《 怎麼做伺服器壓力測試? 》
建議使用:
阿裡雲伺服器ECS,阿裡雲的口碑不用說了,最主要的是可以彈性擴充更新。
阿裡雲哪個節點伺服器好?ping一下看看: https://ping.gaomeluo.com/aliyun/
2、負載均衡
它是對多台雲伺服器進行流量分發的負載均衡服務,讓整個伺服器群來處理網站的請求。負載均衡支援億級連接配接和千萬級并發,可輕松應對大流量通路,滿足業務需求。
一般有錢的公司,可以購買專門負責負載均衡的硬體,效果肯定會很好。
但是對于大部分公司,會選擇廉價有效的方法擴充整個系統的架構,來增加伺服器的吞吐量和處理能力,以及承載能力。通常會選擇相對成熟的成品架構,比如:
阿裡雲的負載均衡SLB詳細可參考《 阿裡雲負載均衡SLB怎麼用
3、伺服器叢集
伺服器叢集就是指将很多伺服器集中起來一起進行同一種服務,在用戶端看來就像是隻有一個伺服器。叢集可以利用多個計算機進行并行計算進而獲得很高的計算速度,也可以用多個計算機做備份,進而使得任何一個機器壞了整個系統還是能正常運作。
如果你的企業、平台夠大,那麼完全可以自己來搞叢集。但是對于一遍企業來講,這種伺服器架構耗錢、耗時、耗力。好在現在雲服務廠商都提供了叢集伺服器,比較有名的就是
阿裡雲叢集。這也給企業省去不少人力、時間成本。
如何搭建阿裡雲叢集伺服器
4、分布式結構
分布式結構就是将一個完整的系統,按照業務功能,拆分成一個個獨立的子系統,在分布式結構中,每個子系統就被稱為“服務”.這些子系統能夠獨立運作在web容器中,它們之間通過RPC方式通.
好處就是系統之間的耦合度大大降低,可以獨立開發、獨立部署、獨立測試,系統與系統之間的邊界非常明确,排錯也變得相當容易,開發效率大大提升。
提示一下:
負載均衡:
是一種優化手段,目的是為了讓叢集中的每台機器的負載保持均衡,這樣就不會出現叢集中某台機器挂了的情況;
叢集:
多台機器做相同的業務,對外如一台機器在做事情一樣,叢集中任意一台機器挂了沒有影響,因為其他機器還在工作;
分布式:
一個業務在不同的實體點上做,比如web伺服器、應用伺服器、資料庫伺服器,這三個節點分開部署在不同的機器上,共同完成一個業務;分布式的特點是,每個節點都不能挂,否則這個業務就不能完成了;當然,我們可以給分布式中的每個節點都做叢集處理,這樣可以降低分布式系統的單節點故障;
是以,針對自己業務量大小,對上述的負載均衡、伺服器叢集、分布式結構,任意選用方案。
二、網站本地項目層面
1、頁面靜态化
前台實作完全的靜态化最好,可以完全不用通路資料庫。這樣伺服器的壓力就減輕了不少。
這點我們可以借鑒一些比較成熟的架構方案,比如說dedecms、帝國cms、wordpress等,他們都可以對已産生的網頁生成純靜态頁面,每次更新内容,會再次生成純靜态頁面。
另外還建議,頁面中的圖文進行動靜分離處理,把頁面用到的圖檔放到專用存儲空間(比較常見的有
阿裡雲OSS),減少網站伺服器的壓力,另外也建議動靜分離的那一部分也做一下CDN加速。讓圖檔等相對較大的資源才CDN節點擷取,提高網站打開速度。
【圖文】wordpress站如何用阿裡雲OSS做動靜分離?
2、緩存技術(Memcache、Redis等)
緩存技術就是另一個解決方案,就是将動态資料存儲到緩存檔案中,動态網頁直接調用 這些檔案,而不必再通路資料庫。
簡單羅列一下redis和memcache的差別
- Redis和Memcache都是将資料存放在記憶體中,都是記憶體資料庫。不過memcache還可用于緩存其他東西,例如圖檔、視訊等等;
- Redis不僅僅支援簡單的k/v類型的資料,同時還提供list,set,hash等資料結構的存儲;
- 虛拟記憶體--Redis當實體記憶體用完時,可以将一些很久沒用到的value 交換到磁盤;
- 過期政策--memcache在set時就指定,例如set key1 0 0 8,即永不過期。Redis可以通過例如expire 設定,例如expire name 10;
- 分布式--設定memcache叢集,利用magent做一主多從;redis可以做一主多從。都可以一主一從;
- 存儲資料安全--memcache挂掉後,資料沒了;redis可以定期儲存到磁盤(持久化);
- 災難恢複--memcache挂掉後,資料不可恢複; redis資料丢失後可以通過aof恢複;
- Redis支援資料的備份,即master-slave模式的資料備份;
- 應用場景不一樣:Redis出來作為NoSQL資料庫使用外,還能用做消息隊列、資料堆棧和資料緩存等;Memcached适合于緩存SQL語句、資料集、使用者臨時性資料、延遲查詢資料和session等。
參考一下開源案例《 【圖文】wordpress如何開啟Memcached緩存來加速網站?
3、資料庫優化
資料庫的優化總結為如下三點
1、資料庫分表技術
當一張的資料達到幾百萬時,你查詢一次所花的時間會變多,如果有聯合查詢的話,很有可能會死在那兒了。分表的目的就在于此,減小資料庫的負擔,縮短查詢時間。
可參考《 mysql資料庫如何分表
2、資料庫讀寫分離
資料庫讀寫分離的基本原理是讓主資料庫處理事務性增、改、删操作(INSERT、UPDATE、DELETE),而從資料庫處理SELECT查詢操作。
如何實作資料庫讀寫分離
3、表建立相應的索引
使用索引可快速通路資料庫表中的特定資訊。
mysql建表并建立索引
對于一些成熟的資料庫産品,已經無需自己做分表,不需要自己做讀寫分離,隻要主執行個體下有隻讀執行個體以及開通讀寫分離功能即可。
比如說 阿裡雲的RDS 詳情參考《 RDS是否需要自己做分表、讀寫分離?
4、CDN
将源站内容分發至最接近使用者的節點,使使用者可就近取得所需内容,提高使用者通路的響應速度和成功率。解決因分布、帶寬、伺服器性能帶來的通路延遲問題,适用于站點加速、點播、直播等場景。
使用CDN的好處不僅僅是緩存網站靜态資源,還可以起到隐藏源IP的作用,這樣還可以應對一些小的流量攻擊,避免源IP洩露被人攻擊。
通常用的CDN就那麼幾家,這裡以阿裡雲CDN為例:
阿裡雲CDN。
阿裡雲CDN怎麼使用
5、禁止盜鍊
外部網站的圖檔或者檔案盜鍊往往會帶來大量的負載壓力,是以應該嚴格限制外部對于自身的圖檔或者檔案盜鍊。
這個操作相對就簡單了很多,如果你使用了阿裡雲的CDN(對象存儲OSS),這些CDN/對象存儲OSS的控制台裡可以一鍵設定防盜鍊。
詳細可參考官方教程:
《
阿裡雲CDN怎樣設定防盜鍊 阿裡雲OSS怎樣設定防盜鍊6、控制大檔案的上傳下載下傳
大檔案的下載下傳會占用很大的流量,并且對于非SCSI硬碟來說,大量檔案下載下傳會消耗 CPU,使得網站響應能力下降。是以,盡量不要提供超過2M的大檔案下載下傳,如果需要提供,建議将大檔案放在專門的存儲空間上(對象存儲OSS/COS)。
這個方法詳細參考:
如何限制windows系統伺服器上傳檔案的大小 如何限制Linux系統伺服器上傳檔案的大小友情提示:
在産品的選用上,盡量都選用同一家的産品(要麼都用阿裡雲家的,要麼都用其他雲家的),部分産品也盡量選同一區域。選同一家是為了,一來是友善管理,二來部分産品不适合兩家接入使用。選同一區域的,是為了同一區域可以内網互聯,還能節省一些費用。
(原文:
流量大的網站 如何處理高并發流量問題)