Web網站架構設計考慮的因素

1    Web負載均衡

1.1 - 使用商業硬件實現

最常用的F5 與citrix netscaler。比如12306前端的web好像用的就是F5 的BIGIP。如果公司資金足夠的話,相對使用開源軟件來說理方便。
優點:維護方便,性能穩定
缺點:費用太高

1.2 - 使用開源軟件

可選擇使用lvs或者nginx做web應用的負載均衡。
Lvs工作在tcp 協議4層下,而nginx工作在tcp協議7層下。4層和7層差別舉個實際例子:member.app.com,shop.app.com域名對外只有一 個ip,通過lvs指向後臺10.0.0.1-10.0.0.10 這10臺機器。你必須在這10臺機器上都配置好member.app.com和shop.app.com的網站內容。這10臺服務器都承載着 member.app.com和shop.app.com的前端請求,如果哪天你發現member.app.com的請求大於shop.app.com的 請求。想把shop.app.com請求只限定在10.0.0.1-10.0.0.5 這5臺機器上,而member.app.com還是指向10.0.0.1-10.0.0.10這10臺機器。你請必須將member.app.com和 shop.app.com域名重新指向不同的ip來實現。而通過nginx則可以實現修改配置文件即可實現。不必將member.app.com和 shop.app.com域名指向不同的外網ip.
相對lvs來說,nginx所能實現的功能也比較多。不過相對於穩定和性能上來說還是lvs性能好一些。
優點:免費,開源。性能穩定。
缺點:維護配置成本高

1.3 - 使用windows自帶的互載均衡軟件

Windows2003 的服務器都自帶有NLB來實現。實現機制類似於lvs,無法做到以上nginx七層協議。使用windows實現是通過廣播方式將請求發向同一網段的所有 ip。如果通過NLB實現,最好將同一組NLB的服務器劃分在同一個vlan下。以防止廣播到其它的ip上,增加交換機的流量。
優點:免費(只要有windows就自帶了),配置方便。不用增加單獨服務器。
缺點:數據廣播方式實現,需要配置vlan解決。


1.4 - 總結

相 對上面三種方式實現的互載均衡都有各自優點。如果小型windows網站服務器,採用windows下的nlb實現還是不錯的選擇。不用增加單獨的服務 器。大型以上網站建議還是採用硬件(F5 big-ip)或開源下的lvs和nginx來實現。個人還是比較便向於nginx來實現,方便動態的對web的服務器進行調整。

2   靜態網站

靜態網站相對來說存儲靜態網頁內容(html,js,css,jpg,png)和用戶上傳文件及圖片。

2.1 - 靜態域名劃分

相 對靜態網站來說建議將css,jpg,png及用戶上傳文件放在和主網站不同的域名上。不是指二級域名,是一級域名。如主網站用 www.website.com ,而css,jpg,png及用戶上傳文件使用file.imageswebsite.com域名。這樣好處主要是可以減少主域名的cookies發送到 不需要使用cookies的文件服務器上。可以起到加快用戶訪問和減少服務器流量作用。比如:將用戶的登入信息cookies寫入到 website.com域名下,每當瀏覽器請求website.com域名下(包括二級域名)的任何網址都會將cookies信息發送請求的網址信息頭 上。將不需要訪問用戶cookies的文件放在不同的域名下,將不會發送cookies信息。 大家有興趣可以用firebug進行監控查看。

2.2 - 靜態網站的緩存

2.2.1 - 使用CDN

