自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

中小型網(wǎng)站架構(gòu)分析及優(yōu)化

開(kāi)發(fā) 架構(gòu)
以上網(wǎng)站架構(gòu)廣泛運(yùn)用中大型網(wǎng)站中,本文從架構(gòu)每一層分析所用主流技術(shù)和解決手段,有助于初入網(wǎng)站運(yùn)維朋友們,進(jìn)一步對(duì)網(wǎng)站架構(gòu)認(rèn)識(shí),從而自己形成一套架構(gòu)概念。

先看網(wǎng)站架構(gòu)圖:

wKiom1WKdbGgXLOGAAHVOEBTyTg628.jpg

以上網(wǎng)站架構(gòu)廣泛運(yùn)用中大型網(wǎng)站中,本文從架構(gòu)每一層分析所用主流技術(shù)和解決手段,有助于初入網(wǎng)站運(yùn)維朋友們,進(jìn)一步對(duì)網(wǎng)站架構(gòu)認(rèn)識(shí),從而自己形成一套架構(gòu)概念。

第一層:CDN

國(guó)內(nèi)網(wǎng)絡(luò)分布主要南電信北聯(lián)通,造成跨地區(qū)訪問(wèn)延遲大問(wèn)題,對(duì)于有一定訪問(wèn)量網(wǎng)站來(lái)說(shuō),增加CDN(內(nèi)容分發(fā)網(wǎng)絡(luò))層可有效改善此現(xiàn)象,也是網(wǎng)站加 速的最好選擇。CDN把網(wǎng)站頁(yè)面緩存到全國(guó)分布的節(jié)點(diǎn)上,用戶訪問(wèn)時(shí)從最近的機(jī)房獲取數(shù)據(jù),這樣大大減少網(wǎng)絡(luò)訪問(wèn)的路徑。如果想自己搭建CDN,不建議這 么做,因?yàn)槭裁茨??其?shí)說(shuō)白了,就是什么事別往運(yùn)維上攔。CDN架構(gòu)部署不復(fù)雜,影響效果的因素卻很多,后期管理維護(hù)也比較復(fù)雜,想達(dá)到預(yù)期的效果確非易 事,這是一個(gè)費(fèi)力不討好的活,最后老板還是感覺(jué)是你能力不足。建議找專做CDN的公司,費(fèi)用也不貴,有抗流量攻擊能力,效果也很好,運(yùn)維也少很多事,何樂(lè) 而不為呢!

第二層:反向代理(網(wǎng)頁(yè)緩存)

如果CDN沒(méi)有緩存要請(qǐng)求的數(shù)據(jù)則向這層發(fā)起請(qǐng)求,在代理服務(wù)器配置緩存功能(本地),代理服務(wù)器就查找本地緩存是否有CDN請(qǐng)求的數(shù)據(jù),如果有就直接返回給CDN,如果沒(méi)有則請(qǐng)求后端負(fù)載均衡器然后轉(zhuǎn)發(fā)給WEB服務(wù)器返回?cái)?shù)據(jù)給代理服務(wù)器,代理服務(wù)器再將結(jié)果給CDN。代理服務(wù)器一般緩存不經(jīng)常變動(dòng)的靜態(tài)頁(yè)面,如image、js、css、html等,主流的緩存軟件有Squid、Varnish、Nginx。

第三層:負(fù)載均衡

訪問(wèn)量較大的網(wǎng)站都會(huì)用到負(fù)載均衡,因?yàn)檫@是解決單臺(tái)服務(wù)器性能瓶頸的最好辦法。反向代理將請(qǐng)求轉(zhuǎn)發(fā)給負(fù)載均衡器,負(fù)載均衡器根據(jù)算法(輪訓(xùn)、負(fù)載 情況選擇后端等)交給后端WEB服務(wù)處理,WEB服務(wù)處理完成后直接返回?cái)?shù)據(jù)給反向代理服務(wù)器。負(fù)載均衡合理分配請(qǐng)求給后端多臺(tái)WEB服務(wù)器,減輕單臺(tái)服 務(wù)器并發(fā)負(fù)載,并保證服務(wù)可用性。主流的負(fù)載均衡軟件有LVS、HAProxy、Nginx。

