大中型网站架构探秘
相信很多IT人士都有過(guò)搭建自己主頁(yè)的經(jīng)驗(yàn),10多年前的個(gè)人主頁(yè)都非常簡(jiǎn)單,很多由Frontpage構(gòu)建,多屬于靜態(tài)HTML頁(yè)面,最多加一點(diǎn)特效而已。不過(guò)10年間,技術(shù)的進(jìn)步是驚人的。現(xiàn)在,一個(gè)網(wǎng)站絕不可能僅僅由幾個(gè)HTML頁(yè)面構(gòu)成。
相信很多IT人士都有過(guò)搭建自己主頁(yè)的經(jīng)驗(yàn),10多年前的個(gè)人主頁(yè)都非常簡(jiǎn)單,很多由Frontpage構(gòu)建,多屬于靜態(tài)HTML頁(yè)面,最多加一點(diǎn)特效而已。不過(guò)10年間,技術(shù)的進(jìn)步是驚人的。現(xiàn)在,一個(gè)網(wǎng)站絕不可能僅僅由幾個(gè)HTML頁(yè)面構(gòu)成。我們隨便舉一個(gè)例子,國(guó)內(nèi)圖片網(wǎng)站yupoo.com,在 chinarank排名1000左右,而Alexa排名則為5000左右,這個(gè)網(wǎng)站不算大,就是這樣一個(gè)中型站點(diǎn),擁有超過(guò)60臺(tái)服務(wù)器,架構(gòu)中涉及的Web服務(wù)器就包括了Lighttpd、Apache和 nginx。Yupoo的流量不算大,就已經(jīng)擁有了60臺(tái)服務(wù)器,事實(shí)上,排名前幾位的網(wǎng)站,都擁有成千上萬(wàn)臺(tái)服務(wù)器,如何協(xié)調(diào)這些服務(wù)器之間的工作負(fù)載,如何統(tǒng)一指揮調(diào)度,如何維護(hù)這些服務(wù)器硬件都是棘手的挑戰(zhàn)。
負(fù)載均衡:
負(fù)載均衡是所有大中型網(wǎng)站必備的部署。顯然,大型網(wǎng)站每天上千萬(wàn)獨(dú)立IP的訪(fǎng)問(wèn)量,一個(gè)Web服務(wù)器根本承擔(dān)不了,網(wǎng)站后臺(tái)必需有多臺(tái)服務(wù)器共同工作,因此各種負(fù)載均衡技術(shù)就應(yīng)運(yùn)而生了。
較早的負(fù)載均衡是DNS負(fù)載均衡。原理很簡(jiǎn)單,只要在域名解析的時(shí)候,將多個(gè)地址配置成同一個(gè)域名,負(fù)載均衡就完成了。不同用戶(hù)點(diǎn)擊同一個(gè)域名的時(shí)候,實(shí)際上只解析給用戶(hù)一個(gè)地址,這樣用戶(hù)實(shí)際上訪(fǎng)問(wèn)的是不同的Web服務(wù)器,就減輕了每個(gè)服務(wù)器的負(fù)擔(dān)。這個(gè)DNS負(fù)載均衡方法,一般而言是隨機(jī)抽取地址。DNS負(fù)載均衡早期被廣泛使用,優(yōu)點(diǎn)是簡(jiǎn)單易用,但是DNS負(fù)載均衡還是有一些問(wèn)題存在。如果某一臺(tái)服務(wù)器發(fā)生了故障,而DNS的下一個(gè)刷新周期又沒(méi)到,這樣就可能導(dǎo)致某些用戶(hù)無(wú)法訪(fǎng)問(wèn)站點(diǎn)的情況發(fā)生。而另一個(gè)缺點(diǎn)在于DNS負(fù)載均衡隨機(jī)性太強(qiáng),比如一段時(shí)間內(nèi)眾多訪(fǎng)問(wèn)都被指向同一個(gè)地址,而另外的地址卻閑置,就造成了局部繁忙的不良現(xiàn)象。而且有時(shí)某處服務(wù)器正在運(yùn)行其他應(yīng)用而處于繁忙狀態(tài),DNS負(fù)載均衡也無(wú)從得知,而依舊平均的解析域名。
稍微復(fù)雜一點(diǎn)的負(fù)載均衡,是反向代理,當(dāng)外部有請(qǐng)求到代理服務(wù)器,代理服務(wù)器再將該請(qǐng)求均勻的轉(zhuǎn)發(fā)到內(nèi)網(wǎng)的服務(wù)器上。這種方式被廣泛采用,比如說(shuō)上面提到的又拍網(wǎng)yupoo.com,就采用了nginx作為反向代理。此外,現(xiàn)在還可以購(gòu)買(mǎi)專(zhuān)業(yè)的硬件設(shè)備,比如 Plentyoffish.com(全球最大的婚介網(wǎng)站)就采用了網(wǎng)捷網(wǎng)絡(luò)公司的Web交換器ServerIron作為硬件負(fù)載均衡,ServerIron 能夠有效地處理 16,000,000個(gè)并發(fā)連接,并且可以改善服務(wù)器負(fù)載均衡和緩沖轉(zhuǎn)換,像ServerIron這類(lèi)的硬件產(chǎn)品并非只有網(wǎng)捷一家提供,由于大型網(wǎng)站預(yù)算充裕,因此也可以選擇一些其他的硬件設(shè)備來(lái)做負(fù)載均衡。當(dāng)然了,我們也別忽略了最基本的軟件負(fù)載均衡——Windows Server就帶有這樣的功能。
負(fù)載均衡還有一個(gè)極為簡(jiǎn)單的方法,就是建立鏡像站點(diǎn)。比如華軍軟件或者天空軟件,都直接采用了鏡像站點(diǎn)。這個(gè)方式很直接,省去了很多麻煩。以華軍軟件園為例,登陸華軍軟件園的時(shí)候,我們將有多種選擇,可選電信、網(wǎng)通等網(wǎng)絡(luò);而下載某一軟件的時(shí)候,為了使用戶(hù)得到更快的速度,天空和華軍在中國(guó)各地都安排了服務(wù)器,可以提供距離最近的下載服務(wù)。不過(guò),也有一些麻煩,就是每一次選擇都是人工手動(dòng)選擇。總之,這一系列負(fù)載均衡方法,都得以讓大型網(wǎng)站的負(fù)載均勻,不會(huì)有哪個(gè)服務(wù)器有太大的壓力。
CDN:
CDN( Content Delivery Network),內(nèi)容分發(fā)網(wǎng)絡(luò)也是大型網(wǎng)站必備的部署之一。CDN的原理不難理解,就是將網(wǎng)頁(yè)內(nèi)容存放到離用戶(hù)更近的緩存服務(wù)器上,減少路由,從而加快遠(yuǎn)距離的訪(fǎng)問(wèn)速度。比如說(shuō),你隨意登陸一個(gè)國(guó)外小站,速度可能很慢。因?yàn)閲?guó)外網(wǎng)站到國(guó)內(nèi)的最終客戶(hù)端的路徑冗長(zhǎng),但是如果你登陸部署了CDN的網(wǎng)站,比如 Plentyoffish.com,你會(huì)發(fā)現(xiàn)速度非常快,跟國(guó)內(nèi)的網(wǎng)站訪(fǎng)問(wèn)速度差異已經(jīng)無(wú)法從感知上判斷。依照Cache存放的位置不同,CDN也有一些類(lèi)別,不同的網(wǎng)站會(huì)根據(jù)具體需求,有不同的選擇。CDN通常是由獨(dú)立的CDN商提供的。舉一個(gè)例子,就是網(wǎng)易,我的查詢(xún)時(shí)間是2008年2月28日,我們發(fā)現(xiàn),同一個(gè)域名下的有很多個(gè)IP地址,這就說(shuō)明了首頁(yè)CDN的部署。
C:\>nslookup www.163.com
Server: ns.lnpta.net.cn
Address: 202.96.64.68
Non-authoritative answer:
Name: www.cache.split.netease.com
Addresses: 202.108.9.37, 202.108.9.38, 202.108.9.39, 202.108.9.51
202.108.9.52, 202.108.9.31, 202.108.9.32, 202.108.9.33, 202.108.9.34
202.108.9.36
而我們?nèi)绻樵?xún)一個(gè)簡(jiǎn)單的個(gè)人網(wǎng)站,則不可能有CDN;另外,如果有興趣,我們也可以仔細(xì)察看一個(gè)網(wǎng)站多個(gè)二級(jí)域名的CDN情況。
平臺(tái)設(shè)計(jì):
大型網(wǎng)站一般都有著非常復(fù)雜的與用戶(hù)交互的內(nèi)容,必須大量調(diào)用數(shù)據(jù)庫(kù),因此一個(gè)完善的數(shù)據(jù)庫(kù)設(shè)計(jì)對(duì)于大型網(wǎng)站非常重要。例如上面提到的 Plentyoffish.com,這個(gè)站其實(shí)是個(gè)人網(wǎng)站,但流量大的驚人,該網(wǎng)站有一個(gè)主要的數(shù)據(jù)庫(kù),兩個(gè)搜索數(shù)據(jù)庫(kù),早些時(shí)候,plentyoffish.com的數(shù)據(jù)庫(kù)設(shè)計(jì)問(wèn)題頻頻,經(jīng)常到數(shù)據(jù)庫(kù)堵塞,所以站長(zhǎng)花費(fèi)時(shí)間最多的地方就是數(shù)據(jù)庫(kù)優(yōu)化。數(shù)據(jù)庫(kù)優(yōu)化沒(méi)有什么特別的捷徑,其實(shí)很少有一次成型的完美數(shù)據(jù)庫(kù)構(gòu)建,只能是按照特定的需要來(lái)設(shè)計(jì)數(shù)據(jù)庫(kù),如有不足再去著手改進(jìn)。不過(guò)大型網(wǎng)站還是有一些共性,比如說(shuō)圖片存儲(chǔ)單獨(dú)使用圖片數(shù)據(jù)庫(kù),盡量使用靜態(tài)頁(yè)面來(lái)減少數(shù)據(jù)庫(kù)調(diào)用等等。
還有很多大型網(wǎng)站,都有著非常深厚的技術(shù)實(shí)力,可以開(kāi)發(fā)屬于自己的平臺(tái)。比如說(shuō)谷歌,Google.com就有著自己獨(dú)特的平臺(tái),主要包括 GFS、MapReduce和 BigTable。因?yàn)楹A繑?shù)據(jù)存儲(chǔ),所以常規(guī)的數(shù)據(jù)庫(kù)調(diào)用查詢(xún)是非常恐怖的,每次查詢(xún)都將調(diào)用百億個(gè)頁(yè)面,成千上萬(wàn)個(gè)并發(fā)檢索足以使得谷歌系統(tǒng)崩潰,因此Google File System將大量頁(yè)面以獨(dú)特的方法壓縮之后再提供檢索;整個(gè)系統(tǒng)一共包括超過(guò)兩百個(gè)集群,再由MapReduce來(lái)協(xié)同作業(yè)。不僅僅谷歌,比如百度、中搜等等網(wǎng)站也都有自己研發(fā)的獨(dú)特的平臺(tái)。
硬件配置:
大型網(wǎng)站的硬件配置一定就好嗎?答案是否定的。比如說(shuō)全球最大的網(wǎng)站谷歌,google.com的整個(gè)架構(gòu)的基礎(chǔ)是幾十萬(wàn)臺(tái)普通的PC級(jí)別服務(wù)器。谷歌一些服務(wù)器的細(xì)節(jié)為商業(yè)機(jī)密,但是根據(jù)谷歌已經(jīng)披露的資料顯示,在2006年之前谷歌擁有45萬(wàn)臺(tái)服務(wù)器,這些服務(wù)器都是非常普通的PC級(jí)服務(wù)器,甚至硬盤(pán)接口都還是有些過(guò)時(shí)的IDE接口。這也是谷歌的獨(dú)特架構(gòu)決定的,而對(duì)比谷歌,維基百科則擁有非常強(qiáng)勢(shì)的服務(wù)器,全部為SCSI硬盤(pán),而且主要的主機(jī)中都有多達(dá)6塊硬盤(pán),超過(guò)16GB內(nèi)存。這比較容易理解,因?yàn)楣雀柙谌驌碛泻芏鄠€(gè)數(shù)據(jù)中心,員工數(shù)量眾多,完全有能力管理數(shù)以萬(wàn)計(jì)服務(wù)器的運(yùn)行,而維基百科則為非營(yíng)利機(jī)構(gòu),主要依靠捐贈(zèng)生存,員工數(shù)量非常稀少,因此必須配備強(qiáng)勢(shì)的服務(wù)器。其實(shí),每個(gè)網(wǎng)站都應(yīng)該根據(jù)自己獨(dú)特的情況來(lái)配置硬件,目前 1TB SATA硬盤(pán)已經(jīng)步入了量產(chǎn)階段,可是2年以前1TB的硬盤(pán)只能通過(guò)RAID 0來(lái)實(shí)現(xiàn),可見(jiàn)硬件的更新速度非常驚人,所以即便預(yù)算充裕,在配置服務(wù)器的時(shí)候也應(yīng)該多考慮實(shí)際用途,而不一定要擁有最好的配置。
總結(jié):
以上只是大型網(wǎng)站的概括總結(jié),其實(shí)每個(gè)網(wǎng)站都有自己獨(dú)特的一面,所以以上的每一條規(guī)則都未必是死規(guī)定。比如說(shuō)著重溝通的Twitter.com,本質(zhì)就是一個(gè)異步聊天室,因此靜態(tài)頁(yè)面就不見(jiàn)的有必要。總之,網(wǎng)站架構(gòu)沒(méi)有死定律,只要合適網(wǎng)站的,就是好的架構(gòu)。
?
總結(jié)
- 上一篇: c+gui语言可视化编程
- 下一篇: 后面的 飞鸽传书 l代表lock