CDN的全稱是Content Delivery Network,即內容分發網絡。其目的是通過在現有的Internet中增加一層新的網絡架構,將網站的內容發佈到最接近用戶的網絡"邊緣",使用戶可以就近取得所需的內容,解決 Internet網絡擁擠的狀況,提高用戶訪問網站的響應速度。從技術上全面解決由於網絡帶寬小、用戶訪問量大、網點分佈不均等原因所造成的用戶訪問網站響應速度慢的問題。 (也就是一個服務器的內容,平均分部到多個服務器上,服務器智能識別,讓用戶獲取離用戶最近的服務器,提高速度

如果資金允許,可使用商業的CDN服務。只需將域名指向CDN服務商指定的服務器即可對靜態網站使用CDN加速。國內常見的CDN網宿、藍訊、帝盟等。

2.2.2 - 自己搭建CDN

如果你在全國各機房都有服務器也可以自己搭建CDN服務。
使用硬件(F5 big-ip),根據用戶請求的ip,將用戶指到最近的idc機房服務器上。然後在各idc機房服務器上使用squid做反向代理從源服務器讀取靜態網站,對網站內容和用戶上傳圖片的緩存。從而實現內容的加速。

3   動態網站

             動態網站相對靜態網站來說,和用戶的交互性多。開發動態網站的技術相對來說也是多種多樣(asp.net,php,jsp等)。

3.1 - 域名劃分

動態網站域名建議根據功能點,使用二級域名來進行劃分。比如一個電子商務網站,包括會員,商城,訂單,支付,管理後臺等。
會員 member.website.com
商城 shop.website.com
訂單 Order.website.com
支付 pay.website.com
管理後臺 manager.website.com
原則上動態域名下只存動態程序,動態網站用到的css,圖片都應該在靜態域名的圖片服務器(file.imageswebsite.com)上。爲動態域名下程序減少流量和請求。
動態網站使用二級域名來劃分功能有個好處可以實現cookies信息的共享。所有二級域名只需要將cookies信息寫入website.com域名下,在其它的xxx.website.com域名下都能正常讀取。從而爲實現在各個動態域名上的統一認證而方便。

3.2 - 文件上傳及顯示

由於我們動態網站是多臺部署,當用戶上傳文件時我們不能像單臺服務器那樣存在本地服務器上(其它服務器無法讀取)。而是需要將用戶文件做一個集中的存放地方。

3.2.1 - 存放在數據庫

所有web服務器,將用戶的上傳文件保存在數據庫中。統一從數據庫中讀取和寫入。
最不推薦方式。相對來說數據庫的資源是最昂貴的,用來存用戶文件是最浪費了。另外,當用戶數據越來越大時,對dba來說是一個最痛苦的問題。不方便做緩存及文件分發同步。

3.2.2 - 存放在文件服務器

寫入
a)在文件服務器上安裝ftp服務器。然後各web服務器,通過模擬ftp客戶端。通過服務器的內網,將文件上傳到文件服務器上。( C#模擬ftp方式,大家可以下載discuz nt源碼查看,裏面有實現方式。)
b)通過windows內局域網的共享文件夾,各web服務器模擬windows用戶訪問共享文夾寫入到文件服務器上。

讀取
對文件的讀取,如果是非公開的文件,還是通過原有寫文件服務器的方式讀取。
如果是公開性的文件,如分圖片。在文件服務器上建方個web網站做爲數據源,將根目錄指到用戶上傳的文件夾。然後通過文章上述 “靜態網站緩存”方式,對用戶上傳文件網站做cdn的分發和緩存。從而對用戶上傳文件進行加速訪問。

3.3 - 動態網站內容更新

由於動態網站的分佈式部署,從而導致一個網站的更新需要同步到其它的服務器上。建議提供一臺專門的測試web服務器,每次更新將文件上傳到測試服務器上。 測試通過後,再通過同步軟件,將更新的網站文件同步到其它的web服務器上。可使用rsync實現文件同步,有linux和windows版的。 Windows安裝rsync覺得麻煩也可以用 臥天同步王等相關軟件來實現。

3.4 - 動態網站緩存技術

Memcached
Linux和windows下都有對應的客戶端和服務端。如果對性能要求高建議安裝linux下的服務端性能高些。客戶端可以用.net,php進行調用。

開發相關緩存服務
大家也可以根據自己業務的需要,開發自己的分佈式緩存服務。緩存算法常用LRU算法,經常使用排序在最前面。緩存服務相關算法介紹
http://www.blogjava.net/DL88250/archive/2011/01/21/343327.html
在.net下可以通過 remoting進行分部式緩存的開發。

分佈式的緩存大家可以參考
http://wenku.baidu.com/view/0d0ef4ea81c758f5f61f67d9.html

3.5 - 配置文件

一般我們的應用程的配置文件都是放在當前程序目錄下。由於我們web應用程序是分開部署,如果一個配置節點內容修改。就需要同步到其它的服務器上。另外一般程序都在初始化讀取配置內容。如果在程序運行中修改了配置只有重新啓動程序進行更新。這就出現了一個配置同步的問題。