第四層:WEB服務(wù)

WEB服務(wù)是處理用戶請(qǐng)求的,WEB服務(wù)處理效率,直接影響到訪問(wèn)速度,為避免這層因素造成訪問(wèn)慢,應(yīng)對(duì)其進(jìn)行調(diào)優(yōu),讓W(xué)EB服務(wù)發(fā)揮到最佳狀態(tài)。常見(jiàn)的WEB服務(wù)有Apache和Nginx。

Apache優(yōu)化:

1).mod_deflate壓縮模塊

查看是否加載:

# apachectl M |grep deflate

如果沒(méi)有安裝使用apxs編譯進(jìn)去:

# /usr/local/apache/bin/apxs c I A apache源碼目錄/modules/mod_deflate.c

deflate配置參數(shù):

  1. DeflateCompressionLevel6      #壓縮等級(jí)(1-9),數(shù)值越大效率越高,消耗CPU也就越高 
  2. SetOutputFilterDEFLATE      #啟用壓縮 
  3. AddOutputFilterByTypeDEFLATE text/html text/plain text/xml #壓縮類型 
  4. AddOutputFilterByTypeDEFLATE css js html htm xml php 

2).mod_expires緩存模塊

查看是否加載:

# apachectl M |grep expires

如果沒(méi)有安裝使用apxs編譯進(jìn)去:

# /usr/local/apache/bin/apxs c I A apache源碼目錄/modules/mod_expires.c

再在httpd.conf啟用模塊:LoadModule expires_module modules/mod_expires.so

緩存機(jī)制有三種用法:全局、目錄和虛擬主機(jī)

全局配置,在配置文件末尾添加:

ExpiresActiveon       #啟用有效期控制,會(huì)自動(dòng)清除已過(guò)期的緩存,然后從服務(wù)器獲取新的
ExpiresDefault "accessplus 1 days"       #默認(rèn)任意格式的文檔都是1天后過(guò)期
ExpiresByTypetext/html "access plus 12 months" 
ExpiresByTypeimage/jpg "access plus 12 months"   #jpg格式圖片緩存12月

3).工作模式選擇及優(yōu)化

apache有兩種常見(jiàn)工作模式,worker和prefork,默認(rèn)是worker,是混合型的MPM(多路處理模塊),支持多進(jìn)程和多線程,由 線程來(lái)處理請(qǐng)求,所以可以處理更多請(qǐng)求,提高并發(fā)能力,系統(tǒng)資源開(kāi)銷也小于基于進(jìn)程的MPM,由于線程使用進(jìn)程內(nèi)存空間,進(jìn)程崩潰會(huì)導(dǎo)致其下線程崩潰。而 prefork是非線程型MPM,進(jìn)程占用系統(tǒng)資源也比worker多,由于進(jìn)程處理連接,在工作效率上也比worker更穩(wěn)定??赏ㄟ^(guò)apache2 l查看當(dāng)前工作模式,在編譯時(shí)使用—with-mpm參數(shù)指定工作模式。根據(jù)自己業(yè)務(wù)需求選擇不同工作模式,再適當(dāng)增加工作模式相關(guān)參數(shù),可提高處理能 力。

配置參數(shù)說(shuō)明:

  1. StartServers      8   #默認(rèn)啟動(dòng)8個(gè)httpd進(jìn)程 
  2. MinSpareServers    5    #最小的空閑進(jìn)程數(shù) 
  3. MaxSpareServers    20   #最大的空閑進(jìn)程數(shù),如果大于這個(gè)值,apache會(huì)自動(dòng)kill一些進(jìn)程 
  4. ServerLimit      256   #服務(wù)器允許進(jìn)程數(shù)的上限 
  5. MaxClients       256  #同時(shí)最多發(fā)起多少個(gè)訪問(wèn),超過(guò)則進(jìn)入隊(duì)列等待 
  6. MaxRequestsPerChild  4000  #每個(gè)進(jìn)程啟動(dòng)的最大線程 

Nginx優(yōu)化:

