阿里雲服務器 如何處理網站高並發流量問題?(含教程)


很多平台一旦做大了,平台的流量就會陡增,同時並發訪問的流量也會暴增,原本規划的硬件配置就無法滿足當下的流量問題。

那么如何處理好高並發的流量問題呢?

小編將這些分為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的區別

  1. Redis和Memcache都是將數據存放在內存中,都是內存數據庫。不過memcache還可用於緩存其他東西,例如圖片、視頻等等;
  2. Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,hash等數據結構的存儲;
  3. 虛擬內存--Redis當物理內存用完時,可以將一些很久沒用到的value 交換到磁盤;
  4. 過期策略--memcache在set時就指定,例如set key1 0 0 8,即永不過期。Redis可以通過例如expire 設定,例如expire name 10;
  5. 分布式--設定memcache集群,利用magent做一主多從;redis可以做一主多從。都可以一主一從;
  6. 存儲數據安全--memcache掛掉后,數據沒了;redis可以定期保存到磁盤(持久化);
  7. 災難恢復--memcache掛掉后,數據不可恢復; redis數據丟失后可以通過aof恢復;
  8. Redis支持數據的備份,即master-slave模式的數據備份;
  9. 應用場景不一樣: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系統服務器上傳文件的大小

友情提示:

在產品的選用上,盡量都選用同一家的產品(要么都用阿里雲家的,要么都用其他雲家的),部分產品也盡量選同一區域。選同一家是為了,一來是方便管理,二來部分產品不適合兩家接入使用。選同一區域的,是為了同一區域可以內網互聯,還能節省一些費用。
(原文:流量大的網站 如何處理高並發流量問題

原文 阿里雲服務器 如何處理網站高並發流量問題?(含教程)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM