引言近段時間以來,經過接觸有關海量數據處理和搜索引擎的諸多技術,經常見識到很多精妙絕倫的架構圖。除了往往感嘆於每幅圖表面上的繪製的精細以外,更爲架構圖背後所隱藏的設計思想所歎服。我的這兩天一直在蒐集各大型網站的架構設計圖,一爲了一飽眼福,領略各種大型網站架構設計的精彩以外,二來也可供閒時反覆琢磨體會,何樂而不爲呢?特此,總結整理了諸如國外wikipedia,Facebook,Yahoo!,YouTube,MySpace,Twitter,國內如優酷網等大型網站的技術架構(本文重點分析優酷網的技術架構),以饗讀者。
本文着重凸顯每一幅圖的精彩之處與其背後含義,而圖的說明性文字則從簡從略。ok,好好享受此番架構盛宴吧。固然,如有任何建議或問題,歡迎不吝指正。謝謝。html
WikiPedia 技術架構圖Copy @Mark Bergsma
。
Facebook 搜索功能的架構示意圖
細心的讀者必定能發現,上副架構圖以前出如今此文之中:從幾幅架構圖中偷得半點海里數據處理經驗。本文與前文最大的不一樣是,前文只有幾幅,此文系列將有上百幅架構圖,任您盡情觀賞。前端
Yahoo! Mail 架構
Yahoo! Mail 架構部署了 Oracle RAC,用來存儲 Mail 服務相關的 Meta 數據。node
twitter的總體架構設計圖
twitter平臺大體由twitter.com、手機以及第三方應用構成,以下圖所示(其中流量主要以手機和第三方爲主要來源):web
緩存在大型web項目中起到了舉足輕重的做用,畢竟數據越靠近CPU存取速度越快。下圖是twitter的緩存架構圖:
關於緩存系統,還能夠看看下幅圖:算法
GAE的架構圖
簡單而言,上述GAE的架構分爲如圖所示的三個部分:前端,Datastore和服務羣。數據庫
Amazon的Dynamo Key-Value存儲架構圖
可能有讀者並不熟悉Amazon,它如今已是全球商品品種最多的網上零售商和全球第2大互聯網公司。而以前它僅僅是一個小小的網上書店。ok,下面,我們來見識下它的架構。
Dynamo是亞馬遜的key-value模式的存儲平臺,可用性和擴展性都很好,性能也不錯:讀寫訪問中99.9%的響應時間都在300ms內。按分佈式系統經常使用的哈希算法切分數據,分放在不一樣的node上。Read操做時,也是根據key的哈希值尋找對應的node。Dynamo使用了 Consistent Hashing算法,node對應的再也不是一個肯定的hash值,而是一個hash值範圍,key的hash值落在這個範圍內,則順時針沿ring找,碰到的第一個node即爲所需。
Dynamo對Consistent Hashing算法的改進在於:它放在環上做爲一個node的是一組機器(而不是memcached把一臺機器做爲node),這一組機器是經過同步機制保證數據一致的。
下圖是分佈式存儲系統的示意圖,讀者可觀摩之:緩存
Amazon的雲架構圖以下:服務器
Amazon的雲架構圖
從一開始,優酷網就自建了一套CMS來解決前端的頁面顯示,各個模塊之間分離得比較恰當,前端可擴展性很好,UI的分離,讓開發與維護變得十分簡單和靈活,下圖是優酷前端的模塊調用關係:
這樣,就根據module、method及params來肯定調用相對獨立的模塊,顯得很是簡潔。下圖是優酷的前端局部架構圖:
優酷的數據庫架構也是經歷了許多波折,從一開始的單臺MySQL服務器(Just Running)到簡單的MySQL主從複製、SSD優化、垂直分庫、水平sharding分庫。網絡
附註:一、此段優酷網的技術架構整理於此處:/system-analysis/20110918/264936.html;二、同時推薦一個很是好的站點:http://www.dbanotes.net/)。從上百幅架構圖中學得半點大型網站建設經驗(上),完。
後記此篇文章終於寫完了,從昨日有整理此文的動機後,到今日上午找電腦上網而不得,再到此刻在網吧完成此文。着實也體味了一把什麼叫作爲技術狂熱的感受。大型網站架構是一個實戰性很強的東西,而你我或許如今暫時還只是一個在外看熱鬧的門外漢而已。不過,不要緊,小魚小蝦照樣能暢遊汪汪大洋,更況且往後亦能成長爲大魚大鯊。架構