1).gzip壓縮模塊

  1. http { 
  2.     …… 
  3.     gzip on; 
  4.     gzip_min_length 1k;   #允許壓縮的頁(yè)面最小字節(jié)數(shù),默認(rèn)是0,多大都?jí)嚎s,小于1k的可能適得其反 
  5.     gzip_buffers 4 16k;   #gzip申請(qǐng)內(nèi)存的大小,按數(shù)據(jù)大小的4倍去申請(qǐng)內(nèi)存 
  6.     gzip_http_version 1.0;  #識(shí)別http協(xié)議版本 
  7.     gzip_comp_level 2;    #壓縮級(jí)別,1壓縮比最小,處理速度最快,9壓縮比最大,處理速度最慢 
  8.     gzip_types text/plainapplication/x-javascripttext/css application/xml image/jpg;  #壓縮數(shù)據(jù)類型 
  9.     gzip_vary on;      #根據(jù)客戶端的http頭來(lái)判斷,是否需要壓縮 

2).expires緩存模塊

  1. server { 
  2.     location ~ .*.(gif|jpg|png|bmp|swf)$   #緩存數(shù)據(jù)后綴類型 
  3.     { 
  4.       expires 30d;   #使用expires緩存模塊,緩存到客戶端30天 
  5.     } 
  6.     location ~ .*.( jsp|js|css)?$ 
  7.     { 
  8.       expires 1d; 
  9.     } 

3).fastcgi優(yōu)化

