千萬(wàn)人同時(shí)訪(fǎng)問(wèn)的網(wǎng)站,一般是有很多個(gè)數據庫同時(shí)工作,說(shuō)明白一點(diǎn)就是數據庫集群和并發(fā)控制,這樣的網(wǎng)站實(shí)時(shí)性也是相對的。這些網(wǎng)站都有一些共同的特點(diǎn):數據量大,在線(xiàn)人數多,并發(fā)請求多,pageview高,響應速度快?偨Y了一下各個(gè)大網(wǎng)站的架構,主要提高效率及穩定性的幾個(gè)地方包括:
1、程序
程序開(kāi)發(fā)是一方面,系統架構設計(硬件+網(wǎng)絡(luò )+軟件)是另一方面。
軟件架構方面,做網(wǎng)站首先需要很多web服務(wù)器存儲靜態(tài)資源,比如圖片、視頻、靜態(tài)頁(yè)等,千萬(wàn)不要把靜態(tài)資源和應用服務(wù)器放在一起。
一個(gè)好的程序員寫(xiě)出來(lái)的程序會(huì )非常簡(jiǎn)潔、性能很好,一個(gè)初級程序員可能會(huì )犯很多低級錯誤,這也是影響網(wǎng)站性能的原因之一。
網(wǎng)站要做到效率高,不光是程序員的事情,數據庫優(yōu)化、程序優(yōu)化這是必須的,在性能優(yōu)化上要數據庫和程序齊頭并進(jìn)!緩存也是兩方面同時(shí)入手。第一,數據庫緩存和數據庫優(yōu)化,這個(gè)由dba完成(而且這個(gè)有非常大的潛力可挖,只是由于我們都是程序員而忽略了他而已)。第二,程序上的優(yōu)化,這個(gè)非常的有講究,比如說(shuō)重要一點(diǎn)就是要規范SQL語(yǔ)句,少用in 多用or,多用preparestatement,另外避免程序冗余如查找數據少用雙重循環(huán)等。另外選用優(yōu)秀的開(kāi)源框架加以支持,我個(gè)人認為中后臺的支持是最最重要的,可以選取spring+ibatis。因為ibatis直接操作SQL并有緩存機制。spring的好處就不用我多說(shuō)了,IOC的機制可以避免new對象,這樣也節省開(kāi)銷(xiāo)。據我分析,絕大部分的開(kāi)銷(xiāo)就是在NEW的時(shí)候和連接數據庫時(shí)候產(chǎn)生的,請盡量避免。另外可以用一些內存測試工具來(lái)做一個(gè)demo說(shuō)明hibernate和ibatis誰(shuí)更快!前臺你想用什么就用什么,struts,webwork都成,如果覺(jué)得自己挺牛X可以試試tapestry。
用數據庫也未必不能解決訪(fǎng)問(wèn)量巨大所帶來(lái)的問(wèn)題,作成靜態(tài)文件硬盤(pán)的尋址時(shí)間也未必少于數據庫的搜索時(shí)間,當然對資料的索引要下一翻工夫。我自己覺(jué)得門(mén)戶(hù)往往也就是當天、熱門(mén)的資料點(diǎn)擊率較高,將其做緩存最多也不過(guò)1~2G的數據量吧,舉個(gè)例子:
拿網(wǎng)易新聞來(lái)說(shuō)http://news.163.com/07/0606/09/3GA0D10N00011229.html格式化一下,方便理解:http://域名/年/月日/新聞所屬分類(lèi)/新聞ID.html
可以把當天發(fā)布的、熱門(mén)的、流攬量大的作個(gè)緩寸,用hashtable(key:年-月-日-分類(lèi)-ID,value:新聞對象),靜態(tài)將其放到內存(速度絕對快過(guò)硬盤(pán)尋址靜態(tài)頁(yè)面)。
通常是采用oracle存儲過(guò)程+2個(gè)weblogic,更新機制也幾乎一樣每簽發(fā)一條新聞,就會(huì )生成靜態(tài)頁(yè)面,然后發(fā)往前端的web服務(wù)器,前端的web都是做負載均衡的。另外還有定時(shí)的程序,每5-15分鐘自動(dòng)生成一次。在發(fā)布新聞的同時(shí)將數據緩存。當然緩存也不會(huì )越來(lái)越大,在個(gè)特定的時(shí)間段(如凌晨)剔除過(guò)期的數據。做一個(gè)大的網(wǎng)站遠沒(méi)有想象中那么簡(jiǎn)單,服務(wù)器基本就要百十個(gè)的。這樣可以大大增加一臺計算機的處理速度,如果一臺機器處理不了,可以用httpserver集群來(lái)解決問(wèn)題了。
2、網(wǎng)絡(luò )中國的網(wǎng)絡(luò )分南北電信和網(wǎng)通,訪(fǎng)問(wèn)的ip就要區分南北進(jìn)入不同的網(wǎng)絡(luò )。
3、集群通常會(huì )使用CDN與GSBL與DNS負載均衡技術(shù),每個(gè)地區一組前臺服務(wù)器群,例如:網(wǎng)易,百度使用了DNS負載均衡技術(shù),每個(gè)頻道一組前臺服務(wù)器,一搜使用了DNS負載技術(shù),所有頻道共用一組前臺服務(wù)器集群。
網(wǎng)站使用基于Linux集群的負載均衡,失敗恢復,包括應用服務(wù)器和數據庫服務(wù)器,基于linux-ha的服務(wù)狀態(tài)檢測及高可用化。
應用服務(wù)器集群可以采用apache+tomcat集群和weblogic集群等;web服務(wù)器集群可以用反向代理,也可以用NAT的方式,或者多域名解析都可以;Squid也可以,方法很多,可以根據情況選擇。
文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/