中小型網(wǎng)站架構(gòu)分析及優(yōu)化_第1頁
中小型網(wǎng)站架構(gòu)分析及優(yōu)化_第2頁
中小型網(wǎng)站架構(gòu)分析及優(yōu)化_第3頁
中小型網(wǎng)站架構(gòu)分析及優(yōu)化_第4頁
中小型網(wǎng)站架構(gòu)分析及優(yōu)化_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

-.z中小型架構(gòu)分析及優(yōu)化本文章來自于阿里云云棲社區(qū)摘要:先看架構(gòu)圖:以上架構(gòu)廣泛運用中大型中,本文從架構(gòu)每一層分析所用主流技術(shù)和解決手段,有助于初入運維朋友們,進一步對架構(gòu)認識,從而自己形成一套架構(gòu)概念。第一層:CDN國內(nèi)網(wǎng)絡(luò)分布主要南電信北聯(lián)通,造成跨地區(qū)延遲大問題,對于有一定量來說,增加CDN〔內(nèi)容分發(fā)網(wǎng)絡(luò)〕層可有效改善此現(xiàn)象,也是加速的最好選擇。先看架構(gòu)圖:以上架構(gòu)廣泛運用中大型中,本文從架構(gòu)每一層分析所用主流技術(shù)和解決手段,有助于初入運維朋友們,進一步對架構(gòu)認識,從而自己形成一套架構(gòu)概念。第一層:CDN國內(nèi)網(wǎng)絡(luò)分布主要南電信北聯(lián)通,造成跨地區(qū)延遲大問題,對于有一定量來說,增加CDN〔內(nèi)容分發(fā)網(wǎng)絡(luò)〕層可有效改善此現(xiàn)象,也是加速的最好選擇。CDN把頁面緩存到全國分布的節(jié)點上,用戶時從最近的機房獲取數(shù)據(jù),這樣大大減少網(wǎng)絡(luò)的路徑。如果想自己搭建CDN,不建議這么做,因為什么呢.其實說白了,就是什么事別往運維上攔。CDN架構(gòu)部署不復雜,影響效果的因素卻很多,后期管理維護也比較復雜,想到達預期的效果確非易事,這是一個費力不討好的活,最后老板還是感覺是你能力缺乏。建議找專做CDN的公司,費用也不貴,有抗流量攻擊能力,效果也很好,運維也少很多事,何樂而不為呢!第二層:反向代理〔網(wǎng)頁緩存〕如果CDN沒有緩存要請求的數(shù)據(jù)則向這層發(fā)起請求,在代理效勞器配置緩存功能〔本地〕,代理效勞器就查找本地緩存是否有CDN請求的數(shù)據(jù),如果有就直接返回給CDN,如果沒有則請求后端負載均衡器然后轉(zhuǎn)發(fā)給WEB效勞器返回數(shù)據(jù)給代理效勞器,代理效勞器再將結(jié)果給CDN。代理效勞器一般緩存不經(jīng)常變動的靜態(tài)頁面,如image、js、css、html等,主流的緩存軟件有Squid、Varnish、Ngin*。第三層:負載均衡量較大的都會用到負載均衡,因為這是解決單臺效勞器性能瓶頸的最好方法。反向代理將請求轉(zhuǎn)發(fā)給負載均衡器,負載均衡器根據(jù)算法〔輪訓、負載情況選擇后端等〕交給后端WEB效勞處理,WEB效勞處理完成后直接返回數(shù)據(jù)給反向代理效勞器。負載均衡合理分配請求給后端多臺WEB效勞器,減輕單臺效勞器并發(fā)負載,并保證效勞可用性。主流的負載均衡軟件有LVS、HAPro*y、Ngin*。第四層:WEB效勞WEB效勞是處理用戶請求的,WEB效勞處理效率,直接影響到速度,為防止這層因素造成慢,應對其進展調(diào)優(yōu),讓WEB效勞發(fā)揮到最正確狀態(tài)。常見的WEB效勞有Apache和Ngin*。Apache優(yōu)化:1).mod_deflate壓縮模塊查看是否加載:1*

apachectl

–M

|grep

deflate如果沒有安裝使用ap*s編譯進去:1*

/usr/local/apache/bin/ap*s

–c

–I

–A

apache源碼目錄/modules/mod_deflate.cdeflate配置參數(shù):123456<IfModulemod_deflate.c>DeflatepressionLevel6

*壓縮等級〔1-9〕,數(shù)值越大效率越高,消耗CPU也就越高SetOutputFilterDEFLATE

*啟用壓縮AddOutputFilterByTypeDEFLATE

