首先衷咽,確認(rèn)服務(wù)器硬件是否足夠支持當(dāng)前的流量鸽扁。
普通的P4服務(wù)器一般最多能支持每天10萬(wàn)獨(dú)立IP,如果訪問量比這個(gè)還要大兵罢, 那么必須首先配置一臺(tái)更高性能的專用服務(wù)器才能解決問題 献烦,否則怎么優(yōu)化都不可能徹底解決性能問題。
其次卖词,優(yōu)化數(shù)據(jù)庫(kù)訪問巩那。 前臺(tái)實(shí)現(xiàn)完全的靜態(tài)化當(dāng)然最好,可以完全不用訪問數(shù)據(jù)庫(kù)此蜈,不過對(duì)于頻繁更新的網(wǎng)站即横, 靜態(tài)化往往不能滿足某些功能。
緩存技術(shù)就是另一個(gè)解決方案裆赵,就是將動(dòng)態(tài)數(shù)據(jù)存儲(chǔ)到緩存文件中东囚,動(dòng)態(tài)網(wǎng)頁(yè)直接調(diào)用這些文件,而不必再訪問數(shù)據(jù)庫(kù)战授,WordPress和Z-Blog都大量使用這種緩存技術(shù)页藻。
如果確實(shí)無法避免對(duì)數(shù)據(jù)庫(kù)的訪問,那么可以嘗試優(yōu)化數(shù)據(jù)庫(kù)的查詢SQL.避免使用 Select * from這樣的語(yǔ)句植兰,每次查詢只返回自己需要的結(jié)果份帐,避免短時(shí)間內(nèi)的大量SQL查詢。
第三楣导,禁止外部的盜鏈废境。
外部網(wǎng)站的圖片或者文件盜鏈往往會(huì)帶來大量的負(fù)載壓力,因此應(yīng)該嚴(yán)格限制外部對(duì)于自身的圖片或者文件盜鏈,好在目前可以簡(jiǎn)單地通過refer來控制盜鏈噩凹,Apache自己就可以通過配置來禁止盜鏈巴元,IIS也有一些第三方的ISAPI可以實(shí)現(xiàn)同樣的功能。當(dāng)然驮宴,偽造refer也可以通過代碼來實(shí)現(xiàn)盜鏈逮刨,不過目前蓄意偽造refer盜鏈的還不多,可以先不去考慮幻赚,或者使用非技術(shù)手段來解決禀忆,比如在圖片上增加水印。
第四落恼,控制大文件的下載。
大文件的下載會(huì)占用很大的流量离熏,并且對(duì)于非SCSI硬盤來說佳谦,大量文件下載會(huì)消耗CPU,使得網(wǎng)站響應(yīng)能力下降滋戳。因此钻蔑,盡量不要提供超過2M的大文件下載,如果需要提供奸鸯,建議將大文件放在另外一臺(tái)服務(wù)器上咪笑。
第五,使用不同主機(jī)分流主要流量
將文件放在不同的主機(jī)上娄涩,提供不同的鏡像供用戶下載窗怒。比如如果覺得RSS文件占用流量大,那么使用FeedBurner或者FeedSky等服務(wù)將RSS輸出放在其他主機(jī)上蓄拣,這樣別人訪問的流量壓力就大多集中在FeedBurner的主機(jī)上扬虚,RSS就不占用太多資源了。
第六球恤,使用流量分析統(tǒng)計(jì)軟件辜昵。
在網(wǎng)站上安裝一個(gè)流量分析統(tǒng)計(jì)軟件,可以即時(shí)知道哪些地方耗費(fèi)了大量流量咽斧,哪些頁(yè)面需要再進(jìn)行優(yōu)化堪置,因此,解決流量問題還需要進(jìn)行精確的統(tǒng)計(jì)分析才可以张惹。比如:Google Analytics(Google分析)舀锨。
高并發(fā)和高負(fù)載的約束條件:硬件、部署诵叁、操作系統(tǒng)雁竞、Web 服務(wù)器、PHP、MySQL碑诉、測(cè)試
部署:服務(wù)器分離彪腔、數(shù)據(jù)庫(kù)集群和庫(kù)表散列、鏡像进栽、負(fù)載均衡
負(fù)載均衡分類:? 1)德挣、DNS輪循? 2)代理服務(wù)器負(fù)載均衡 ? 3)地址轉(zhuǎn)換網(wǎng)關(guān)負(fù)載均衡? 4)NAT負(fù)載均衡 ? 5)反向代理負(fù)載均衡 ? 6)混合型負(fù)載均衡
部署方案1:
適用范圍:靜態(tài)內(nèi)容為主體的網(wǎng)站和應(yīng)用系統(tǒng);對(duì)系統(tǒng)安全要求較高的網(wǎng)站和應(yīng)用系統(tǒng)快毛。
Main Server:主服務(wù)器
承載程序的主體運(yùn)行壓力格嗅,處理網(wǎng)站或應(yīng)用系統(tǒng)中的動(dòng)態(tài)請(qǐng)求;
將靜態(tài)頁(yè)面推送至多個(gè)發(fā)布服務(wù)器唠帝;
將附件文件推送至文件服務(wù)器屯掖;
安全要求較高,以靜態(tài)為主的網(wǎng)站襟衰,可將服務(wù)器置于內(nèi)網(wǎng)屏蔽外網(wǎng)的訪問贴铜。
DB Server:數(shù)據(jù)庫(kù)服務(wù)器
承載數(shù)據(jù)庫(kù)讀寫壓力;
只與主服務(wù)器進(jìn)行數(shù)據(jù)量交換瀑晒,屏蔽外網(wǎng)訪問绍坝。
File/Video Server:文件/視頻服務(wù)器
承載系統(tǒng)中占用系統(tǒng)資源和帶寬資源較大的數(shù)據(jù)流;
作為大附件的存儲(chǔ)和讀寫倉(cāng)庫(kù)苔悦;
作為視頻服務(wù)器將具備視頻自動(dòng)處理能力轩褐。
發(fā)布服務(wù)器組:
只負(fù)責(zé)靜態(tài)頁(yè)面的發(fā)布,承載絕大多數(shù)的Web請(qǐng)求玖详;
通過Nginx進(jìn)行負(fù)載均衡部署把介。
部署方案2:
適用范圍:以動(dòng)態(tài)交互內(nèi)容為主體的網(wǎng)站或應(yīng)用系統(tǒng);負(fù)載壓力較大竹宋,且預(yù)算比較充足的網(wǎng)站或應(yīng)用系統(tǒng)劳澄;
Web服務(wù)器組:
Web服務(wù)無主從關(guān)系,屬平行冗余設(shè)計(jì)蜈七;
通過前端負(fù)載均衡設(shè)備或Nginx反向代理實(shí)現(xiàn)負(fù)載均衡;
劃分專用文件服務(wù)器/視頻服務(wù)器有效分離輕/重總線飒硅;
每臺(tái)Web服務(wù)器可通過DEC可實(shí)現(xiàn)連接所有數(shù)據(jù)庫(kù)砂缩,同時(shí)劃分主從三娩。
數(shù)據(jù)庫(kù)服務(wù)器組:
相對(duì)均衡的承載數(shù)據(jù)庫(kù)讀寫壓力双吆;
通過數(shù)據(jù)庫(kù)物理文件的映射實(shí)現(xiàn)多數(shù)據(jù)庫(kù)的數(shù)據(jù)同步。
共享磁盤/磁盤陣列
將用于數(shù)據(jù)物理文件的統(tǒng)一讀寫
用于大型附件的存儲(chǔ)倉(cāng)庫(kù)
通過自身物理磁盤的均衡和冗余好乐,確保整體系統(tǒng)的IO效率和數(shù)據(jù)安全匾竿;
方案特性:
通過前端負(fù)載均衡,合理分配Web壓力蔚万;
通過文件/視頻服務(wù)器與常規(guī)Web服務(wù)器的分離岭妖,合理分配輕重?cái)?shù)據(jù)流;
通過數(shù)據(jù)庫(kù)服務(wù)器組反璃,合理分配數(shù)據(jù)庫(kù)IO壓力昵慌;
每臺(tái)Web服務(wù)器通常只連接一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器,通過DEC的心跳檢測(cè)淮蜈,可在極短時(shí)間內(nèi)自動(dòng)切換至冗余數(shù)據(jù)庫(kù)服務(wù)器斋攀;
磁盤陣列的引入,大幅提升系統(tǒng)IO效率的同時(shí)礁芦,極大增強(qiáng)了數(shù)據(jù)安全性蜻韭。
Web服務(wù)器:
Web服務(wù)器很大一部分資源占用來自于處理Web請(qǐng)求,通常情況下這也就是Apache產(chǎn)生的壓力柿扣,在高并發(fā)連接的情況下,Nginx是Apache服務(wù)
器不錯(cuò)的替代品闺魏。Nginx (“engine x”) 是俄羅斯人編寫的一款高性能的 HTTP
和反向代理服務(wù)器未状。在國(guó)內(nèi),已經(jīng)有新浪析桥、搜狐通行證司草、網(wǎng)易新聞、網(wǎng)易博客泡仗、金山逍遙網(wǎng)埋虹、金山愛詞霸、校內(nèi)網(wǎng)娩怎、YUPOO相冊(cè)搔课、豆瓣、迅雷看看等多家網(wǎng)站截亦、
頻道使用 Nginx 服務(wù)器爬泥。
Nginx的優(yōu)勢(shì):
高并發(fā)連接:官方測(cè)試能夠支撐5萬(wàn)并發(fā)連接,在實(shí)際生產(chǎn)環(huán)境中跑到2~3萬(wàn)并發(fā)連接數(shù)崩瓤。
內(nèi)存消耗少:在3萬(wàn)并發(fā)連接下袍啡,開啟的10個(gè)Nginx 進(jìn)程才消耗150M內(nèi)存(15M*10=150M)。
內(nèi)置的健康檢查功能:如果 Nginx Proxy 后端的某臺(tái) Web 服務(wù)器宕機(jī)了却桶,不會(huì)影響前端訪問境输。
策略:相對(duì)于老牌的Apache,我們選擇Lighttpd和Nginx這些具有更小的資源占用率和更高的負(fù)載能力的web服務(wù)器。
Mysql:
MySQL本身具備了很強(qiáng)的負(fù)載能力嗅剖,MySQL優(yōu)化是一項(xiàng)很復(fù)雜的工作辩越,因?yàn)檫@最終需要對(duì)系統(tǒng)優(yōu)化的很好理解。大家都知道數(shù)據(jù)庫(kù)工作就是大量的窗悯、
短時(shí)的查詢和讀寫区匣,除了程序開發(fā)時(shí)需要注意建立索引、提高查詢效率等軟件開發(fā)技巧之外蒋院,從硬件設(shè)施的角度影響MySQL執(zhí)行效率最主要來自于磁盤搜索亏钩、磁
盤IO水平、CPU周期欺旧、內(nèi)存帶寬姑丑。
根據(jù)服務(wù)器上的硬件和軟件條件進(jìn)行MySQl優(yōu)化。MySQL優(yōu)化的核心在于系統(tǒng)資源的分配辞友,這不等于無限制的給MySQL分配更多的資源栅哀。在MySQL配置文件中我們介紹幾個(gè)最值得關(guān)注的參數(shù):
改變索引緩沖區(qū)長(zhǎng)度(key_buffer)
改變表長(zhǎng)(read_buffer_size)
設(shè)定打開表的數(shù)目的最大值(table_cache)
對(duì)緩長(zhǎng)查詢?cè)O(shè)定一個(gè)時(shí)間限制(long_query_time)
如果條件允許 ,一般MySQL服務(wù)器最好安裝在Linux操作系統(tǒng)中称龙,而不是安裝在FreeBSD中留拾。
策略: MySQL優(yōu)化需要根據(jù)業(yè)務(wù)系統(tǒng)的數(shù)據(jù)庫(kù)讀寫特性和服務(wù)器硬件配置,制定不同的優(yōu)化方案鲫尊,并且可以根據(jù)需要部署MySQL的主從結(jié)構(gòu)痴柔。
PHP:
1、加載盡可能少的模塊疫向;
2咳蔚、如果是在windows平臺(tái)下,盡可能使用IIS或者Nginx來替代我們平常用的Apache搔驼;
3谈火、安裝加速器(都是通過緩存php代碼預(yù)編譯的結(jié)果和數(shù)據(jù)庫(kù)結(jié)果來提高php代碼的執(zhí)行速度)
eAccelerator,eAccelerator是一個(gè)自由開放源碼php加速器舌涨,優(yōu)化和動(dòng)態(tài)內(nèi)容緩存糯耍,提高了性能php腳本的緩存性能,使得PHP腳本在編譯的狀態(tài)下泼菌,對(duì)服務(wù)器的開銷幾乎完全消除谍肤。
Apc:Alternative PHP Cache(APC)是 PHP 的一個(gè)免費(fèi)公開的優(yōu)化代碼緩存。它用來提供免費(fèi)哗伯,公開并且強(qiáng)健的架構(gòu)來緩存和優(yōu)化 PHP 的中間代碼荒揣。
memcache:memcache是由Danga
Interactive開發(fā)的,高性能的焊刹,分布式的內(nèi)存對(duì)象緩存系統(tǒng)系任,用于在動(dòng)態(tài)應(yīng)用中減少數(shù)據(jù)庫(kù)負(fù)載恳蹲,提升訪問速度。主要機(jī)制是通過在內(nèi)存里維護(hù)一個(gè)統(tǒng)
一的巨大的hash表俩滥,Memcache能夠用來存儲(chǔ)各種格式的數(shù)據(jù)嘉蕾,包括圖像、視頻霜旧、文件以及數(shù)據(jù)庫(kù)檢索的結(jié)果等
Xcache:國(guó)人開發(fā)的緩存器错忱,
策略: 為PHP安裝加速器。
代理服務(wù)器(緩存服務(wù)器):
Squid
Cache(簡(jiǎn)稱為Squid)是一個(gè)流行的自由軟件(GNU通用公共許可證)的代理服務(wù)器和Web緩存服務(wù)器挂据。Squid有廣泛的用途以清,從作為網(wǎng)頁(yè)服務(wù)
器的前置cache服務(wù)器緩存相關(guān)請(qǐng)求來提高Web服務(wù)器的速度,到為一組人共享網(wǎng)絡(luò)資源而緩存萬(wàn)維網(wǎng)崎逃,域名系統(tǒng)和其他網(wǎng)絡(luò)搜索掷倔,到通過過濾流量幫助網(wǎng)絡(luò)
安全,到局域網(wǎng)通過代理網(wǎng)个绍。Squid主要設(shè)計(jì)用于在Unix一類系統(tǒng)運(yùn)行破婆。
策略:安裝Squid 反向代理服務(wù)器币喧,能夠大幅度提高服務(wù)器效率判没。
壓力測(cè)試:壓力測(cè)試是一種基本的質(zhì)量保證行為啊送,它是每個(gè)重要軟件測(cè)試工作的一部分。壓力測(cè)試的基本思路很簡(jiǎn)單:不是在常規(guī)條件下運(yùn)行手動(dòng)或自動(dòng)測(cè)試广恢,而是在計(jì)算機(jī)數(shù)量較少或系統(tǒng)資源匱乏的條件下運(yùn)行測(cè)試涩维。通常要進(jìn)行壓力測(cè)試的資源包括內(nèi)部?jī)?nèi)存、CPU 可用性袁波、磁盤空間和網(wǎng)絡(luò)帶寬等。一般用并發(fā)來做壓力測(cè)試蜗侈。
壓力測(cè)試工具:webbench篷牌,ApacheBench等
漏洞測(cè)試:在我們的系統(tǒng)中漏洞主要包括:sql注入漏洞,xss跨站腳本攻擊等踏幻。安全方面還包括系統(tǒng)軟件枷颊,如操作系統(tǒng)漏洞,mysql该面、apache等的漏洞夭苗,一般可以通過升級(jí)來解決。
漏洞測(cè)試工具:Acunetix Web Vulnerability Scanner