nginx不支持直接調(diào)用或者解析動(dòng)態(tài)程序(php),必須通過(guò)fastcgi(通用網(wǎng)關(guān)接口)來(lái)啟動(dòng)php-fpm進(jìn)程來(lái)解析php腳本。也就是 說(shuō)用戶請(qǐng)求先到nginx,nginx再將動(dòng)態(tài)解析交給fastcgi,fastcgi啟動(dòng)php-fpm解析php腳本。所以我們有必要對(duì) fastcgi和php-fpm進(jìn)行適當(dāng)?shù)膮?shù)優(yōu)化。

 

  1. http { 
  2.     …… 
  3.     fastcgi_cache_path/usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;  
  4.     # FastCGI緩存指定一個(gè)文件路徑、目錄結(jié)構(gòu)等級(jí)、關(guān)鍵字區(qū)域存儲(chǔ)時(shí)間和非活動(dòng)刪除時(shí)間 
  5.     fastcgi_connect_timeout 300;    #指定連接到后端FastCGI的超時(shí)時(shí)間 
  6.     fastcgi_send_timeout 300;     #指定向FastCGI傳送請(qǐng)求的超時(shí)時(shí)間 
  7.     fastcgi_read_timeout 300;     #指定接收FastCGI應(yīng)答的超時(shí)時(shí)間 
  8.     fastcgi_buffer_size 64k;      #指定讀取FastCGI應(yīng)答第一部分需要多大的緩沖區(qū) 
  9.     fastcgi_buffers 4 64k;      #指定本地需要用多少盒多大的緩沖區(qū)來(lái)緩沖FastCGI的應(yīng)答請(qǐng)求 
  10.     fastcgi_busy_buffers_size 128k;   
  11.     fastcgi_temp_file_write_size 128k;  #表示在寫入緩存文件時(shí)使用多大的數(shù)據(jù)塊,默認(rèn)值是fastcgi_buffers的兩倍 
  12.     fastcgi_cache TEST;          #開(kāi)啟fastcgi_cache緩存并指定一個(gè)TEST名稱 
  13.     fastcgi_cache_valid 200 302 1h;   #指定200、302應(yīng)答代碼的緩存1小時(shí) 
  14.     fastcgi_cache_valid 301 1d;     #將301應(yīng)答代碼緩存1天 
  15.     fastcgi_cache_valid any 1m;     #將其他應(yīng)答均緩存1分鐘 
  16.  
  17. php-fpm.conf配置參數(shù): 
  18.  
  19. pm =dynamic        #兩種控制子進(jìn)程方式(static和dynamic) 
  20. pm.max_children= 5     #同一時(shí)間存活的最大子進(jìn)程數(shù) 
  21. pm.start_servers= 2    #啟動(dòng)時(shí)創(chuàng)建的進(jìn)程數(shù) 
  22. pm.min_spare_servers= 1  #最小php-fpm進(jìn)程數(shù) 
  23. pm.max_spare_servers= 3  #最大php-fpm進(jìn)程數(shù) 

4).proxy_cache本地緩存模塊

  1. http { 
  2.         …… 
  3.    proxy_temp_path  /usr/local/nginx/proxy_cache/temp;    #緩存臨時(shí)目錄 
  4.    proxy_cache_path /usr/local/nginx/proxy_cache/cache levels=1:2 keys_zone=one:10m inactive=1d max_size=1g; 
  5.    #緩存文件實(shí)際目錄,levels定義層級(jí)目錄,1:2說(shuō)明1是一級(jí)目錄,2是二級(jí)目錄,keys_zone存儲(chǔ)元數(shù)據(jù),并分配10M內(nèi)存空間。inctive表示1天沒(méi)有被訪問(wèn)的緩存就刪除,默認(rèn)10分鐘。max_size是最大分配磁盤空間 
  6.    server { 
  7.       listen 80
  8.       server_name 192.168.1.10
  9.       location / { 
  10.         proxy_cache one;   #調(diào)用緩存區(qū) 
  11.         #proxy_cache_valid 200 304 12h; #可根據(jù)HTTP狀態(tài)碼設(shè)置不同的緩存時(shí)間 
  12.         proxy_cache_valid any  10m;    #緩存有效期為10分鐘 
  13.       } 
  14.       #清除URL緩存,允許來(lái)自哪個(gè)網(wǎng)段的IP可以清除緩存(需要安裝第三方模塊"ngx_cache_purge"),清除URL緩存方法:訪問(wèn)http://192.168.1.10/purge/文件名 
  15.       location ~ /purge(/.*){ 
  16.         allow 127.0.0.1
  17.         allow 192.168.1.0/24
  18.         deny all; 
  19.         proxy_cache_purge cache_one$host$1$is_args$args; 
  20.       } 

小結(jié):

啟用壓縮模塊可以節(jié)省一部分帶寬,會(huì)增加WEB端CPU處理,但在上圖網(wǎng)站架構(gòu)中,WEB端啟用壓縮模塊并沒(méi)有起到作用,因?yàn)閭鬏數(shù)缴蠈幼叩氖蔷钟?網(wǎng)。對(duì)于直接面向用戶的架構(gòu)還是要啟用的。WEB也不用啟用expires模塊,因?yàn)橛辛朔聪虼矸?wù)器和CDN,所以到不了用戶瀏覽器,開(kāi)啟起不到作 用。

如果反向代理使用nginx做代理,可開(kāi)啟expires模塊,將靜態(tài)文件緩存到用戶瀏覽器,瀏覽器發(fā)起請(qǐng)求時(shí),先判斷本地緩存是否有請(qǐng)求的數(shù)據(jù),如果有再判斷是否過(guò)期,如果不過(guò)期就直接瀏覽緩存數(shù)據(jù),哪怕服務(wù)器資源已經(jīng)改變,所以要根據(jù)業(yè)務(wù)情況合理設(shè)置過(guò)期時(shí)間。

5. 利用PHP緩存器提高代碼執(zhí)行效率

php程序在沒(méi)有使用緩存器情況下,每次請(qǐng)求php頁(yè)面,php都會(huì)對(duì)此頁(yè)面進(jìn)行代碼編譯,這就意味著重復(fù)的編譯工作會(huì)增加服務(wù)器負(fù)載。有了緩存器 就會(huì)把每次編譯后的數(shù)據(jù)緩存到共享內(nèi)存中,下次訪問(wèn)直接使用緩沖區(qū)已編譯好的代碼,從而避免重復(fù)的編譯過(guò)程,以加快其執(zhí)行效率。因此PHP網(wǎng)站使用緩存器 是完全有必要的!主流的PHP緩存器有:eAccelerator、XCache

第五層:動(dòng)靜分離