te*t/html

te*t/plain

te*t/*ml

*壓縮類型AddOutputFilterByTypeDEFLATE

css

js

html

htm

*ml

php

</IfModule>2).mod_e*pires緩存模塊查看是否加載:1*

apachectl

–M

|grep

e*pires如果沒有安裝使用ap*s編譯進去:1*

/usr/local/apache/bin/ap*s

–c

–I

–A

apache源碼目錄/modules/mod_e*pires.c再在d.conf啟用模塊:LoadModulee*pires_modulemodules/mod_e*pires.so緩存機制有三種用法:全局、目錄和虛擬主機全局配置,在配置文件末尾添加:123456<IfModulemod_e*pires.c>E*piresActiveon

*啟用有效期控制,會自動去除已過期的緩存,然后從效勞器獲取新的E*piresDefault

"accessplus

1

days"

*默認任意格式的文檔都是1天后過期E*piresByTypete*t/html

"access

plus

12

months"

E*piresByTypeimage/jpg

"access

plus

12

months"

*jpg格式圖片緩存12月</IfModule>3).工作模式選擇及優(yōu)化apache有兩種常見工作模式,worker和prefork,默認是worker,是混合型的MPM〔多路處理模塊〕,支持多進程和多線程,由線程來處理請求,所以可以處理更多請求,提高并發(fā)能力,系統(tǒng)資源開銷也小于基于進程的MPM,由于線程使用進程內(nèi)存空間,進程崩潰會導致其下線程崩潰。而prefork是非線程型MPM,進程占用系統(tǒng)資源也比worker多,由于進程處理連接,在工作效率上也比worker更穩(wěn)定??赏ㄟ^apache2–l查看當前工作模式,在編譯時使用—with-mpm參數(shù)指定工作模式。根據(jù)自己業(yè)務(wù)需求選擇不同工作模式,再適當增加工作模式相關(guān)參數(shù),可提高處理能力。配置參數(shù)說明:12345678<IfModuleprefork.c>StartServers

8

*默認啟動8個d進程MinSpareServers

5

*最小的空閑進程數(shù)Ma*SpareServers

20

*最大的空閑進程數(shù),如果大于這個值,apache會自動kill一些進程ServerLimit

256

*效勞器允許進程數(shù)的上限Ma*Clients

256

*同時最多發(fā)起多少個,超過則進入隊列等待Ma*RequestsPerChild

4000

*每個進程啟動的最大線程</IfModule>Ngin*優(yōu)化:1).gzip壓縮模塊12345678910

{

……

gzip

on;

gzip_min_length

1k;

*允許壓縮的頁面最小字節(jié)數(shù),默認是0,多大都壓縮,小于1k的可能適得其反

gzip_buffers

4

16k;

*gzip申請內(nèi)存的大小,按數(shù)據(jù)大小的4倍去申請內(nèi)存

gzip__version

1.0;

*識別協(xié)議版本

gzip_p_level

2;

*壓縮級別,1壓縮比最小,處理速度最快,9壓縮比最大,處理速度最慢

gzip_types

te*t/plainapplication/*-javascriptte*t/css

application/*ml

image/jpg;

*壓縮數(shù)據(jù)類型

gzip_vary

on;

*根據(jù)客戶端的頭來判斷,是否需要壓縮}2).e*pires緩存模塊12345678910server

{

location

~

.*\.(gif|jpg|png|bmp|swf)$

*緩存數(shù)據(jù)后綴類型

{

e*pires

30d;

*使用e*pires緩存模塊,緩存到客戶端30天

}

location

~

.*\.(

jsp|js|css)?$

{

e*pires

1d;

}}3).fastcgi優(yōu)化ngin*不支持直接調(diào)用或者解析動態(tài)程序〔php〕,必須通過fastcgi〔通用網(wǎng)關(guān)接口〕來啟動php-fpm進程來解析php腳本。也就是說用戶請求先到ngin*,ngin*再將動態(tài)解析交給fastcgi,fastcgi啟動php-fpm解析php腳本。所以我們有必要對fastcgi和php-fpm進展適當?shù)膮?shù)優(yōu)化。12345678910111213141516

{

……

fastcgi_cache_path/usr/local/ngin*/fastcgi_cache

levels=1:2

keys_zone=TEST:10m

inactive=5m;

*

FastCGI緩存指定一個文件路徑、目錄構(gòu)造等級、關(guān)鍵字區(qū)域存儲時間和非活動刪除時間

fastcgi_connect_timeout

300;

*指定連接到后端FastCGI的超時時間

fastcgi_send_timeout

