Web網站架構設計

來源:互聯網
上載者:User
文章目錄
  • 1.1 - 使用商業硬體實現
  • 1.2 - 使用開源軟體
  • 1.3 - 使用windows內建的互載均衡軟體
  • 1.4 - 總結
  • 2.1 - 靜態網域名稱劃分
  • 2.2 - 靜態網站的緩衝
  • 3.1 - 網域名稱劃分
  • 3.2 - 檔案上傳及顯示
  • 3.3 - 動態網站內容更新
  • 3.4 - 動態網站緩衝技術
  • 3.5 - 設定檔
  • 4.1 - 網頁壓縮
  • 4.2 - 網頁用戶端緩衝
  • 4.3 - 網頁開發內容調整
  • 5.1 - 資料庫規劃
  • 5.2 - 資料庫劃分
  • 5.3 - 表劃分
目錄 [隱藏/顯示]1 - Web負載平衡
   1.1 - 使用商業硬體實現
   1.2 - 使用開源軟體
   1.3 - 使用windows內建的互載均衡軟體
   1.4 - 總結
2 - 靜態網站
   2.1 - 靜態網域名稱劃分
   2.2 - 靜態網站的緩衝
      2.2.1 - 使用CDN
      2.2.2 - 自己搭建CDN
3 - 動態網站
   3.1 - 網域名稱劃分
   3.2 - 檔案上傳及顯示
      3.2.1 - 存放在資料庫
      3.2.2 - 存放在檔案伺服器
   3.3 - 動態網站內容更新
   3.4 - 動態網站緩衝技術
   3.5 - 設定檔
      3.5.1 - 通過同步軟體實現
      3.5.2 - 通過佈建服務實現
      3.5.3 - 通過資料庫實現
4 - 網頁效能
   4.1 - 網頁壓縮
   4.2 - 網頁用戶端緩衝
   4.3 - 網頁開發內容調整
5 - 資料庫
   5.1 - 資料庫規劃
   5.2 - 資料庫劃分
   5.3 - 表劃分
6 - 伺服器監控
7 - 附: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效能好一些。
優點:免費,開源。效能穩定。
缺點:維護配置成本高

附: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服務。只需將網域名稱指向CDN服務商指定的伺服器即可對靜態網站使用CDN加速。國內常見的CDN網宿、藍訊、帝盟等。

2.2.2 - 自己搭建CDN

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

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網域名稱下都能正常讀取。從而為實現在各個動態網域名稱上的統一認證而方便。

附:Asp.net下from認證統一認證配置

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 - 網頁壓縮

靜態網站壓縮可以通過反向 Proxysquid進行配置。常用瀏覽器都支援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系統邏輯架構圖



Web架構圖源檔案下載
http://files.cnblogs.com/lzppcc/Web%E6%9E%B6%E6%9E%84%E5%9B%BE.zip

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.