首頁 後端開發 php教程 PHP解決網站大數據大流量與高並發

PHP解決網站大數據大流量與高並發

Apr 19, 2018 pm 03:29 PM
php 並行 流量


這篇文章主要介紹的內容是關於PHP解決網站大數據大流量與高並發,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下



1:硬體方面

普通的一個p4的伺服器每天最多能支援約10萬左右的IP,如果訪問量超過10W那麼需要專用的伺服器才能解決,如果硬體不給力軟體怎麼優化都是於事無補的。主要影響伺服器的速度

有:網路-硬碟讀寫速度-記憶體大小-cpu處理速度。

2:軟體方面

第一個要說的就是資料庫,首先要有一個很好的架構,查詢盡量不用* 避免相關子查詢給經常查詢的添加索引用排序來取代非順序訪問,如果條件允許,一般MySQL伺服器最好安裝

在Linux作業系統中。關於apache和nginx在高並發的情況下建議使用nginx,ginx是Apache伺服器不錯的替代品。 nginx記憶體消耗少 官方測試能夠支撐5萬並發連接,在實際生產環境中跑

#到2~3萬並發連接數。 php方面不需要的模組盡量關閉,使用memcached,Memcached 是一個高效能的分散式記憶體物件快取系統,不使用資料庫直接從記憶體當中調數據,這樣大大提升了速

度,iiS或Apache啟用GZIP壓縮優化網站,壓縮網站內容大幅節省網站流量。

第二,禁止外部的盜鏈。

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

第三,控制大檔案的下載。

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

第四,使用不同主機分流主要流量

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

第五,使用不同主機分流主要流量
將檔案放在不同的主機上,提供不同的鏡像供使用者下載。例如如果覺得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


No related content found.

相關推薦:

PHP解決並發問題的幾種實作

php解決post大量資料時的遺失問題

以上是PHP解決網站大數據大流量與高並發的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡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

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

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

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

See all articles