Web网站架构设计(转)
| 目錄 [隱藏/顯示] 1 - Web負(fù)載均衡 ???1.1 - 使用商業(yè)硬件實(shí)現(xiàn) ???1.2 - 使用開(kāi)源軟件 ???1.3 - 使用windows自帶的互載均衡軟件 ???1.4 - 總結(jié) 2 - 靜態(tài)網(wǎng)站 ???2.1 - 靜態(tài)域名劃分 ???2.2 - 靜態(tài)網(wǎng)站的緩存 ??????2.2.1 - 使用CDN ??????2.2.2 - 自己搭建CDN 3 - 動(dòng)態(tài)網(wǎng)站 ???3.1 - 域名劃分 ???3.2 - 文件上傳及顯示 ??????3.2.1 - 存放在數(shù)據(jù)庫(kù) ??????3.2.2 - 存放在文件服務(wù)器 ???3.3 - 動(dòng)態(tài)網(wǎng)站內(nèi)容更新 ???3.4 - 動(dòng)態(tài)網(wǎng)站緩存技術(shù) ???3.5 - 配置文件 ??????3.5.1 - 通過(guò)同步軟件實(shí)現(xiàn) ??????3.5.2 - 通過(guò)配置服務(wù)實(shí)現(xiàn) ??????3.5.3 - 通過(guò)數(shù)據(jù)庫(kù)實(shí)現(xiàn) 4 - 網(wǎng)頁(yè)性能 ???4.1 - 網(wǎng)頁(yè)壓縮 ???4.2 - 網(wǎng)頁(yè)客戶端緩存 ???4.3 - 網(wǎng)頁(yè)開(kāi)發(fā)內(nèi)容調(diào)整 5 - 數(shù)據(jù)庫(kù) ???5.1 - 數(shù)據(jù)庫(kù)規(guī)劃 ???5.2 - 數(shù)據(jù)庫(kù)劃分 ???5.3 - 表劃分 6 - 服務(wù)器監(jiān)控 7 - 附:Web系統(tǒng)邏輯架構(gòu)圖 |
知識(shí)在于分享,本文內(nèi)容主要是我工作中的經(jīng)驗(yàn)總結(jié)。里面所說(shuō)的每一節(jié)如果單獨(dú)詳細(xì)寫(xiě)基本上不是一篇文章可以解決了。大家如對(duì)本文有什么想法和建議的歡迎來(lái)信討論。
1 - Web負(fù)載均衡
1.1 - 使用商業(yè)硬件實(shí)現(xiàn)
最常用的F5 與citrix netscaler。比如12306前端的web好像用的就是F5 的BIGIP。如果公司資金足夠的話,相對(duì)使用開(kāi)源軟件來(lái)說(shuō)理方便。?
優(yōu)點(diǎn):維護(hù)方便,性能穩(wěn)定?
缺點(diǎn):費(fèi)用太高?
1.2 - 使用開(kāi)源軟件
可選擇使用lvs或者nginx做web應(yīng)用的負(fù)載均衡。?
Lvs工作在tcp 協(xié)議4層下,而nginx工作在tcp協(xié)議7層下。4層和7層差別舉個(gè)實(shí)際例子:member.app.com,shop.app.com域名對(duì)外只有一 個(gè)ip,通過(guò)lvs指向后臺(tái)10.0.0.1-10.0.0.10 這10臺(tái)機(jī)器。你必須在這10臺(tái)機(jī)器上都配置好member.app.com和shop.app.com的網(wǎng)站內(nèi)容。這10臺(tái)服務(wù)器都承載著 member.app.com和shop.app.com的前端請(qǐng)求,如果哪天你發(fā)現(xiàn)member.app.com的請(qǐng)求大于shop.app.com的 請(qǐng)求。想把shop.app.com請(qǐng)求只限定在10.0.0.1-10.0.0.5 這5臺(tái)機(jī)器上,而member.app.com還是指向10.0.0.1-10.0.0.10這10臺(tái)機(jī)器。你請(qǐng)必須將member.app.com和 shop.app.com域名重新指向不同的ip來(lái)實(shí)現(xiàn)。而通過(guò)nginx則可以實(shí)現(xiàn)修改配置文件即可實(shí)現(xiàn)。不必將member.app.com和 shop.app.com域名指向不同的外網(wǎng)ip.?
相對(duì)lvs來(lái)說(shuō),nginx所能實(shí)現(xiàn)的功能也比較多。不過(guò)相對(duì)于穩(wěn)定和性能上來(lái)說(shuō)還是lvs性能好一些。?
優(yōu)點(diǎn):免費(fèi),開(kāi)源。性能穩(wěn)定。?
缺點(diǎn):維護(hù)配置成本高?
附:nginx與lvs做負(fù)載均衡的比較?
1.3 - 使用windows自帶的互載均衡軟件
Windows2003 的服務(wù)器都自帶有NLB來(lái)實(shí)現(xiàn)。實(shí)現(xiàn)機(jī)制類似于lvs,無(wú)法做到以上nginx七層協(xié)議。使用windows實(shí)現(xiàn)是通過(guò)廣播方式將請(qǐng)求發(fā)向同一網(wǎng)段的所有 ip。如果通過(guò)NLB實(shí)現(xiàn),最好將同一組NLB的服務(wù)器劃分在同一個(gè)vlan下。以防止廣播到其它的ip上,增加交換機(jī)的流量。?
優(yōu)點(diǎn):免費(fèi)(只要有windows就自帶了),配置方便。不用增加單獨(dú)服務(wù)器。?
缺點(diǎn):數(shù)據(jù)廣播方式實(shí)現(xiàn),需要配置vlan解決。?
1.4 - 總結(jié)
相 對(duì)上面三種方式實(shí)現(xiàn)的互載均衡都有各自優(yōu)點(diǎn)。如果小型windows網(wǎng)站服務(wù)器,采用windows下的nlb實(shí)現(xiàn)還是不錯(cuò)的選擇。不用增加單獨(dú)的服務(wù) 器。大型以上網(wǎng)站建議還是采用硬件(F5 big-ip)或開(kāi)源下的lvs和nginx來(lái)實(shí)現(xiàn)。個(gè)人還是比較便向于nginx來(lái)實(shí)現(xiàn),方便動(dòng)態(tài)的對(duì)web的服務(wù)器進(jìn)行調(diào)整。?
2 - 靜態(tài)網(wǎng)站
靜態(tài)網(wǎng)站相對(duì)來(lái)說(shuō)存儲(chǔ)靜態(tài)網(wǎng)頁(yè)內(nèi)容(html,js,css,jpg,png)和用戶上傳文件及圖片。?
2.1 - 靜態(tài)域名劃分
相 對(duì)靜態(tài)網(wǎng)站來(lái)說(shuō)建議將css,jpg,png及用戶上傳文件放在和主網(wǎng)站不同的域名上。不是指二級(jí)域名,是一級(jí)域名。如主網(wǎng)站用 www.website.com ,而css,jpg,png及用戶上傳文件使用file.imageswebsite.com域名。這樣好處主要是可以減少主域名的cookies發(fā)送到 不需要使用cookies的文件服務(wù)器上。可以起到加快用戶訪問(wèn)和減少服務(wù)器流量作用。比如:將用戶的登入信息cookies寫(xiě)入到 website.com域名下,每當(dāng)瀏覽器請(qǐng)求website.com域名下(包括二級(jí)域名)的任何網(wǎng)址都會(huì)將cookies信息發(fā)送請(qǐng)求的網(wǎng)址信息頭 上。將不需要訪問(wèn)用戶cookies的文件放在不同的域名下,將不會(huì)發(fā)送cookies信息。 大家有興趣可以用firebug進(jìn)行監(jiān)控查看。
2.2 - 靜態(tài)網(wǎng)站的緩存
2.2.1 - 使用CDN
如果資金允許,可使用商業(yè)的CDN服務(wù)。只需將域名指向CDN服務(wù)商指定的服務(wù)器即可對(duì)靜態(tài)網(wǎng)站使用CDN加速。國(guó)內(nèi)常見(jiàn)的CDN網(wǎng)宿、藍(lán)訊、帝盟等。?
2.2.2 - 自己搭建CDN
如果你在全國(guó)各機(jī)房都有服務(wù)器也可以自己搭建CDN服務(wù)。?
使用硬件(F5 big-ip),根據(jù)用戶請(qǐng)求的ip,將用戶指到最近的idc機(jī)房服務(wù)器上。然后在各idc機(jī)房服務(wù)器上使用squid做反向代理從源服務(wù)器讀取靜態(tài)網(wǎng)站,對(duì)網(wǎng)站內(nèi)容和用戶上傳圖片的緩存。從而實(shí)現(xiàn)內(nèi)容的加速。?
3 - 動(dòng)態(tài)網(wǎng)站
動(dòng)態(tài)網(wǎng)站相對(duì)靜態(tài)網(wǎng)站來(lái)說(shuō),和用戶的交互性多。開(kāi)發(fā)動(dòng)態(tài)網(wǎng)站的技術(shù)相對(duì)來(lái)說(shuō)也是多種多樣(asp.net,php,jsp等)。?
3.1 - 域名劃分
動(dòng)態(tài)網(wǎng)站域名建議根據(jù)功能點(diǎn),使用二級(jí)域名來(lái)進(jìn)行劃分。比如一個(gè)電子商務(wù)網(wǎng)站,包括會(huì)員,商城,訂單,支付,管理后臺(tái)等。?
會(huì)員 member.website.com?
商城 shop.website.com?
訂單 Order.website.com?
支付 pay.website.com?
管理后臺(tái) manager.website.com?
原則上動(dòng)態(tài)域名下只存動(dòng)態(tài)程序,動(dòng)態(tài)網(wǎng)站用到的css,圖片都應(yīng)該在靜態(tài)域名的圖片服務(wù)器(file.imageswebsite.com)上。為動(dòng)態(tài)域名下程序減少流量和請(qǐng)求。?
動(dòng)態(tài)網(wǎng)站使用二級(jí)域名來(lái)劃分功能有個(gè)好處可以實(shí)現(xiàn)cookies信息的共享。所有二級(jí)域名只需要將cookies信息寫(xiě)入website.com域名下,在其它的xxx.website.com域名下都能正常讀取。從而為實(shí)現(xiàn)在各個(gè)動(dòng)態(tài)域名上的統(tǒng)一認(rèn)證而方便。?
附:Asp.net下from認(rèn)證統(tǒng)一認(rèn)證配置?
3.2 - 文件上傳及顯示
由于我們動(dòng)態(tài)網(wǎng)站是多臺(tái)部署,當(dāng)用戶上傳文件時(shí)我們不能像單臺(tái)服務(wù)器那樣存在本地服務(wù)器上(其它服務(wù)器無(wú)法讀取)。而是需要將用戶文件做一個(gè)集中的存放地方。?
3.2.1 - 存放在數(shù)據(jù)庫(kù)
所有web服務(wù)器,將用戶的上傳文件保存在數(shù)據(jù)庫(kù)中。統(tǒng)一從數(shù)據(jù)庫(kù)中讀取和寫(xiě)入。?
最不推薦方式。相對(duì)來(lái)說(shuō)數(shù)據(jù)庫(kù)的資源是最昂貴的,用來(lái)存用戶文件是最浪費(fèi)了。另外,當(dāng)用戶數(shù)據(jù)越來(lái)越大時(shí),對(duì)dba來(lái)說(shuō)是一個(gè)最痛苦的問(wèn)題。不方便做緩存及文件分發(fā)同步。?
3.2.2 - 存放在文件服務(wù)器
寫(xiě)入?
a)在文件服務(wù)器上安裝ftp服務(wù)器。然后各web服務(wù)器,通過(guò)模擬ftp客戶端。通過(guò)服務(wù)器的內(nèi)網(wǎng),將文件上傳到文件服務(wù)器上。( C#模擬ftp方式,大家可以下載discuz nt源碼查看,里面有實(shí)現(xiàn)方式。)?
b)通過(guò)windows內(nèi)局域網(wǎng)的共享文件夾,各web服務(wù)器模擬windows用戶訪問(wèn)共享文夾寫(xiě)入到文件服務(wù)器上。?
讀取?
對(duì)文件的讀取,如果是非公開(kāi)的文件,還是通過(guò)原有寫(xiě)文件服務(wù)器的方式讀取。?
如果是公開(kāi)性的文件,如分圖片。在文件服務(wù)器上建方個(gè)web網(wǎng)站做為數(shù)據(jù)源,將根目錄指到用戶上傳的文件夾。然后通過(guò)文章上述 “靜態(tài)網(wǎng)站緩存”方式,對(duì)用戶上傳文件網(wǎng)站做cdn的分發(fā)和緩存。從而對(duì)用戶上傳文件進(jìn)行加速訪問(wèn)。?
3.3 - 動(dòng)態(tài)網(wǎng)站內(nèi)容更新
由于動(dòng)態(tài)網(wǎng)站的分布式部署,從而導(dǎo)致一個(gè)網(wǎng)站的更新需要同步到其它的服務(wù)器上。建議提供一臺(tái)專門的測(cè)試web服務(wù)器,每次更新將文件上傳到測(cè)試服務(wù)器上。 測(cè)試通過(guò)后,再通過(guò)同步軟件,將更新的網(wǎng)站文件同步到其它的web服務(wù)器上。可使用rsync實(shí)現(xiàn)文件同步,有l(wèi)inux和windows版的。 Windows安裝rsync覺(jué)得麻煩也可以用 臥天同步王等相關(guān)軟件來(lái)實(shí)現(xiàn)。?
3.4 - 動(dòng)態(tài)網(wǎng)站緩存技術(shù)
Memcached?
Linux和windows下都有對(duì)應(yīng)的客戶端和服務(wù)端。如果對(duì)性能要求高建議安裝linux下的服務(wù)端性能高些。客戶端可以用.net,php進(jìn)行調(diào)用。?
開(kāi)發(fā)相關(guān)緩存服務(wù)?
大家也可以根據(jù)自己業(yè)務(wù)的需要,開(kāi)發(fā)自己的分布式緩存服務(wù)。緩存算法常用LRU算法,經(jīng)常使用排序在最前面。緩存服務(wù)相關(guān)算法介紹?
http://www.blogjava.net/DL88250/archive/2011/01/21/343327.html?
在.net下可以通過(guò) remoting進(jìn)行分部式緩存的開(kāi)發(fā)。?
分布式的緩存大家可以參考?
http://wenku.baidu.com/view/0d0ef4ea81c758f5f61f67d9.html?
3.5 - 配置文件
一般我們的應(yīng)用程的配置文件都是放在當(dāng)前程序目錄下。由于我們web應(yīng)用程序是分開(kāi)部署,如果一個(gè)配置節(jié)點(diǎn)內(nèi)容修改。就需要同步到其它的服務(wù)器上。另外一般程序都在初始化讀取配置內(nèi)容。如果在程序運(yùn)行中修改了配置只有重新啟動(dòng)程序進(jìn)行更新。這就出現(xiàn)了一個(gè)配置同步的問(wèn)題。?
3.5.1 - 通過(guò)同步軟件實(shí)現(xiàn)
類似動(dòng)態(tài)網(wǎng)站內(nèi)容更新一樣,使用rsync或都同步軟件對(duì)配置文件進(jìn)行同步。當(dāng)UAT環(huán)境配置修改后,手工或定時(shí)將文件同步。應(yīng)用程序定時(shí)從配置文件中更新配置。?
3.5.2 - 通過(guò)配置服務(wù)實(shí)現(xiàn)
自己開(kāi)發(fā)配置服務(wù)程序,提供接口給各個(gè)應(yīng)用程序讀取配置方式。配置服務(wù)程序和各應(yīng)用通過(guò) tcp方式實(shí)時(shí)實(shí)現(xiàn)配置內(nèi)容讀取。?
3.5.3 - 通過(guò)數(shù)據(jù)庫(kù)實(shí)現(xiàn)
將配置內(nèi)容寫(xiě)入數(shù)據(jù)庫(kù),各應(yīng)用程序通過(guò)讀取數(shù)據(jù)庫(kù)配置實(shí)現(xiàn)。各應(yīng)用程序初始化從數(shù)據(jù)庫(kù)中讀取配置內(nèi)容,讀取完成后每隔固定時(shí)間從數(shù)據(jù)庫(kù)中更新內(nèi)容到本地。?
4 - 網(wǎng)頁(yè)性能
4.1 - 網(wǎng)頁(yè)壓縮
靜態(tài)網(wǎng)站壓縮可以通過(guò)反向代理squid進(jìn)行配置。常用瀏覽器都支持gzip網(wǎng)頁(yè)格式的壓縮。?
動(dòng)態(tài)網(wǎng)站的話,各平臺(tái)的 web服務(wù)器都有提供網(wǎng)頁(yè)壓縮的配置選項(xiàng)。基本上大家上google搜一搜都解決了。?
4.2 - 網(wǎng)頁(yè)客戶端緩存
在web服務(wù)器上設(shè)置靜態(tài)網(wǎng)頁(yè)文件的 Last-Modified和ETag 。如果服務(wù)器上文件沒(méi)有更新,則不發(fā)送新的內(nèi)容到客戶端。?
4.3 - 網(wǎng)頁(yè)開(kāi)發(fā)內(nèi)容調(diào)整
a)將多個(gè)js文件或css文件合并同一個(gè)文件。以減少http的請(qǐng)求。每個(gè)瀏覽器對(duì)同一時(shí)間下,同一域名下的http請(qǐng)求有連接限制。?
b)將css文件樣式放在網(wǎng)頁(yè)文件內(nèi)容的頭部,js文件放在網(wǎng)頁(yè)文件的底部。讓瀏覽先加載css文件,以便第一時(shí)間向用戶展示界面。?
c)網(wǎng)頁(yè)小icon可以合并成同一個(gè)大的文件icon,以減少http的請(qǐng)求。通過(guò)CSS Sprites 實(shí)現(xiàn)單個(gè)文件的顯示。?
d)在firefox下安裝 YSlow 對(duì)網(wǎng)頁(yè)進(jìn)行性能加載測(cè)試,根據(jù)測(cè)試建議對(duì)網(wǎng)頁(yè)內(nèi)容進(jìn)行優(yōu)化。?
5 - 數(shù)據(jù)庫(kù)
建 立數(shù)據(jù)庫(kù)時(shí),有一個(gè)數(shù)據(jù)庫(kù)預(yù)分配空間。建議初始分大一些,這樣好處避免了在插入數(shù)據(jù)時(shí)達(dá)到數(shù)據(jù)庫(kù)分配的空間。數(shù)據(jù)庫(kù)自動(dòng)分配數(shù)據(jù)庫(kù)空間影響數(shù)據(jù)庫(kù)插入的性 能。另外,數(shù)據(jù)庫(kù)的自動(dòng)增長(zhǎng)建議按具體大小增長(zhǎng),比如2G根據(jù)你自己預(yù)計(jì)的大小。防止過(guò)快達(dá)到數(shù)據(jù)庫(kù)上限導(dǎo)至系統(tǒng)頻繁為庫(kù)分配空間。?
5.1 - 數(shù)據(jù)庫(kù)規(guī)劃
Web 網(wǎng)站常用數(shù)據(jù)mysql,mssql,oracle,當(dāng)然還有其它的一些數(shù)據(jù)庫(kù)。基本上這三種數(shù)據(jù)庫(kù)都有自己的優(yōu)缺點(diǎn)。Mysql免費(fèi)開(kāi)源,mssql和 oracle都是商業(yè)軟件。oracle用于大型企業(yè)數(shù)據(jù)庫(kù)較多,一般電信銀行用的oracle多些。而mssql相對(duì)來(lái)說(shuō)少。從dba專業(yè)上來(lái)說(shuō) oracle相比mssql性能好些,當(dāng)然價(jià)格也貴。從最近幾年mssql已經(jīng)在慢慢追上。數(shù)據(jù)庫(kù)也可以考慮nosql類數(shù)據(jù)庫(kù),mongodb、 Redis等。另外開(kāi)源的PostgreSQL據(jù)說(shuō)也不錯(cuò),有空大家可以看一看(http://bbs.chinaunix.net/thread- 1688208-1-1.html)?
5.2 - 數(shù)據(jù)庫(kù)劃分
根據(jù)業(yè)務(wù)應(yīng)用來(lái)進(jìn)行劃分?jǐn)?shù)據(jù)庫(kù)。如我們上面的電子商務(wù)網(wǎng)站我們可以分為member,shop二個(gè)庫(kù)。Member存儲(chǔ)用于會(huì)員信息,shop庫(kù)存儲(chǔ)商品,訂單,支付信息。?
5.3 - 表劃分
建議對(duì)大數(shù)據(jù)進(jìn)行表的劃分,劃分規(guī)則可按記錄數(shù),記錄時(shí)間,記錄的hash值進(jìn)行劃分。?
如果資金允許的話,可以考慮上存儲(chǔ)設(shè)備。對(duì)數(shù)據(jù)性能的提升是巨大的。?
6 - 服務(wù)器監(jiān)控
這里所說(shuō)的服務(wù)器監(jiān)控只是針對(duì)web服務(wù)器的運(yùn)行狀態(tài)的監(jiān)控。比如網(wǎng)絡(luò)流量,cpu,內(nèi)存,硬盤(pán)負(fù)載。服務(wù)器監(jiān)控常見(jiàn)通過(guò)SNMP協(xié)議進(jìn)行,在linux 和 windows下都通用。針對(duì)服務(wù)器監(jiān)控我這推薦使用cacti軟件進(jìn)行。服務(wù)器上都配置有雙網(wǎng)卡,一個(gè)內(nèi)網(wǎng),一個(gè)外網(wǎng)。在內(nèi)網(wǎng)卡上增加snmp協(xié)議,然 后在cacti 中增加需要監(jiān)控的服務(wù)器。給cacti 個(gè)外網(wǎng)ip就可以通過(guò)web界面進(jìn)行查看服務(wù)器的狀態(tài)了。Cacti軟件的介紹和配置大家可以上網(wǎng)搜搜,這里就不做介紹了。Cacti還可以監(jiān)控服務(wù)器上 運(yùn)行進(jìn)程,如果進(jìn)程停止運(yùn)行可以發(fā)出報(bào)警郵件。?
7 - 附:Web系統(tǒng)邏輯架構(gòu)圖
?
Web架構(gòu)圖源文件下載?
aa
轉(zhuǎn)載于:https://www.cnblogs.com/tonykan/archive/2013/05/21/3091463.html
總結(jié)
以上是生活随笔為你收集整理的Web网站架构设计(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: jsp的flash小例子
- 下一篇: Persist Security Inf