成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

中小型網站架構分析及優化

開發 架構
以上網站架構廣泛運用中大型網站中,本文從架構每一層分析所用主流技術和解決手段,有助于初入網站運維朋友們,進一步對網站架構認識,從而自己形成一套架構概念。

先看網站架構圖:

wKiom1WKdbGgXLOGAAHVOEBTyTg628.jpg

以上網站架構廣泛運用中大型網站中,本文從架構每一層分析所用主流技術和解決手段,有助于初入網站運維朋友們,進一步對網站架構認識,從而自己形成一套架構概念。

第一層:CDN

國內網絡分布主要南電信北聯通,造成跨地區訪問延遲大問題,對于有一定訪問量網站來說,增加CDN(內容分發網絡)層可有效改善此現象,也是網站加 速的最好選擇。CDN把網站頁面緩存到全國分布的節點上,用戶訪問時從最近的機房獲取數據,這樣大大減少網絡訪問的路徑。如果想自己搭建CDN,不建議這 么做,因為什么呢?其實說白了,就是什么事別往運維上攔。CDN架構部署不復雜,影響效果的因素卻很多,后期管理維護也比較復雜,想達到預期的效果確非易 事,這是一個費力不討好的活,最后老板還是感覺是你能力不足。建議找專做CDN的公司,費用也不貴,有抗流量攻擊能力,效果也很好,運維也少很多事,何樂 而不為呢!

第二層:反向代理(網頁緩存)

如果CDN沒有緩存要請求的數據則向這層發起請求,在代理服務器配置緩存功能(本地),代理服務器就查找本地緩存是否有CDN請求的數據,如果有就直接返回給CDN,如果沒有則請求后端負載均衡器然后轉發給WEB服務器返回數據給代理服務器,代理服務器再將結果給CDN。代理服務器一般緩存不經常變動的靜態頁面,如image、js、css、html等,主流的緩存軟件有Squid、Varnish、Nginx。

第三層:負載均衡

訪問量較大的網站都會用到負載均衡,因為這是解決單臺服務器性能瓶頸的最好辦法。反向代理將請求轉發給負載均衡器,負載均衡器根據算法(輪訓、負載 情況選擇后端等)交給后端WEB服務處理,WEB服務處理完成后直接返回數據給反向代理服務器。負載均衡合理分配請求給后端多臺WEB服務器,減輕單臺服 務器并發負載,并保證服務可用性。主流的負載均衡軟件有LVS、HAProxy、Nginx。

第四層:WEB服務

WEB服務是處理用戶請求的,WEB服務處理效率,直接影響到訪問速度,為避免這層因素造成訪問慢,應對其進行調優,讓WEB服務發揮到最佳狀態。常見的WEB服務有Apache和Nginx。

Apache優化:

1).mod_deflate壓縮模塊

查看是否加載:

# apachectl M |grep deflate

如果沒有安裝使用apxs編譯進去:

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

deflate配置參數:

  1. DeflateCompressionLevel6      #壓縮等級(1-9),數值越大效率越高,消耗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

如果沒有安裝使用apxs編譯進去:

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

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

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

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

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

3).工作模式選擇及優化

apache有兩種常見工作模式,worker和prefork,默認是worker,是混合型的MPM(多路處理模塊),支持多進程和多線程,由 線程來處理請求,所以可以處理更多請求,提高并發能力,系統資源開銷也小于基于進程的MPM,由于線程使用進程內存空間,進程崩潰會導致其下線程崩潰。而 prefork是非線程型MPM,進程占用系統資源也比worker多,由于進程處理連接,在工作效率上也比worker更穩定。可通過apache2 l查看當前工作模式,在編譯時使用—with-mpm參數指定工作模式。根據自己業務需求選擇不同工作模式,再適當增加工作模式相關參數,可提高處理能 力。

配置參數說明:

  1. StartServers      8   #默認啟動8個httpd進程 
  2. MinSpareServers    5    #最小的空閑進程數 
  3. MaxSpareServers    20   #最大的空閑進程數,如果大于這個值,apache會自動kill一些進程 
  4. ServerLimit      256   #服務器允許進程數的上限 
  5. MaxClients       256  #同時最多發起多少個訪問,超過則進入隊列等待 
  6. MaxRequestsPerChild  4000  #每個進程啟動的最大線程 

Nginx優化:

1).gzip壓縮模塊

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

2).expires緩存模塊

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

3).fastcgi優化

nginx不支持直接調用或者解析動態程序(php),必須通過fastcgi(通用網關接口)來啟動php-fpm進程來解析php腳本。也就是 說用戶請求先到nginx,nginx再將動態解析交給fastcgi,fastcgi啟動php-fpm解析php腳本。所以我們有必要對 fastcgi和php-fpm進行適當的參數優化。

 

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

