搜尋
首頁後端開發php教程PHP如何解決網站大流量與高並發

首先,確認伺服器硬體是否足以支援目前的流量。
普通的P4伺服器一般最多能支援每天10萬獨立IP,如果訪問量比這個還要大, 那麼必須先配置一台更高效能的專用伺服器才能解決問題,否則怎麼優化都不可能徹底解決效能問題。 

其次,最佳化資料庫存取。 前台實現完全的靜態化當然最好,可以完全不用存取資料庫,不過對於頻繁更新的網站, 靜態化往往無法滿足某些功能。 
快取技術就是另一個解決方案,就是將動態資料儲存到快取檔案中,動態網頁直接呼叫這些文件,而不必再存取資料庫,WordPress和Z-Blog都大量使用這種快取技術。 

如果確實無法避免對資料庫的訪問,那麼可以嘗試優化資料庫的查詢SQL.避免使用 Select * from這樣的語句,每次查詢只返回自己需要的結果,避免短時間內的大量SQL查詢。 

第三,禁止外在的盜鏈。
外部網站的圖片或文件盜鏈往往會帶來大量的負載壓力,因此應該嚴格限制外部對於自身的圖片或文件盜鏈,好在目前可以簡單地透過refer來控制盜鏈,Apache自己就可以通過配置來禁止盜鏈,IIS也有一些第三方的ISAPI可以實現同樣的功能。當然,偽造refer也可以透過程式碼來實現盜鏈,不過目前蓄意偽造refer盜鏈的還不多,可以先不去考慮,或者使用非技術手段來解決,例如在圖片上增加水印。 

第四,控制大檔案的下載。 
大檔案的下載會佔用很大的流量,對於非SCSI硬碟來說,大量檔案下載會消耗CPU,使得網站回應能力下降。因此,盡量不要提供超過2M的大檔案下載,如果需要提供,建議將大檔案放在另一台伺服器上。 

第五,使用不同主機分流主要流量 
將檔案放在不同的主機上,提供不同的鏡像供使用者下載。例如如果覺得RSS檔案佔用流量大,那麼使用FeedBurner或FeedSky等服務將RSS輸出放在其他主機上,這樣別人存取的流量壓力就大多集中在FeedBurner的主機上,RSS就不佔用太多資源了。 

第六,使用流量分析統計軟體。 
在網站上安裝一個流量分析統計軟體,可以即時知道哪些地方耗費了大量流量,哪些頁面需要再進行優化,因此,解決流量問題還需要進行精確的統計分析才可以。例如:Google Analytics(Google分析)。

 

高並發和高負載的限制條件:硬體、部署、作業系統、Web 伺服器、PHP、MySQL、測試

部署:伺服器分離、資料庫叢集和庫表雜湊、鏡像、負載平衡

負載平衡分類:  1)、DNS輪循  2)代理伺服器負載平衡  3)位址轉換閘道負載平衡  4)NAT負載平衡  5)反向代理負載平衡  6)混合型負載平衡

部署方案1:

適用範圍:靜態內容為主體的網站和應用系統;對系統安全需求較高的網站和應用系統。

Main Server:主伺服器

承載程式的主體運作壓力,處理網站或應用系統中的動態請求;

將靜態頁面推送至多個發布伺服器;

將附件檔案推送至檔案;

要求較高,以靜態為主的網站,可將伺服器置於內網屏蔽外網的存取。

DB Server:資料庫伺服器

承載資料庫讀取和寫入壓力;

只與主伺服器進行資料量交換,並屏蔽外網存取。

File/Video Server:檔案/視訊伺服器

承載系統中佔用系統資源和頻寬資源較大的資料流;

作為大附件的儲存和讀取和寫入倉庫;

作為視訊伺服器將具備視訊自動處理能力。

發布伺服器群組:

只負責靜態頁面的發布,承載絕大多數的Web請求;

透過Nginx進行負載平衡部署。

 部署方案2:

適用範圍:以動態互動內容為主體的網站或應用系統;負載壓力較大,且預算較充足的網站或應用系統;

Web伺服器群組:

Web服務無主從關係,屬平行冗餘設計;

透過前端負載平衡設備或Nginx反向代理實現負載平衡;