動(dòng)靜分離,顧名思義,是將動(dòng)態(tài)頁(yè)面和靜態(tài)頁(yè)面分離到不同服務(wù)器上處理,比如使用web是nginx,可以讓fastcgi部署到單獨(dú)一臺(tái)服務(wù)器,專 門解析php動(dòng)態(tài)頁(yè)面,靜態(tài)頁(yè)面默認(rèn)由nginx處理,并做好緩存策略。再比如一個(gè)商城網(wǎng)站,會(huì)有大量的圖片,可以考慮增加文件服務(wù)器組,將請(qǐng)求圖片和上 傳圖片的都交給文件服務(wù)器處理。文件服務(wù)器主流使用NFS,存在單點(diǎn)故障,可以DRBD+HeartBeat+NFS部署高可用,如果單臺(tái)壓力過(guò)大,考慮 使用分布式文件系統(tǒng),如GlusterFS、MooseFS等。

《DRBD + Heratbeat + NFS 高可用文件共享存儲(chǔ)》:http://blog.jobbole.com/94718/

第六層:數(shù)據(jù)庫(kù)緩存

利用緩存技術(shù),把熱數(shù)據(jù)緩存到內(nèi)存中,如果請(qǐng)求的數(shù)據(jù)在緩存中,就直接返回,否則去數(shù)據(jù)庫(kù)中取,并更新把拿的數(shù)據(jù)更新到緩存系統(tǒng),提高讀性能,降低 數(shù)據(jù)庫(kù)壓力。緩存實(shí)現(xiàn)有本地緩存和分布式緩存,本地緩存是將數(shù)據(jù)緩存到本地服務(wù)器內(nèi)存中或者文件中。分布式緩存是將數(shù)據(jù)緩存到內(nèi)存中,是分布式的,可以緩 存海量數(shù)據(jù),擴(kuò)展性好。主流的分布式緩存系統(tǒng)有Memcached和Redis,Memcached性能穩(wěn)定,速度很快,QPS可達(dá)8w左右。如果想數(shù)據(jù) 持久化就選擇用Redis,性能不低于Memcached。

第七層:數(shù)據(jù)庫(kù)

這層在整個(gè)網(wǎng)站架構(gòu)中起著主導(dǎo)型作用,直接決定用戶體驗(yàn),相對(duì)架構(gòu)優(yōu)化也比較復(fù)雜,具體請(qǐng)參考博文:《運(yùn)維角度淺談 MySQL 數(shù)據(jù)庫(kù)優(yōu)化

核心思路:減少請(qǐng)求層,盡可能讓前端層返回用戶請(qǐng)求的數(shù)據(jù),減少后端服務(wù)器訪問(wèn)頻率,最重要是數(shù)據(jù)庫(kù)層。

責(zé)任編輯:王雪燕 來(lái)源: 李振良
相關(guān)推薦

2015-07-17 10:05:03

面試思考

2010-01-07 13:50:01

網(wǎng)吧交換機(jī)

2010-12-14 10:21:53

2011-02-24 09:56:26

組網(wǎng)網(wǎng)絡(luò)

2018-11-08 09:10:18

組網(wǎng)光纖網(wǎng)絡(luò)

2010-04-15 04:03:20

華碩服務(wù)器

2009-12-21 16:10:28

2015-06-11 17:10:49

局域網(wǎng)布線技術(shù)

2010-08-23 12:12:58

2020-06-26 08:20:12

物聯(lián)網(wǎng)智慧城市IOT

2018-10-08 05:23:20

2014-04-11 13:47:14

雙主架構(gòu)MySQL

2014-09-28 14:28:12

硬盤加密全盤加密

2009-07-11 14:46:44

ADSL光纖企業(yè)

2010-08-24 10:04:45

中小型企業(yè)虛擬化

2009-11-24 09:51:22

路由設(shè)計(jì)方案

2009-10-10 10:20:05

網(wǎng)絡(luò)布線系統(tǒng)

2011-01-21 15:59:21

Sendmail

2009-07-16 10:18:17

多模光纜布線

2012-03-30 16:43:59

云計(jì)算中小企業(yè)安全
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)