300;

*指定向FastCGI傳送請求的超時時間

fastcgi_read_timeout

300;

*指定接收FastCGI應答的超時時間

fastcgi_buffer_size

64k;

*指定讀取FastCGI應答第一局部需要多大的緩沖區(qū)

fastcgi_buffers

4

64k;

*指定本地需要用多少盒多大的緩沖區(qū)來緩沖FastCGI的應答請求

fastcgi_busy_buffers_size

128k;

fastcgi_temp_file_write_size

128k;

*表示在寫入緩存文件時使用多大的數(shù)據(jù)塊,默認值是fastcgi_buffers的兩倍

fastcgi_cache

TEST;

*開啟fastcgi_cache緩存并指定一個TEST名稱

fastcgi_cache_valid

200

302

1h;

*指定200、302應答代碼的緩存1小時

fastcgi_cache_valid

301

1d;

*將301應答代碼緩存1天

fastcgi_cache_valid

any

1m;

*將其他應答均緩存1分鐘{php-fpm.conf配置參數(shù):12345pm

=dynamic

*兩種控制子進程方式〔static和dynamic〕pm.ma*_children=

5

*同一時間存活的最大子進程數(shù)pm.start_servers=

2

*啟動時創(chuàng)立的進程數(shù)pm.min_spare_servers=

1

*最小php-fpm進程數(shù)pm.ma*_spare_servers=

3

*最大php-fpm進程數(shù)4).pro*y_cache本地緩存模塊123456789101112131415161718192021

{

……

pro*y_temp_path

/usr/local/ngin*/pro*y_cache/temp;

*緩存臨時目錄

pro*y_cache_path

/usr/local/ngin*/pro*y_cache/cache

levels=1:2

keys_zone=one:10m

inactive=1d

ma*_size=1g;

*緩存文件實際目錄,levels定義層級目錄,1:2說明1是一級目錄,2是二級目錄,keys_zone存儲元數(shù)據(jù),并分配10M內(nèi)存空間。inctive表示1天沒有被的緩存就刪除,默認10分鐘。ma*_size是最大分配磁盤空間

server

{

listen

80;

server_name

0;

location

/

{

pro*y_cache

one;

*調(diào)用緩存區(qū)

*pro*y_cache_valid

200

304

12h;

*可根據(jù)狀態(tài)碼設(shè)置不同的緩存時間

pro*y_cache_valid

any

10m;

*緩存有效期為10分鐘

}

*去除URL緩存,允許來自哪個網(wǎng)段的IP可以去除緩存〔需要安裝第三方模塊"ng*_cache_purge"〕,去除URL緩存方法:文件名

location

~

/purge(/.*){

allow

;

allow

/24;

deny

all;

pro*y_cache_purge

cache_one$host$1$is_args$args;

}

}小結(jié):啟用壓縮模塊可以節(jié)省一局部帶寬,會增加WEB端CPU處理,但在上圖架構(gòu)中,WEB端啟用壓縮模塊并沒有起到作用,因為傳輸?shù)缴蠈幼叩氖蔷钟蚓W(wǎng)。對于直接面向用戶的架構(gòu)還是要啟用的。WEB也不用啟用e*pires模塊,因為有了反向代理效勞器和CDN,所以到不了用戶瀏覽器,開啟起不到作用。如果反向代理使用ngin*做代理,可開啟e*pires模塊,將靜態(tài)文件緩存到用戶瀏覽器,瀏覽器發(fā)起請求時,先判斷本地緩存是否有請求的數(shù)據(jù),如果有再判斷是否過期,如果不過期就直接瀏覽緩存數(shù)據(jù),哪怕效勞器資源已經(jīng)改變,所以要根據(jù)業(yè)務(wù)情況合理設(shè)置過期時間。5.利用PHP緩存器提高代碼執(zhí)行效率php程序在沒有使用緩存器情況下,每次請求php頁面,php都會對此頁面進展代碼編譯,這就意味著重復的編譯工作會增加效勞器負載。有了緩存器就會把每次編譯后的數(shù)據(jù)緩存到共享內(nèi)存中,下次直接使用緩沖區(qū)已編譯好的代碼,從而防止重復的編譯過程,以加快其執(zhí)行效率。因此PHP使用緩存器是完全有必要的!主流的PHP緩存器有:eAccelerator、*Cache第五層:動靜別離動靜別離,顧名思義,是將動態(tài)頁面和靜態(tài)頁面別離到不同效勞器上處理,比方使用web是ngin*,可以讓fastcgi部署到單獨一臺效勞器,專門解析p

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論