PHP高併發和大流量的解決方案

2022-02-25 23:14:45 字數 3556 閱讀 2684

第乙個要說的就是資料庫,首先要有乙個很好的架構,查詢盡量不用* 避免相關子查詢 給經常查詢的新增索引 用排序來取代非順序訪問,如果條件允許 ,一般mysql伺服器最好安裝在linux作業系統中 。關於apache和nginx在高併發的情況下推薦使用nginx,ginx是apache伺服器不錯的替代品。nginx記憶體消耗少 官方測試能夠支撐5萬併發連線,在實際生產環境中跑到2~3萬併發連線數。php方面不需要的模組盡量關閉,使用memcached,memcached 是乙個高效能的分布式記憶體物件快取系統,不使用資料庫直接從記憶體當中調資料,這樣大大提公升了速度,iis或apache啟用gzip壓縮優化**,壓縮**內容大大節省**流量。

第二,禁止外部的盜鏈。

於自身的或者檔案盜鏈,好在目前可以簡單地通過refer來控制盜鏈,apache自

己就可以通過配置來禁止盜鏈,iis也有一些第三方的isapi可以實現同樣的功能。當

然,偽造refer也可以通過**來實現盜鏈,不過目前蓄意偽造refer盜鏈的還不多,

可以先不去考慮,或者使用非技術手段來解決,比如在上增加水印。

提供,建議將大檔案放在另外一台伺服器上。

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

流量大,那麼使用feedburner或者feedsky等服務將rss輸出放在其他主機上,這

樣別人訪問的流量壓力就大多集中在feedburner的主機上,rss就不占用太多資源了

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

第六,使用流量分析統計軟體。

在**上安裝乙個流量分析統計軟體,可以即時知道哪些地方耗費了大量流量,哪些頁面需要再進行優化,因此,解決流量問題還需要進行精確的統計分析才可以。比如:google analytics(google分析)。

高併發和高負載的約束條件:硬體、部署、作業系統、web 伺服器、php、mysql、測試

部署:伺服器分離、資料庫集群和庫表雜湊、映象、負載均衡

負載均衡分類: 1)、dns輪循 2)**伺服器負載均衡 3)位址轉換閘道器負載均衡 4)nat負載均衡 5)反向**負載均衡 6)混合型負載均衡

部署方案1:

main server:主伺服器

承載程式的主體執行壓力,處理**或應用系統中的動態請求;

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

將附件檔案推送至檔案伺服器;

安全要求較高,以靜態為主的**,可將伺服器置於內網遮蔽外網的訪問。

db server:資料庫伺服器

承載資料庫讀寫壓力;

只與主伺服器進行資料量交換,遮蔽外網訪問。

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

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

發布伺服器組:

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

通過nginx進行負載均衡部署。

部署方案2:

web伺服器組:

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

通過前端負載均衡裝置或nginx反向**實現負載均衡;

每台web伺服器可通過dec可實現連線所有資料庫,同時劃分主從。

資料庫伺服器組:

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

通過資料庫物理檔案的對映實現多資料庫的資料同步。

共享磁碟/磁碟陣列

將用於資料物理檔案的統一讀寫

用於大型附件的儲存倉庫

通過自身物理磁碟的均衡和冗餘,確保整體系統的io效率和資料安全;

方案特性:

通過前端負載均衡,合理分配web壓力;

通過資料庫伺服器組,合理分配資料庫io壓力;

每台web伺服器通常只連線一台資料庫伺服器,通過dec的心跳檢測,可在極短時間內自動切換至冗餘資料庫伺服器;

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

web伺服器:

nginx的優勢:

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

記憶體消耗少:在3萬併發連線下,開啟的10個nginx 程序才消耗150m記憶體(15m*10=150m)。

內建的健康檢查功能:如果 nginx proxy 後端的某台 web 伺服器宕機了,不會影響前端訪問。

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

mysql:

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

改變索引緩衝區長度(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 的中間**。

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高併發和大流量解決方案整理

一 高併發的概念 在網際網路時代,併發,高併發通常是指併發訪問。也就是在某個時間點,有多少個訪問同時到來。二 高併發架構相關概念 1 qps 每秒查詢率 每秒鐘請求或者查詢的數量,在網際網路領域,指每秒響應請求數 指http請求 2 pv page view 綜合瀏覽量,即頁面瀏覽量或者點選量,乙個...

高併發解決方案 9 大流量解決方案

常用的nginx。位於網路7層之上的http層,針對http應用做一些分流的策略。nginx單台機器可以承受2w到3w的併發量。任何一台伺服器都有乙個極限,一旦訪問量到了這個點,效能會急劇惡化。最大併發5w,實際上可能3 4w就會引發效能惡化,然後拖著到極限,最後宕機。隨著併發流量的增加,反向 已經...

php 面試考點總結 高併發和大流量解決方案考點

盜鏈概念 盜鏈是指在自己的頁面上展示一些並不在自己伺服器的內容 防盜煉工作原理 通過referer或者簽名,可以檢測目標網頁訪問的 頁,一旦檢測到 頁不是本站即進行阻止或者返回指定頁面 解決方案1 referer nginx 模組ngx http referer module用於阻擋 非法的網域名稱...