2019/3/22 13:48:33
千萬人(rén)同時訪問的(de)網站,一般是有(yǒu)很多個(gè)數據庫同時工(gōng)作,說明(míng)白一點就是數據庫集群和(hé)并發控制(zhì),這樣的(de)網站實時性也(yě)是相(xiàng)對的(de)。這些網站都(dōu)有(yǒu)一些共同的(de)特點:數據量大(dà),在線人(rén)數多,并發請求多,pageview高(gāo),響應速度快。總結了一下各個(gè)大(dà)網站的(de)架構,主要提高(gāo)效率及穩定性的(de)幾個(gè)地(dì)方包括:
1、程序
程序開(kāi)發是一方面,系統架構設計(jì)(硬件(jiàn)+網絡+軟件(jiàn))是另一方面。
軟件(jiàn)架構方面,做網站首先需要很多web服務器(qì)存儲靜态資源,比如(rú)圖片、視頻、靜态頁等,千萬不要把靜态資源和(hé)應用(yòng)服務器(qì)放(fàng)在一起。
一個(gè)好的(de)程序員寫出來的(de)程序會(huì)非常簡潔、性能(néng)很好,一個(gè)初級程序員可(kě)能(néng)會(huì)犯很多低級錯誤,這也(yě)是影響網站性能(néng)的(de)原因之一。
網站要做到(dào)效率高(gāo),不光(guāng)是程序員的(de)事情,數據庫優化、程序優化這是必須的(de),在性能(néng)優化上(shàng)要數據庫和(hé)程序齊頭并進!緩存也(yě)是兩方面同時入手。第一,數據庫緩存和(hé)數據庫優化,這個(gè)由dba完成(而且這個(gè)有(yǒu)非常大(dà)的(de)潛力可(kě)挖,隻是由于我們都(dōu)是程序員而忽略了他(tā)而已)。第二,程序上(shàng)的(de)優化,這個(gè)非常的(de)有(yǒu)講究,比如(rú)說重要一點就是要規範SQL語句,少(shǎo)用(yòng)in 多用(yòng)or,多用(yòng)preparestatement 存儲過程,另外避免程序冗餘如(rú)查找數據少(shǎo)用(yòng)雙重循環等。另外選用(yòng)優秀的(de)開(kāi)源框架加以支持,我個(gè)人(rén)認爲中後台的(de)支持是最最重要的(de),可(kě)以選取spring+ibatis。因爲ibatis直接操作SQL并有(yǒu)緩存機制(zhì)。spring的(de)好處就不用(yòng)我多說了,IOC的(de)機制(zhì)可(kě)以避免new對象,這樣也(yě)節省開(kāi)銷。據我分(fēn)析,絕大(dà)部分(fēn)的(de)開(kāi)銷就是在NEW的(de)時候和(hé)連接數據庫時候産生的(de),請盡量避免。另外可(kě)以用(yòng)一些内存測試工(gōng)具來做一個(gè)demo說明(míng)hibernate和(hé)ibatis誰更快!前台你(nǐ)想用(yòng)什(shén)麽就用(yòng)什(shén)麽,struts,webwork都(dōu)成,如(rú)果覺得自己挺牛X可(kě)以試試用(yòng)tapestry。
用(yòng)數據庫也(yě)未必不能(néng)解決訪問量巨大(dà)所帶來的(de)問題,作成靜态文(wén)件(jiàn)硬盤的(de)尋址時間也(yě)未必少(shǎo)于數據庫的(de)搜索時間,當然對資料的(de)索引要下一翻工(gōng)夫。我自己覺得門戶往往也(yě)就是當天、熱(rè)門的(de)資料點擊率較高(gāo),将其做緩存最多也(yě)不過1~2G的(de)數據量吧(ba),舉個(gè)例子:
◎ 拿網易新聞來說http://news.163.com/07/0606/09/3GA0D10N00011229.html
格式化一下,方便理(lǐ)解:http://域名/年/月(yuè)日/新聞所屬分(fēn)類/新聞ID.html
可(kě)以把當天發布的(de)、熱(rè)門的(de)、浏覽量大(dà)的(de)作個(gè)緩存,用(yòng)hashtable(key:年-月(yuè)-日-分(fēn)類-ID,value:新聞對象),靜态将其放(fàng)到(dào)内存(速度絕對快過硬盤尋址靜态頁面)。
通常是采用(yòng)oracle存儲過程+2個(gè)weblogic,更新機制(zhì)也(yě)幾乎一樣每簽發一條新聞,就會(huì)生成靜态頁面,然後發往前端的(de)web服務器(qì),前端的(de)web都(dōu)是做負載均衡的(de)。另外還有(yǒu)定時程序,每5-15分(fēn)鍾自動生成一次。在發布新聞的(de)同時将數據緩存。當然緩存也(yě)不會(huì)越來越大(dà),在個(gè)特定的(de)時間段(如(rú)淩晨)删除過期的(de)數據。做一個(gè)大(dà)的(de)網站遠沒有(yǒu)想象中那麽簡單,服務器(qì)基本就要百十個(gè)的(de)。
這樣可(kě)以大(dà)大(dà)增加一台計(jì)算機的(de)處理(lǐ)速度,如(rú)果一台機器(qì)處理(lǐ)不了,可(kě)以用(yòng)httpserver集群來解決問題了。
2、網絡
中國的(de)網絡分(fēn)南電信和(hé)北網通,訪問的(de)ip就要區分(fēn)南北進入不同的(de)網絡。
3、集群
通常會(huì)使用(yòng)CDN與GSBL與DNS負載均衡技術(shù),每個(gè)地(dì)區一組前台服務器(qì)群,比如(rú)新浪和(hé)搜狐,而網易,百度使用(yòng)了DNS負載均衡技術(shù),每個(gè)頻道一組前台服務器(qì);一搜使用(yòng)了DNS負載技術(shù),所有(yǒu)頻道共用(yòng)一組前台服務器(qì)集群。
網站使用(yòng)基于Linux集群的(de)負載均衡,失敗恢複,包括應用(yòng)服務器(qì)和(hé)數據庫服務器(qì),基于linux-ha的(de)服務狀态檢測及高(gāo)可(kě)用(yòng)化。
應用(yòng)服務器(qì)集群可(kě)以采用(yòng)apache+tomcat集群和(hé)weblogic集群等;web服務器(qì)集群可(kě)以用(yòng)反向代理(lǐ),也(yě)可(kě)以用(yòng)NAT的(de)方式,或者多域名解析都(dōu)可(kě)以;Squid也(yě)可(kě)以,方法很多,可(kě)以根據情況選擇。
4、數據庫
因爲是千萬人(rén)同時訪問的(de)網站,所以一般是有(yǒu)很多個(gè)數據庫同時工(gōng)作的(de),說明(míng)白一點就是數據庫集群和(hé)并發控制(zhì),數據分(fēn)布到(dào)地(dì)理(lǐ)位置不同的(de)數據中心,以免發生斷電事故。
主流的(de)數據庫有(yǒu)Sun的(de)是MySQL和(hé)Oracle。
Oracle是一款優秀的(de)、廣泛采用(yòng)的(de)商業(yè)數據庫管理(lǐ)軟件(jiàn)。有(yǒu)很強大(dà)的(de)功能(néng)和(hé)安全性,可(kě)以處理(lǐ)相(xiàng)對海(hǎi)量的(de)數據。而MySQL是一款非常優秀的(de)開(kāi)源數據庫管理(lǐ)軟件(jiàn),非常适合用(yòng)多台PC Server組成多點的(de)存儲節點陣列(這裏我所指的(de)不是MySQL自身提供的(de)集群功能(néng)),每單位的(de)數據存儲成本也(yě)非常的(de)低廉。用(yòng)多台PC Server安裝MySQL組成一個(gè)存儲節點陣列,通過MySQL自身的(de)Replication或者應用(yòng)自身的(de)處理(lǐ),可(kě)以很好的(de)保證容錯(允許部分(fēn)節點失效),保證應用(yòng)的(de)健壯性和(hé)可(kě)靠性。可(kě)以這麽說,在關系數據庫管理(lǐ)系統的(de)選擇上(shàng),可(kě)以考慮應用(yòng)本身的(de)情況來決定。
MySQL數據庫服務器(qì)的(de)master-slave模式,利用(yòng)數據庫服務器(qì)在主從服務器(qì)間進行(xíng)同步,應用(yòng)隻把數據寫到(dào)主服務器(qì),而讀(dú)數據時則根據負載選擇一台從服務器(qì)或者主服務器(qì)來讀(dú)取,将數
深圳市南山區南山街(jiē)道南海(hǎi)大(dà)道西(xī)桂廟路(lù)北陽光(guāng)華藝大(dà)廈1棟4F、4G-04
咨詢電話(huà):136 8237 6272
大(dà)客戶咨詢:139 0290 5075
業(yè)務QQ:195006118
技術(shù)QQ:179981967