3.5.1 - 通過同步軟件實現

類似動態網站內容更新一樣,使用rsync或都同步軟件對配置文件進行同步。當UAT環境配置修改後,手工或定時將文件同步。應用程序定時從配置文件中更新配置。

3.5.2 - 通過配置服務實現

自己開發配置服務程序,提供接口給各個應用程序讀取配置方式。配置服務程序和各應用通過 tcp方式實時實現配置內容讀取。

3.5.3 - 通過數據庫實現

將配置內容寫入數據庫,各應用程序通過讀取數據庫配置實現。各應用程序初始化從數據庫中讀取配置內容,讀取完成後每隔固定時間從數據庫中更新內容到本地。

4   網頁性能

4.1 - 網頁壓縮

靜態網站壓縮可以通過反向代理squid進行配置。常用瀏覽器都支持gzip網頁格式的壓縮。
動態網站的話,各平臺的 web服務器都有提供網頁壓縮的配置選項。基本上大家上google搜一搜都解決了。

4.2 - 網頁客戶端緩存

在web服務器上設置靜態網頁文件的 Last-Modified和ETag 。如果服務器上文件沒有更新,則不發送新的內容到客戶端。

4.3 - 網頁開發內容調整

a)將多個js文件或css文件合併同一個文件。以減少http的請求。每個瀏覽器對同一時間下,同一域名下的http請求有連接限制。
b)將css文件樣式放在網頁文件內容的頭部,js文件放在網頁文件的底部。讓瀏覽先加載css文件,以便第一時間向用戶展示界面。
c)網頁小icon可以合併成同一個大的文件icon,以減少http的請求。通過CSS Sprites 實現單個文件的顯示。
d)在firefox下安裝 YSlow 對網頁進行性能加載測試,根據測試建議對網頁內容進行優化。

5   數據庫

建立數據庫時,有一個數據庫預分配空間。建議初始分大一些,這樣好處避免了在插入數據時達到數據庫分配的空間。數據庫自動分配數據庫空間影響數據庫插入的性 能。另外,數據庫的自動增長建議按具體大小增長,比如2G根據你自己預計的大小。防止過快達到數據庫上限導至系統頻繁爲庫分配空間。

5.1 - 數據庫規劃

Web 網站常用數據mysql,mssql,oracle,當然還有其它的一些數據庫。基本上這三種數據庫都有自己的優缺點。Mysql免費開源,mssql和 oracle都是商業軟件。oracle用於大型企業數據庫較多,一般電信銀行用的oracle多些。而mssql相對來說少。從dba專業上來說 oracle相比mssql性能好些,當然價格也貴。從最近幾年mssql已經在慢慢追上。數據庫也可以考慮nosql類數據庫,mongodb、 Redis等。另外開源的PostgreSQL據說也不錯,有空大家可以看一看(http://bbs.chinaunix.net/thread- 1688208-1-1.html)

5.2 - 數據庫劃分

根據業務應用來進行劃分數據庫。如我們上面的電子商務網站我們可以分爲member,shop二個庫。Member存儲用於會員信息,shop庫存儲商品,訂單,支付信息。

5.3 - 表劃分

建議對大數據進行表的劃分,劃分規則可按記錄數,記錄時間,記錄的hash值進行劃分。
如果資金允許的話,可以考慮上存儲設備。對數據性能的提升是巨大的。

6   服務器監控

這裏所說的服務器監控只是針對web服務器的運行狀態的監控。比如網絡流量,cpu,內存,硬盤負載。服務器監控常見通過SNMP協議進行,在linux 和 windows下都通用。針對服務器監控我這推薦使用cacti軟件進行。服務器上都配置有雙網卡,一個內網,一個外網。在內網卡上增加snmp協議,然 後在cacti 中增加需要監控的服務器。給cacti 個外網ip就可以通過web界面進行查看服務器的狀態了。Cacti軟件的介紹和配置大家可以上網搜搜,這裏就不做介紹了。Cacti還可以監控服務器上 運行進程,如果進程停止運行可以發出報警郵件。

7   Web系統邏輯架構圖

原文鏈接:http://www.cnblogs.com/lzppcc/archive/2013/05/11/3072766.html
發佈了8 篇原創文章 · 獲贊 8 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章