|
隨著中國大型IT企業(yè)信息化速度的加快,大部分應(yīng)用的數(shù)據(jù)量和訪問量都急劇增加,大型企業(yè)網(wǎng)站正面臨性能和高數(shù)據(jù)訪問量的壓力,而且對存儲、安全以及信息檢索等等方面都提出了更高的要求……
本文中,我想通過幾個國外大型IT企業(yè)及網(wǎng)站的成功案例,從Web技術(shù)人員角度探討如何積極地應(yīng)對國內(nèi)大型網(wǎng)站即將面臨的擴(kuò)展(主要是技術(shù)方面,而較少涉及管理及營銷等方面)矛盾。
一、 國外大型IT網(wǎng)站的成功之道
(一) MySpace
今天,MySpace已經(jīng)成為全球眾口皆碑的社區(qū)網(wǎng)站之王。盡管一流和營銷和管理經(jīng)驗(yàn)自然是每個IT企業(yè)取得成功的首要因素,但是本節(jié)中我們卻拋棄這一點(diǎn),而主要著眼于探討在數(shù)次面臨系統(tǒng)擴(kuò)張的緊急關(guān)頭MySpace是如何從技術(shù)方面采取應(yīng)對策略的。
第一代架構(gòu)—添置更多的Web服務(wù)器
MySpace最初的系統(tǒng)很小,只有兩臺Web服務(wù)器(分擔(dān)處理用戶請求的工作量)和一個數(shù)據(jù)庫服務(wù)器(所有數(shù)據(jù)都存儲在這一個地方)。那時使用的是Dell雙CPU、4G內(nèi)存的系統(tǒng)。在早期階段,MySpace基本是通過添置更多Web服務(wù)器來對付用戶暴增問題的。但到在2004年早期,在MySpace用戶數(shù)增長到五十萬后,其數(shù)據(jù)庫服務(wù)器已經(jīng)開始疲于奔命了。
第二代架構(gòu)—增加數(shù)據(jù)庫服務(wù)器
與增加Web服務(wù)器不同,增加數(shù)據(jù)庫并沒那么簡單。如果一個站點(diǎn)由多個數(shù)據(jù)庫支持,設(shè)計(jì)者必須考慮的是,如何在保證數(shù)據(jù)一致性的前提下讓多個數(shù)據(jù)庫分擔(dān)壓力。
MySpace運(yùn)行在三個SQL Server數(shù)據(jù)庫服務(wù)器上—一個為主,所有的新數(shù)據(jù)都向它提交,然后由它復(fù)制到其它兩個;另兩個數(shù)據(jù)庫服務(wù)器全力向用戶供給數(shù)據(jù),用以在博客和個人資料欄顯示。這種方式在一段時間內(nèi)效果很好——只要增加數(shù)據(jù)庫服務(wù)器,加大硬盤,就可以應(yīng)對用戶數(shù)和訪問量的增加。
這一次的數(shù)據(jù)庫架構(gòu)按照垂直分割模式設(shè)計(jì),不同的數(shù)據(jù)庫服務(wù)于站點(diǎn)的不同功能,如登錄、用戶資料和博客。垂直分割策略利于多個數(shù)據(jù)庫分擔(dān)訪問壓力,當(dāng)用戶要求增加新功能時,MySpace只需要投入新的數(shù)據(jù)庫加以支持。在賬戶到達(dá)二百萬后,MySpace還從存儲設(shè)備與數(shù)據(jù)庫服務(wù)器直接交互的方式切換到SAN(存儲區(qū)域網(wǎng)絡(luò))—用高帶寬、專門設(shè)計(jì)的網(wǎng)絡(luò)將大量磁盤存儲設(shè)備連接在一起,而數(shù)據(jù)庫連接到SAN。這項(xiàng)措施極大提升了系統(tǒng)性能、正常運(yùn)行時間和可靠性。然而,當(dāng)用戶繼續(xù)增加到三百萬后,垂直分割策略也變得難以維持下去。
第三代架構(gòu)—轉(zhuǎn)到分布式計(jì)算架構(gòu)
幾經(jīng)折騰,最終,MySpace將目光移到分布式計(jì)算架構(gòu)——它在物理上分布的眾多服務(wù)器,整體必須邏輯上等同于單臺機(jī)器。拿數(shù)據(jù)庫來說,就不能再像過去那樣將應(yīng)用拆分,再以不同數(shù)據(jù)庫分別支持,而必須將整個站點(diǎn)看作一個應(yīng)用。現(xiàn)在,數(shù)據(jù)庫模型里只有一個用戶表,支持博客、個人資料和其他核心功能的數(shù)據(jù)都存儲在相同數(shù)據(jù)庫。
既然所有的核心數(shù)據(jù)邏輯上都組織到一個數(shù)據(jù)庫,那么MySpace必須找到新的辦法以分擔(dān)負(fù)荷——顯然,運(yùn)行在普通硬件上的單個數(shù)據(jù)庫服務(wù)器是無能為力的。這次,不再按站點(diǎn)功能和應(yīng)用分割數(shù)據(jù)庫,MySpace開始將它的用戶按每百萬一組分割,然后將各組的全部數(shù)據(jù)分別存入獨(dú)立的SQL Server實(shí)例。目前,MySpace的每臺數(shù)據(jù)庫服務(wù)器實(shí)際運(yùn)行兩個SQL Server實(shí)例,也就是說每臺服務(wù)器服務(wù)大約二百萬用戶。據(jù)MySpace的技術(shù)人員說,以后還可以按照這種模式以更小粒度劃分架構(gòu),從而優(yōu)化負(fù)荷分擔(dān)。
第四代架構(gòu)—求助于微軟方案
2005年早期,賬戶達(dá)到九百萬,MySpace開始用微軟的C#編寫ASP.NET程序。在收到一定成效后,MySpace開始大規(guī)模遷移到ASP.NET。
賬戶達(dá)到一千萬時,MySpace再次遭遇存儲瓶頸問題。SAN的引入解決了早期一些性能問題,但站點(diǎn)目前的要求已經(jīng)開始周期性超越SAN的I/O容量——即它從磁盤存儲系統(tǒng)讀寫數(shù)據(jù)的極限速度。
第五代架構(gòu)—增加數(shù)據(jù)緩存層并轉(zhuǎn)到支持64位處理器的SQL Server 2005
2005年春天,MySpace賬戶達(dá)到一千七百萬,MySpace又啟用了新的策略以減輕存儲系統(tǒng)壓力,即增加數(shù)據(jù)緩存層——位于Web服務(wù)器和數(shù)據(jù)庫服務(wù)器之間,其唯一職能是在內(nèi)存中建立被頻繁請求數(shù)據(jù)對象的副本,如此一來,不訪問數(shù)據(jù)庫也可以向Web應(yīng)用供給數(shù)據(jù)。
2005年中期,服務(wù)賬戶數(shù)達(dá)到兩千六百萬時,MySpace因?yàn)槲覀儗?nèi)存的渴求而切換到了還處于beta測試的支持64位處理器的SQL Server 2005。升級到SQL Server 2005和64位Windows Server 2003后,MySpace每臺服務(wù)器配備了32G內(nèi)存,后于2006年再次將配置標(biāo)準(zhǔn)提升到64G。
事實(shí)上,MySpace的Web服務(wù)器和數(shù)據(jù)庫仍然經(jīng)常發(fā)生超負(fù)荷,其用戶頻繁遭遇“意外錯誤”和“站點(diǎn)離線維護(hù)”等告示,他們不得不在論壇抱怨不停……
MySpace正是在這樣不斷重構(gòu)站點(diǎn)軟件、數(shù)據(jù)庫和存儲系統(tǒng)中,才一步步走到今天。事實(shí)上,MySpace已經(jīng)成功解決了很多系統(tǒng)擴(kuò)展性問題,其中存在相當(dāng)?shù)慕?jīng)驗(yàn)值得我們借鑒。MySpace系統(tǒng)架構(gòu)到目前為止保持了相對穩(wěn)定,但其技術(shù)人員仍然在為SQL Server支持的同時連接數(shù)等方面繼續(xù)攻堅(jiān),盡可能把事情做到最好。
(二) Amazon
亞馬遜書店無疑是電子商務(wù)發(fā)展的里程碑。2000年到現(xiàn)在,世界網(wǎng)絡(luò)業(yè)腥風(fēng)血雨。Amazon曾經(jīng)成為網(wǎng)絡(luò)泡沫的頭號代表。如今,當(dāng)這個“最大的泡沫”用幾經(jīng)易改的數(shù)字把自己變成了堅(jiān)實(shí)的IT巨人。
歷覽Amazon發(fā)展過程,其成功經(jīng)驗(yàn)在于,它創(chuàng)造性地進(jìn)行了電子商務(wù)中每一環(huán)節(jié)的探索,包括系統(tǒng)平臺的建設(shè),程序編寫、網(wǎng)站設(shè)立、配送系統(tǒng)等等方面。用Amazon當(dāng)家人貝索斯的話說就是,“在現(xiàn)實(shí)世界的商店最有力的武器就是地段,地段,地段,而對于我們來說最重要的三件事就是技術(shù),技術(shù),技術(shù)。”
(三) eBay
eBay是世界聞名的拍賣網(wǎng)站,eBay公司通信部主管凱文•帕斯格拉夫認(rèn)為,“eBay成功的最重要原因在于公司管理和服務(wù)。”
其成功的奧秘可以列舉為以下幾點(diǎn):
①敢為天下先—在網(wǎng)絡(luò)尚不普及的時代,eBay率先進(jìn)入網(wǎng)絡(luò)拍賣領(lǐng)域;
②依托虛擬商場所產(chǎn)生的特有的“零庫存”是eBay公司取得成功的另一個重要原因。該公司的核心業(yè)務(wù)沒有任何庫存風(fēng)險,所有的商品都是由客戶提供,它只需要負(fù)責(zé)提供虛擬的拍賣平臺—網(wǎng)絡(luò)和軟件。所以,eBay公司的財(cái)務(wù)報表上不會出現(xiàn)“庫存費(fèi)用”和“保管費(fèi)用”等。
③自eBay公司成立開始,它就一直遵循兩條“黃金原則”:建設(shè)虛擬社區(qū),給網(wǎng)民以家的感覺;保證網(wǎng)站穩(wěn)定安全地運(yùn)行。
二、 國內(nèi)大型網(wǎng)站開發(fā)時的幾點(diǎn)建議
從本節(jié)開始,我們將結(jié)合國內(nèi)外大型IT網(wǎng)站在技術(shù)擴(kuò)展方面的沉痛教訓(xùn)和成功經(jīng)驗(yàn),探討在如今剛剛開始的Web 2.0時代如何應(yīng)對國內(nèi)網(wǎng)站即將面臨的數(shù)據(jù)訪問量增加(甚至是急劇膨脹)的問題,并提出一些供參考的策略和建議。
(四) 搭建科學(xué)的系統(tǒng)架構(gòu)
構(gòu)建大型的商業(yè)網(wǎng)站絕對不可能像構(gòu)建普通的小型網(wǎng)站一樣一蹴而就,需要從嚴(yán)格的軟件工程管理的角度進(jìn)行認(rèn)真規(guī)劃,有步驟有邏輯地進(jìn)行開發(fā)。對于大型網(wǎng)站來說,所采用的技術(shù)涉及面極其廣泛,從硬件到軟件、編程語言、數(shù)據(jù)庫、Web服務(wù)器、防火墻等各個領(lǐng)域都有了很高的要求,已經(jīng)不是原來簡單的html靜態(tài)網(wǎng)站所能比擬的。以著名的Yahoo!為例,他們的每一個大型網(wǎng)站工程都需要大量相應(yīng)專業(yè)人員的參與。
(五) 頁面靜態(tài)化
可不要小看純靜態(tài)化的HTML頁面!其實(shí)在很多情況下,HTML往往意味著“效率最高、消耗最小”,所以我們盡可能使我們的網(wǎng)站上的頁面采用靜態(tài)頁面來實(shí)現(xiàn)。但是,對于大量內(nèi)容并且頻繁更新的網(wǎng)站,我們無法全部手動實(shí)現(xiàn),因此可以開發(fā)相應(yīng)的自動化更新工具,例如我們常見的信息發(fā)布系統(tǒng)CMS。像我們經(jīng)常訪問的各個門戶站點(diǎn)的新聞頻道,甚至他們的其他頻道,都是通過信息發(fā)布系統(tǒng)來管理和實(shí)現(xiàn)的。信息發(fā)布系統(tǒng)可以實(shí)現(xiàn)最簡單的信息錄入自動生成靜態(tài)頁面,還能具備頻道管理、權(quán)限管理、自動抓取等功能,對于一個大型網(wǎng)站來說,擁有一套高效、可管理的CMS是必不可少的。
(六) 存儲問題
存儲也是一個大問題,一種是小文件的存儲,比如圖片這類;另一種是大文件的存儲,比如搜索引擎的索引。
大家知道,對于Web服務(wù)器來說,不管是Apache、IIS還是其他容器,圖片是最消耗資源的,于是我們有必要將圖片與頁面進(jìn)行分離,這是基本上大型網(wǎng)站都會采用的策略,他們都有獨(dú)立的圖片服務(wù)器,甚至很多臺圖片服務(wù)器。這樣的架構(gòu)可以降低提供頁面訪問請求的服務(wù)器系統(tǒng)壓力,并且可以保證系統(tǒng)不會因?yàn)閳D片問題而崩潰,在應(yīng)用服務(wù)器和圖片服務(wù)器上,可以進(jìn)行不同的配置優(yōu)化以保證更高的系統(tǒng)消耗和執(zhí)行效率。
(七) 數(shù)據(jù)庫技術(shù)—集群和庫表散列
對于大型網(wǎng)站而言,使用大型的數(shù)據(jù)庫服務(wù)器是必須的事情。但是,在面對大量訪問的時候,數(shù)據(jù)庫的瓶頸仍然會顯現(xiàn)出來,這時一臺數(shù)據(jù)庫將很快無法滿足應(yīng)用,于是我們需要借助于數(shù)據(jù)庫集群或者庫表散列技術(shù)。
在數(shù)據(jù)庫集群方面,很多數(shù)據(jù)庫廠商都有自己的解決方案,Oracle、Sybase、SQL Server等都有很好的方案,常用的MySQL提供的Master/Slave也是類似的方案。因此,你使用了什么樣的數(shù)據(jù)庫,就參考相應(yīng)的解決方案來實(shí)施即可。
上面提到的數(shù)據(jù)庫集群由于在架構(gòu)、成本、擴(kuò)張性方面都會受到所采用數(shù)據(jù)庫類型的限制,于是我們需要從應(yīng)用程序的角度來考慮改善系統(tǒng)架構(gòu),其中,庫表散列是常用并且最有效的解決方案。我們在應(yīng)用程序中安裝業(yè)務(wù)和應(yīng)用或者功能模塊將數(shù)據(jù)庫進(jìn)行分離,不同的模塊對應(yīng)不同的數(shù)據(jù)庫或者表,再按照一定的策略對某個頁面或者功能進(jìn)行更小的數(shù)據(jù)庫散列,比如用戶表,按照用戶ID進(jìn)行表散列,這樣就能夠低成本的提升系統(tǒng)的性能并且有很好的擴(kuò)展性。在這一方面一個現(xiàn)成的例子就是搜狐。它的論壇就是采用了這樣的架構(gòu),將論壇的用戶、設(shè)置、帖子等信息進(jìn)行數(shù)據(jù)庫分離,然后對帖子、用戶按照板塊和ID進(jìn)行散列數(shù)據(jù)庫和表,最終可以在配置文件中進(jìn)行簡單的配置便能讓系統(tǒng)隨時增加一臺低成本的數(shù)據(jù)庫進(jìn)來補(bǔ)充系統(tǒng)性能。
(八) 緩存策略
這絕對不單指低級的緩存技術(shù)相關(guān)的編程,應(yīng)從整個架構(gòu)角度著眼,深入研究Web服務(wù)器、數(shù)據(jù)庫服務(wù)器的各層級的緩沖策略,最后才是低級的緩沖技術(shù)的編程。不同的Web服務(wù)器、數(shù)據(jù)庫服務(wù)器及Web編程語言都有自己不同的緩沖策略。例如數(shù)據(jù)庫存儲方面,SQL Serve 2005中的主動式緩存機(jī)制,Oracle數(shù)據(jù)的cache group技術(shù),Hibernate的緩存包括Session的緩存和SessionFactory的緩存;Web服務(wù)器方面,Apache提供了自己的緩存模塊,也可以使用外加的Squid模塊進(jìn)行緩存,這兩種方式均可以有效的提高Apache的訪問響應(yīng)能力,IIS緩沖器技術(shù);至于web開發(fā)語言,所用緩存技術(shù)更存在很大不同,例如ASP.NET 2.0中提出了兩種緩存應(yīng)用程序數(shù)據(jù)和緩存服務(wù)頁輸出的策略,這兩種緩存技術(shù)相互獨(dú)立但不相互排斥,php有Pear的Cache模塊,等等。
(九) 鏡像
鏡像是大型網(wǎng)站常采用的提高性能和數(shù)據(jù)安全性的方式,鏡像的技術(shù)可以解決不同網(wǎng)絡(luò)接入商和地域帶來的用戶訪問速度差異。在鏡像的細(xì)節(jié)技術(shù)方面,這里不闡述太深,有很多專業(yè)的現(xiàn)成的解決架構(gòu)和產(chǎn)品可選。也有廉價的通過軟件實(shí)現(xiàn)的思路,比如Linux上的rsync等工具。
(十) 負(fù)載均衡
負(fù)載均衡將是大型網(wǎng)站解決高負(fù)荷訪問和大量并發(fā)請求采用的終極解決辦法。
負(fù)載均衡技術(shù)發(fā)展了多年,有很多專業(yè)的服務(wù)提供商和產(chǎn)品可以選擇,基于LAMP解決方案的Lighttped+Squid是相當(dāng)不錯的解決負(fù)載均衡和加速系統(tǒng)的有效方式。
(十一) 硬件四層交換
第四層交換使用第三層和第四層信息包的報頭信息,根據(jù)應(yīng)用區(qū)間識別業(yè)務(wù)流,將整個區(qū)間段的業(yè)務(wù)流分配到合適的應(yīng)用服務(wù)器進(jìn)行處理。第四層交換功能就象是虛IP,指向物理服務(wù)器。它傳輸?shù)臉I(yè)務(wù)服從的協(xié)議多種多樣,有HTTP、FTP、NFS、TelNET或其他協(xié)議。這些業(yè)務(wù)在物理服務(wù)器基礎(chǔ)上,需要復(fù)雜的載量平衡算法。在IP世界,業(yè)務(wù)類型由終端TCP或UDP端口地址來決定,在第四層交換中的應(yīng)用區(qū)間則由源端和終端IP地址、TCP和UDP端口共同決定。
在硬件四層交換產(chǎn)品領(lǐng)域,有一些知名的產(chǎn)品可以選擇,比如Alteon、F5等,這些產(chǎn)品很昂貴,但是物有所值,能夠提供非常優(yōu)秀的性能和很靈活的管理能力。Yahoo中國當(dāng)初接近2000臺服務(wù)器使用了三四臺Alteon就搞定了。
(十二) 軟件四層交換
大家知道了硬件四層交換機(jī)的原理后,基于OSI模型來實(shí)現(xiàn)的軟件四層交換也就應(yīng)運(yùn)而生,這樣的解決方案實(shí)現(xiàn)的原理一致,不過性能稍差。但是滿足一定量的壓力還是游刃有余的。
一個典型的使用負(fù)載均衡的策略就是,在軟件或者硬件四層交換的基礎(chǔ)上搭建squid集群,這種思路在很多大型網(wǎng)站包括搜索引擎上被采用,這樣的架構(gòu)低成本、高性能還有很強(qiáng)的擴(kuò)張性,隨時往架構(gòu)里面增減節(jié)點(diǎn)都非常容易。
(十三) 軟件投資問題
據(jù)報導(dǎo),目前國內(nèi)除了一些上市企業(yè)和特別大知名大公司以外,很少有企業(yè)在成本中考慮正版軟件的購置費(fèi)用。這種思維極有可能給中國互聯(lián)網(wǎng)帶來噩夢。如果一些公司真正面臨軟件資金方面的困難,完全可以考慮使用開源世界的LAMP解決方案(Linux+Apache+MySQL+Perl、php或者Python Web編程語言);否則,隨著我國加入WTO范圍的不斷擴(kuò)大,盜版打擊必然越來越嚴(yán)。因此,“茍且偷生”必將自食其果。
另外,隨著網(wǎng)絡(luò)帶寬日漸提升,WEB 2.0技術(shù)必將影響到網(wǎng)絡(luò)世界的幾乎每一個角落。因此,如何積聚技術(shù)人員進(jìn)行技術(shù)攻關(guān)并進(jìn)一步加強(qiáng)安全防范也成為一個日益嚴(yán)峻的問題,宜盡早納入到公司的議事日程。
三、 總結(jié)
中國電子商務(wù)真正理性發(fā)展的一個標(biāo)志,是大量的傳統(tǒng)企業(yè)實(shí)實(shí)在在地開始用互聯(lián)網(wǎng)來處理商務(wù)、做生意,而現(xiàn)在這樣的浪潮已經(jīng)開始。北京發(fā)行集團(tuán),聯(lián)合SINA、6688.com等單位共同推出的網(wǎng)上虛擬書店—新新書店就是這樣的一個標(biāo)志。
隨著網(wǎng)絡(luò)帶寬日漸提升,隨著網(wǎng)絡(luò)理念和WEB 2.0技術(shù)的斷深入人心,各種B2B、B2C、C2C等電子商務(wù)模式很可能以立體交叉方式整合到各種大型商務(wù)網(wǎng)站中來。因此,作為公司的技術(shù)人員,作為臨危救駕的“白衣騎士”,如何應(yīng)對海量存儲、海量訪問問題,海量信息檢索的問題,日益嚴(yán)峻的安全問題,等等,已經(jīng)刻不容緩
it知識庫:如何走出海量數(shù)據(jù)及訪問量壓力困境,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。