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