劃分專用檔案伺服器/視訊伺服器有效分離輕/重匯流排;

每台Web伺服器可透過DEC可實現連接所有資料庫,同時劃分主從。

資料庫伺服器群組:

相對均衡的承載資料庫讀寫壓力;

透過資料庫實體檔案的對應實現多資料庫的資料同步。

共享磁碟/磁碟陣列

將用於資料實體檔案的統一讀寫

用於大型附件的儲存倉庫

透過自身實體磁碟的均衡和冗餘,確保整體系統的IO效率和資料安全;

方案特性:

透過前端負載平衡,合理分配Web壓力;

透過檔案/視訊伺服器與常規Web伺服器的分離,合理分配輕重資料流;

透過資料庫伺服器群組,合理分配資料庫IO壓力;

每台Web伺服器通常只連接一台資料庫伺服器,透過DEC的心跳偵測,可在極短時間內自動切換至冗餘資料庫伺服器;

磁碟陣列的引入,大幅提升系統IO效率的同時,極大增強了資料安全性。

Web伺服器:

Web伺服器很大一部分資源佔用來自於處理Web請求,通常情況下這也就是Apache產生的壓力,在高並發連線的情況下,Nginx是Apache伺服器不錯的替代品。 Nginx (“engine x”) 是俄羅斯人編寫的一款高效能的 HTTP 和反向代理伺服器。在國內,已經有新浪、搜狐通行證、網易新聞、網易部落格、金山逍遙網、金山愛詞霸、校內網、YUPOO相簿、豆瓣、迅雷看看等多家網站、 頻道使用 Nginx 伺服器。

Nginx的優勢:

高並發連接:官方測試能夠支撐5萬並發連接,在實際生產環境中跑到2~3萬並發連接數。

記憶體消耗少:在3萬並發連線下,開啟的10個Nginx 進程才消耗150M記憶體(15M*10=150M)。

內建的健康檢查功能:如果 Nginx Proxy 後端的某台 Web 伺服器宕機了,不會影響前端存取。

策略:相對於老牌的Apache,我們選擇Lighttpd和Nginx這些具有更小的資源佔用率和更高的負載能力的web伺服器。

Mysql:

MySQL本身就具備了很強的負載能力,MySQL最佳化是一項很複雜的工作,因為這最終需要對系統最佳化的良好理解。大家都知道資料庫工作就是大量的、 短時的查詢和讀寫,除了程式開發時需要注意建立索引、提高查詢效率等軟體開發技巧之外,從硬體設施的角度影響MySQL執行效率最主要來自於磁碟搜尋、磁碟IO水平、CPU週期、記憶體頻寬。

  根據伺服器上的硬體和軟體條件進行MySQl最佳化。 MySQL最佳化的核心在於系統資源的分配,這不等於無限的給MySQL分配更多的資源。在MySQL設定檔中我們介紹幾個最值得關注的參數:

改變索引緩衝區長度(key_buffer)

改變表長(read_buffer_size)

設定開啟表的數目的最大值(table_cache)

對緩長查詢設定一個時間限制(long_query_time)

如果條件允許,一般MySQL伺服器最好安裝在Linux作業系統中,而不是安裝在FreeBSD中。
策略: MySQL最佳化需要根據業務系統的資料庫讀寫特性和伺服器硬體配置,制定不同的最佳化方案,並且可以根據需要部署MySQL的主從結構。

PHP:

1、加載盡可能少的模塊;

2、如果是在windows平台下,盡可能使用IIS或者Nginx來替代我們平常用的Apache;

3、安裝加速器(都是通過快取php程式碼預先編譯的結果和資料庫結果來提高php程式碼的執行速度)
 eAccelerator,eAccelerator是一個自由開放原始碼php加速器,優化和動態內容緩存,提高了效能php腳本的快取效能,使得PHP腳本在編譯的狀態下,對伺服器的開銷幾乎完全消除。

Apc:Alternative PHP Cache(APC)是 PHP 的一個免費公開的最佳化程式碼快取。它用來提供免費,公開且強健的架構來快取和最佳化 PHP 的中間程式碼。