4).proxy_cache本地緩存模塊

  1. http { 
  2.         …… 
  3.    proxy_temp_path  /usr/local/nginx/proxy_cache/temp;    #緩存臨時目錄 
  4.    proxy_cache_path /usr/local/nginx/proxy_cache/cache levels=1:2 keys_zone=one:10m inactive=1d max_size=1g; 
  5.    #緩存文件實際目錄,levels定義層級目錄,1:2說明1是一級目錄,2是二級目錄,keys_zone存儲元數據,并分配10M內存空間。inctive表示1天沒有被訪問的緩存就刪除,默認10分鐘。max_size是最大分配磁盤空間 
  6.    server { 
  7.       listen 80
  8.       server_name 192.168.1.10
  9.       location / { 
  10.         proxy_cache one;   #調用緩存區 
  11.         #proxy_cache_valid 200 304 12h; #可根據HTTP狀態碼設置不同的緩存時間 
  12.         proxy_cache_valid any  10m;    #緩存有效期為10分鐘 
  13.       } 
  14.       #清除URL緩存,允許來自哪個網段的IP可以清除緩存(需要安裝第三方模塊"ngx_cache_purge"),清除URL緩存方法:訪問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.       } 

小結:

啟用壓縮模塊可以節省一部分帶寬,會增加WEB端CPU處理,但在上圖網站架構中,WEB端啟用壓縮模塊并沒有起到作用,因為傳輸到上層走的是局域 網。對于直接面向用戶的架構還是要啟用的。WEB也不用啟用expires模塊,因為有了反向代理服務器和CDN,所以到不了用戶瀏覽器,開啟起不到作 用。

如果反向代理使用nginx做代理,可開啟expires模塊,將靜態文件緩存到用戶瀏覽器,瀏覽器發起請求時,先判斷本地緩存是否有請求的數據,如果有再判斷是否過期,如果不過期就直接瀏覽緩存數據,哪怕服務器資源已經改變,所以要根據業務情況合理設置過期時間。

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

php程序在沒有使用緩存器情況下,每次請求php頁面,php都會對此頁面進行代碼編譯,這就意味著重復的編譯工作會增加服務器負載。有了緩存器 就會把每次編譯后的數據緩存到共享內存中,下次訪問直接使用緩沖區已編譯好的代碼,從而避免重復的編譯過程,以加快其執行效率。因此PHP網站使用緩存器 是完全有必要的!主流的PHP緩存器有:eAccelerator、XCache

第五層:動靜分離

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

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

第六層:數據庫緩存

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

第七層:數據庫

這層在整個網站架構中起著主導型作用,直接決定用戶體驗,相對架構優化也比較復雜,具體請參考博文:《運維角度淺談 MySQL 數據庫優化

核心思路:減少請求層,盡可能讓前端層返回用戶請求的數據,減少后端服務器訪問頻率,最重要是數據庫層。

責任編輯:王雪燕 來源: 李振良
相關推薦

2015-07-17 10:05:03

面試思考

2010-01-07 13:50:01

網吧交換機

2010-12-14 10:21:53

2011-02-24 09:56:26

組網網絡

2018-11-08 09:10:18

組網光纖網絡

2009-12-21 16:10:28

2010-04-15 04:03:20

華碩服務器

2010-08-23 12:12:58

2015-06-11 17:10:49

局域網布線技術

2018-10-08 05:23:20

2020-06-26 08:20:12

物聯網智慧城市IOT

2009-07-11 14:46:44

ADSL光纖企業

2014-09-28 14:28:12

硬盤加密全盤加密

2010-08-24 10:04:45

中小型企業虛擬化

2009-11-24 09:51:22

路由設計方案

2014-04-11 13:47:14

雙主架構MySQL

2012-03-30 16:43:59

云計算中小企業安全

2011-01-21 15:59:21

Sendmail

2009-07-16 10:18:17

多模光纜布線

2009-10-10 10:20:05

網絡布線系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久精品视频 | 欧美日韩亚洲在线 | 国产99热 | 青青草网 | 天天操天天天 | 欧美 日韩 国产 一区 | 国产精品美女www爽爽爽 | 免费精品 | 色视频www在线播放国产人成 | 亚洲欧美一区二区三区1000 | 久久国产精品网站 | 在线观看av网站永久 | 中文字幕乱码亚洲精品一区 | 免费艹逼视频 | 91精品国产日韩91久久久久久 | 懂色中文一区二区三区在线视频 | 欧美视频三区 | 中文字幕蜜臀av | 日韩电影一区 | 欧美啪啪| 中文字幕综合 | 欧洲毛片 | 精品综合久久久 | 夜夜草 | 毛片一级网站 | 午夜小视频免费观看 | 国产精品成人一区二区三区 | 精品久久久久久久久久久院品网 | 中文字幕亚洲区一区二 | www精品美女久久久tv | 91视频在线观看免费 | 九九热精品在线 | 99精品国产一区二区三区 | 97久久精品午夜一区二区 | 国内精品久久久久 | 日韩在线视频观看 | 亚洲国产精品一区二区第一页 | 日日摸夜夜添夜夜添精品视频 | 欧美区在线 | h片在线看 | 亚洲精品在线视频 |