PHP高併發高負載系統架構

2021-07-28 22:08:54 字數 4275 閱讀 7350

寫的很全面,非常好,有些自己都用過,有些沒有,分享出來。可以在今後需要系統優化的專案中試一下。

一、高併發和高負載的約束條件硬體

部署作業系統

web 伺服器

phpmysql 測試

二、解決之道——硬體篇

處理能力的提公升:部署多顆cpu,選擇多核心、具備更高運算頻率、更大快取記憶體的cpu;

處理能力的提公升最直接的反應在於web請求的處理效率和php程式的執行效率。

記憶體頻寬與容量:更大的記憶體頻寬和容量;

記憶體頻寬與容量的提公升最直接的反應在於應對資料庫大量的資料交換。

磁碟搜尋與i/o能力:選擇更高的轉速、更大的硬碟快取、元件磁碟陣列(raid);

磁碟搜尋與i/o能力的提公升最直接反應在於資料庫大量的查詢和讀寫以及檔案的讀寫。

網路頻寬的提公升可考慮的因素包括: 更大頻寬、多線路接入、獨享頻寬;

伺服器在大負載的情況下,對網路頻寬的占用是十分可觀的。

策略:硬體設施是應對大負載的基礎,硬體設施的投入可根據實際壓力和預算量力而行。

三、解決之道——部署篇

3.1、伺服器分離

32、資料庫集群和庫表雜湊

3.3、映象

3.4、負載均衡

分類: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效率的同時,極大增強了資料安全性。

四、解決之道——環境篇

41、作業系統

作業系統的選擇,關注點在於

•是否適應於搭建siteengine所需要的環境程式?

•系統本身占用的資源比;

•系統安全性;

•系統是否易於操作?

策略:我們選擇freebsd,而且是最小化安裝以後的freebsd。

4.2、web伺服器

web伺服器很大一部分資源占用來自於處理web請求,通常情況下這也就是apache產生的壓力,apache是世界使用排名第一的web伺服器軟體。它可以執行在幾乎所有廣泛使用的計算機平台上。

nginx的優勢:

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

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

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

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

4.3、mysql

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

根據伺服器上的硬體和軟體條件進行mysql優化。mysql優化的核心在於系統資源的分配,這不等於無限制的給mysql分配更多的資源。

在mysql配置檔案中最值得關注的引數:

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

l         改變表長(read_buffer_size)

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

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

如果條件允許 ,一般mysql伺服器安裝在linux作業系統中,而不是安裝在freebsd中。

策略: mysql優化需要根據業務系統的資料庫讀寫特性和伺服器硬體配置,制定不同的優化方案,並且可以根據需要部署mysql的主從結構。

4.4、php

1、載入盡可能少的模組;

2、安裝加速器(都是通過快取php**預編譯的結果和資料庫結果來提高php**的執行速度)

eaccelerator

eaccelerator是乙個自由開放原始碼php加速器,優化和動態內容快取,提高了效能php指令碼的快取效能,使得php指令碼在編譯的狀態下,對伺服器的開銷幾乎完全消除。

apc

alternative php cache(apc)是 php 的乙個免費公開的優化**快取。它用來提供免費,公開並且強健的架構來快取和優化 php 的中間**。

memcache

策略: 為php安裝加速器。

4.5、**伺服器(快取伺服器)

squid cache(簡稱為squid)是乙個流行的自由軟體(gnu通用公共許可證)的**伺服器和web快取伺服器。squid有廣泛的用途,從作為網頁服務 器的前置cache伺服器快取相關請求來提高web伺服器的速度,到為一組人共享網路資源而快取全球資訊網,網域名稱系統和其他網路搜尋,到通過過濾流量幫助網路 安全,到區域網通過**上網。squid主要設計用於在unix一類系統執行。

策略:安裝squid 反向**伺服器,能夠大幅度提高伺服器效率。

5、解決之道——siteengine篇

siteengine(**引擎)是指針對應用系統程式的架構設計的一套程式化語言框架。目前最主流的是基於多層架構,分級處理,模組化設計的框架,支援mvc動態頁面展示,核心程式分層處理,增加靜態化引擎,借助ajax 非同步高效處理請求。

6、解決之道——測試篇

6.1、測試方法

6.2、測試用例

6.3、壓力測試

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

壓力測試工具:webbench,apachebench等

6.4、漏洞測試

在我們的系統中漏洞主要包括:sql注入漏洞,xss跨站指令碼攻擊等。安全方面還包括系統軟體,如作業系統漏洞,mysql、apache等的漏洞,一般可以通過公升級來解決。

PHP高併發高負載系統架構

處理能力的提公升最直接的反應在於web請求的處理效率和php程式的執行效率。記憶體頻寬與容量 更大的記憶體頻寬和容量 記憶體頻寬與容量的提公升最直接的反應在於應對資料庫大量的資料交換。磁碟搜尋與i o能力 選擇更高的轉速 更大的硬碟快取 元件磁碟陣列 raid 磁碟搜尋與i o能力的提公升最直接反應...

PHP高併發高負載系統架構

一 高併發和高負載的約束條件 硬體部署 作業系統 web 伺服器 phpmysql 測試二 解決之道 硬體篇 處理能力的提公升 部署多顆cpu,選擇多核心 具備更高運算頻率 更大快取記憶體的cpu 處理能力的提公升最直接的反應在於web請求的處理效率和php程式的執行效率。記憶體頻寬與容量 更大的記...

PHP高併發高負載系統架構

一 高併發和高負載的約束條件硬體 部署作業系統 web 伺服器 phpmysql 測試 二 解決之道 硬體篇 處理能力的提公升 部署多顆cpu,選擇多核心 具備更高運算頻率 更大快取記憶體的cpu 處理能力的提公升最直接的反應在於web請求的處理效率和php程式的執行效率。記憶體頻寬與容量 更大的記...