memcache:memcache是​​由Danga Interactive開發的,高效能的,分散式的記憶體物件快取系統,用於在動態應用中減少資料庫負載,提升存取速度。主要機制是透過在內存裡維護一個統一的巨大的hash表,Memcache能夠用來存儲各種格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等

Xcache:國人開發的緩存器,

策略: 為PHP安裝加速器。

代理伺服器(快取伺服器):

Squid Cache(簡稱為Squid)是一個流行的自由軟體(GNU通用公共授權)的代理伺服器和Web快取伺服器。 Squid有廣泛的用途,從作為網頁伺服器的前置cache伺服器快取相關請求來提高Web伺服器的速度,到為一組人共享網路資源而快取萬維網,網域名稱系統和其他網路搜索,到透過過濾流量幫助網絡安全,到區域網路通過代理網路。 Squid主要設計用於在Unix一類系統運作。

策略:安裝Squid 反向代理伺服器,能夠大幅提高伺服器效率。

壓力測試:壓力測試是一種基本的品質保證行為,它是每個重要軟體測試工作的一部分。壓力測試的基本想法很簡單:不是在常規條件下執行手動或自動測試,而是在電腦數量較少或系統資源匱乏的條件下執行測試。通常要進行壓力測試的資源包括內部記憶體、CPU 可用性、磁碟空間和網路頻寬等。一般用並發來做壓力測試。

壓力測試工具:webbench,ApacheBench等

漏洞測試:在我們的系統中漏洞主要包括:sql注入漏洞,xss跨站腳本攻擊等。安全性方面也包含系統軟體,如作業系統漏洞,mysql、apache等的漏洞,一般可以透過升級來解決。

漏洞測試工具:Acunetix Web Vulnerability Scanner


陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
PHP中的PDO是什麼?PHP中的PDO是什麼?Apr 28, 2025 pm 04:51 PM

本文討論了PHP數據對象(PDO),這是PHP中數據庫訪問的擴展名。它通過準備好的語句及其對MySQLI的好處,包括數據庫抽象和更好的錯誤處理,強調了PDO在增強安全性方面的作用。

php中的memcache是​​什麼?是否可以在幾個PHP項目之間共享一個memcache的一個實例?php中的memcache是​​什麼?是否可以在幾個PHP項目之間共享一個memcache的一個實例?Apr 28, 2025 pm 04:47 PM

memcache和memcached是通過減少數據庫負載加快Web應用程序的PHP緩存系統。可以在仔細的密鑰管理的項目之間共享一個實例。

使用MySQL和PHP創建新數據庫的步驟是什麼?使用MySQL和PHP創建新數據庫的步驟是什麼?Apr 28, 2025 pm 04:44 PM

文章討論了使用PHP創建和管理MySQL數據庫的步驟,專注於連接,創建,常見錯誤和安全措施。

JavaScript是否與PHP相互作用?JavaScript是否與PHP相互作用?Apr 28, 2025 pm 04:43 PM

本文討論了JavaScript和PHP如何通過HTTP請求間接相互作用,因為它們的環境不同。它涵蓋了將數據從JavaScript發送到PHP的方法

PHP中的梨是什麼?PHP中的梨是什麼?Apr 28, 2025 pm 04:38 PM

梨是可重複使用組件的PHP框架,通過包裝管理,編碼標準和社區支持增強開發。

PHP的用途是什麼?PHP的用途是什麼?Apr 28, 2025 pm 04:37 PM

PHP是一種多功能的腳本語言,主要用於Web開發,創建動態頁面,還可以用於命令行腳本,桌面應用程序和API開發。

PHP的舊名稱是什麼?PHP的舊名稱是什麼?Apr 28, 2025 pm 04:36 PM

文章討論了PHP從1995年的“個人主頁工具”到1998年的“ PHP:超文本預處理器”的演變,這反映了其超越個人網站的擴展使用。

如何防止會話固定攻擊?如何防止會話固定攻擊?Apr 28, 2025 am 12:25 AM

防止會話固定攻擊的有效方法包括:1.在用戶登錄後重新生成會話ID;2.使用安全的會話ID生成算法;3.實施會話超時機制;4.使用HTTPS加密會話數據,這些措施能確保應用在面對會話固定攻擊時堅不可摧。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中