首頁 後端開發 php教程 php, nginx, apache, mysql PHP如何解決網站大流量與高並發' />

php, nginx, apache, mysql PHP如何解決網站大流量與高並發' />

Nov 09, 2016 pm 01:40 PM
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

熱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

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1249
24
PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP行動:現實世界中的示例和應用程序 PHP行動:現實世界中的示例和應用程序 Apr 14, 2025 am 12:19 AM

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP與Python:了解差異 PHP與Python:了解差異 Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP的持久相關性:它還活著嗎? PHP的持久相關性:它還活著嗎? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python:代碼示例和比較 PHP和Python:代碼示例和比較 Apr 15, 2025 am 12:07 AM

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

See all articles