1.1 - 使用商業硬件實現
最常用的F5 與citrix netscaler。比方12306前端的web好像用的就是F5 的BIGIP。假設公司資金足夠的話,相對使用開源軟件來講理方便。
長處:維護方便,性能穩定
缺點:費用過高
php1.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臺server都承載着 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性能好一些。
長處:免費,開源。性能穩定。
缺點:維護配置成本高
css1.3 - 使用windows自帶的互載均衡軟件
Windows2003 的server都自帶有NLB來實現。實現機制相似於lvs,沒法作到以上nginx七層協議。使用windows實現是經過廣播方式將請求發向同一網段的所有 ip。假設經過NLB實現,最好將同一組NLB的server劃分在同一個vlan下。以防止廣播到其餘的ip上,添加交換機的流量。
長處:免費(僅僅要有windows就自帶了),配置方便。不用添加單獨server。
缺點:數據廣播方式實現,需要配置vlan解決。
html1.4 - 總結
相 對上面三種方式實現的互載均衡都有各自長處。假設小型windows站點server,採用windows下的nlb實現仍是不錯的選擇。不用添加單獨的服務 器。大型以上站點建議仍是採用硬件(F5 big-ip)或開源下的lvs和nginx來實現。我的仍是比較便向於nginx來實現,方便動態的對web的server進行調整。
前端
靜態站點相對來講存儲靜態網頁內容(html,js,css,jpg,png)和用戶上傳文件及圖片。
java2.1 - 靜態域名劃分
相 對靜態站點來講建議將css,jpg,png及用戶上傳文件放在和主站點不一樣的域名上。不是指二級域名,是一級域名。如主站點用 www.website.com ,而css,jpg,png及用戶上傳文件使用file.imageswebsite.com域名。這樣優勢主要是可以下降主域名的cookies發送到 不需要使用cookies的文件server上。可以起到加快用戶訪問和下降server流量做用。比方:將用戶的登入信息cookies寫入到 website.com域名下,每當瀏覽器請求website.com域名下(包含二級域名)的不論什麼網址都會將cookies信息發送請求的網址信息頭 上。將不需要訪問用戶cookies的文件放在不一樣的域名下,將不會發送cookies信息。 你們有興趣可以用firebug進行監控查看。
mysql2.2 - 靜態站點的緩存
2.2.1 - 使用CDN
CDN的全稱是Content Delivery Network,即內容分發網絡。其目的是經過在現有的Internet中添加一層新的網絡架構,將站點的內容公佈到最接近用戶的網絡"邊緣",使用戶可以就近取得所需的內容,解決 Internet網絡擁擠的情況,提升用戶訪問站點的響應速度。從技術上全面解決由於網絡帶寬小、用戶訪問量大、網點分佈不均等緣由所形成的用戶訪問站點響應速度慢的問題。 (也就是一個server的內容,平均分部到多個server上,server智能識別,讓用戶獲取離用戶近期的server,提快速度假設資金贊成,可以使用商業的CDN服務。僅僅需將域名指向CDN服務商指定的server就能夠對靜態站點使用CDN加速。國內常見的CDN網宿、藍訊、帝盟等。
linux2.2.2 - 本身搭建CDN
假設你在全國各機房都有server也可以本身搭建CDN服務。
使用硬件(F5 big-ip),依據用戶請求的ip,將用戶指到近期的idc機房server上。而後在各idc機房server上使用squid作反向代理從源server讀取靜態站點,對站點內容和用戶上傳圖片的緩存。從而實現內容的加速。
nginx
動態站點相對靜態站點來講,和用戶的交互性多。開發動態站點的技術相對來講也是多種多樣(asp.net,php,jsp等)。
web
3.1 - 域名劃分
動態站點域名建議依據功能點,使用二級域名來進行劃分。比方一個電子商務站點,包含會員,商城,訂單,支付,管理後臺等。
會員 member.website.com
商城 shop.website.com
訂單 Order.website.com
支付 pay.website.com
管理後臺 manager.website.com
原則上動態域名下僅僅存動態程序,動態站點用到的css,圖片都應該在靜態域名的圖片server(file.imageswebsite.com)上。爲動態域名下程序下降流量和請求。
動態站點使用二級域名來劃分功能有個優勢可以實現cookies信息的共享。所有二級域名僅僅需要將cookies信息寫入website.com域名下,在其餘的xxx.website.com域名下都能正常讀取。從而爲實現在各個動態域名上的統一認證而方便。
算法3.2 - 文件上傳及顯示
由於咱們動態站點是多臺部署,當用戶上傳文件時咱們不能像單臺server那樣存在本地server上(其餘server沒法讀取)。而是需要將用戶文件作一個集中的存放地方。
3.2.1 - 存放在數據庫
所有webserver,將用戶的上傳文件保存在數據庫中。統一從數據庫中讀取和寫入。
最不推薦方式。相對來講數據庫的資源是最昂貴的,用來存用戶文件是最浪費了。另外,當用戶數據愈來愈大時,對dba來講是一個最痛苦的問題。不方便作緩存及文件分發同步。
3.2.2 - 存放在文件server
寫入
a)在文件server上安裝ftpserver。而後各webserver,經過模擬ftpclient。經過server的內網,將文件上傳到文件server上。( C#模擬ftp方式,你們可以下載discuz nt源代碼查看,裏面有實現方式。)
b)經過windows內局域網的共享目錄,各webserver模擬windows用戶訪問共享文夾寫入到文件server上。
讀取
對文件的讀取,假設是非公開的文件,仍是經過原有寫文件server的方式讀取。
假設是公開性的文件,如分圖片。在文件server上建方個web站點作爲數據源,將根文件夾指到用戶上傳的文件夾。而後經過文章上述 「靜態站點緩存」方式,對用戶上傳文件站點作cdn的分發和緩存。從而對用戶上傳文件進行加速訪問。
3.3 - 動態站點內容更新
由於動態站點的分佈式部署,從而致使一個站點的更新需要同步到其餘的server上。建議提供一臺專門的測試webserver,每次更新將文件上傳到測試server上。 測試經過後,再經過同步軟件,將更新的站點文件同步到其餘的webserver上。可以使用rsync實現文件同步,有linux和windows版的。 Windows安裝rsync認爲麻煩也可以用 臥天同步王等相關軟件來實現。
3.4 - 動態站點緩存技術
Memcached
Linux和windows下都有相應的client和服務端。假設對性能要求高建議安裝linux下的服務端性能高些。client可以用.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應用程序是分開部署,假設一個配置節點內容改動。就需要同步到其餘的server上。另一般程序都在初始化讀取配置內容。假設在程序執行中改動了配置僅僅有又一次啓動程序進行更新。這就出現了一個配置同步的問題。
3.5.1 - 經過同步軟件實現
相似動態站點內容更新同樣,使用rsync或都同步軟件對配置文件進行同步。當UAT環境配置改動後,手工或定時將文件同步。應用程序定時從配置文件裏更新配置。
3.5.2 - 經過配置服務實現
本身開發配置服務程序,提供接口給各個應用程序讀取配置方式。配置服務程序和各應用經過 tcp方式實時實現配置內容讀取。
3.5.3 - 經過數據庫實現
將配置內容寫入數據庫,各應用程序經過讀取數據庫配置實現。各應用程序初始化從數據庫中讀取配置內容,讀取完畢後每隔固定時間從數據庫中更新內容到本地。
4.1 - 網頁壓縮
靜態站點壓縮可以經過反向代理squid進行配置。常用瀏覽器都支持gzip網頁格式的壓縮。
動態站點的話,各平臺的 webserver都有提供網頁壓縮的配置選項。基本上你們上google搜一搜都攻克了。
4.2 - 網頁client緩存
在webserver上設置靜態網頁文件的 Last-Modified和ETag 。假設server上文件沒有更新,則不發送新的內容到client。
4.3 - 網頁開發內容調整
a)將多個js文件或css文件合併同一個文件。以下降http的請求。每個瀏覽器對同一時間下,同一域名下的http請求有鏈接限制。
b)將css文件樣式放在網頁文件內容的頭部,js文件放在網頁文件的底部。讓瀏覽先載入css文件,以便第一時間向用戶展現界面。
c)網頁小icon可以合併成同一個大的文件icon,以下降http的請求。經過CSS Sprites 實現單個文件的顯示。
d)在firefox下安裝 YSlow 對網頁進行性能載入測試,依據測試建議對網頁內容進行優化。
創建數據庫時,有一個數據庫預分配空間。建議初始分大一些,這樣優勢避免了在插入數據時達到數據庫分配的空間。數據庫本身主動分配數據庫空間影響數據庫插入的性 能。另外,數據庫的本身主動增加建議按詳細大小增加,比方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值進行劃分。
假設資金贊成的話,可以考慮上存儲設備。對數據性能的提高是巨大的。
這裏所說的server監控僅僅是針對webserver的執行狀態的監控。比方網絡流量,cpu,內存,硬盤負載。server監控常見經過SNMP協議進行,在linux 和 windows下都通用。針對server監控我這推薦使用cacti軟件進行。server上都配置有雙網卡,一個內網,一個外網。在內網卡上添加snmp協議,然 後在cacti 中添加需要監控的server。給cacti 個外網ip就可以經過web界面進行查看server的狀態了。Cacti軟件的介紹和配置你們可以上網搜搜,這裏就不作介紹了。Cacti還可以監控server上 執行進程,假設進程中止執行可以發出報警郵件。