這篇文章已經比較老了,大概發佈於2012年之前。偶爾讀到這篇文章,感受很不錯,想找到原文收藏一下,可是原文已經找不到了,只知道做者是阿里員工卡特。網絡中不少轉載版本排版實在難看,遂本身寫一篇精心排版的版本。
你發現快要過年了,因而想給你的女友買一件毛衣,你打開了www.taobao.com
,這時你的瀏覽器首先查詢DNS服務器,將www.taobao.com
轉換成IP地址。不過你首先會發現,在不一樣的地區或者不一樣的網絡(電信、聯通、移動)下,轉換後的IP地址極可能是不同的,這首先涉及負載均衡的第一步,經過DNS解析域名時,將你的訪問分配到不一樣的入口,同時儘量保證你所訪問的入口是全部入口中可能較快的一個(這和後文的CDN
不同)。前端
你經過這個入口成功地訪問了www.taobao.com
實際的入口IP地址,這時產生了一個PV
(Page View
,頁面訪問量。每日每一個網站的總PV量是形容一個網站規模的重要指標。淘寶網全網在平日(非促銷期間)的PV大概是16~25億個之間)。同時做爲一個獨立的用戶,你此次訪問淘寶網的全部頁面均算做一個UV(Unique Visitor
,用戶訪問)。最近臭名昭著的12306.cn
的日PV
量最高峯在10億個左右,而UV量卻遠小於淘寶網十餘倍,這其中的緣由相信你們都知道。chrome
由於同一時刻訪問www.taobao.com
的人數過於巨大,因此,即使是生成淘寶首頁頁面的服務器,也不可能僅有一臺,僅用於生成www.taobao.com
首頁的服務器就可能有成百上千臺,那麼你的一次訪問時生成頁面給你看的任務便會被分配給其中一臺服務器完成。這個過程要保證公正、公平、平均(即這成百上千臺服務器每臺負擔的用戶數要差很少),這一很複雜的過程由幾個系統配合完成,其中最關鍵的即是LVS
(Linux Virtual Server,世界上最流行的負載均衡系統之一,是由目前在淘寶網供職的章文嵩博士開發的)。後端
通過一系列複雜的邏輯運算和數據處理,此次用於給你看的淘寶網首頁的HTML內容便成功生成了。對Web前端稍微有點常識的人都應該知道,瀏覽器下一步會加載頁面中用到的CSS
、JS (JavaScript)
、圖片等樣式、腳本和資源文件。可是可能相對較少的人才會知道,你的瀏覽器在同一個域名下併發加載的資源數量是有限的,例如IE 6和IE 7是兩個,IE 8是6個,chrome各版本不大同樣,通常是4~6個。我剛剛看了一下,我訪問淘寶網首頁須要加載126個資源,那麼如此小的併發鏈接數天然會加載好久。因此前端開發人員每每會將上述這些資源文件分佈在多個域名下,變相地繞過瀏覽器的這個限制,同時也爲下文的CDN
工做作準備。瀏覽器
據不可靠消息稱,在2011年「雙十一」當天高峯,淘寶的訪問流量最巔峯達到871GB/s
,這個數字意味着須要178萬個4MB/s
的家庭寬帶才能負擔得起,也徹底有能力拖垮一箇中小城市的所有互聯網帶寬。顯然,這些訪問流量不可能集中在一塊兒,而且你們都知道,不一樣地區、不一樣網絡(電信、聯通等)之間互訪會很是緩慢,可是你卻不多發現淘寶網訪問緩慢,這即是CDN
(Content Delivery Network,即內容分發網絡的做用)。淘寶在全國各地創建了數十個甚至上百個CDN
節點,利用一些手段保證你訪問的(這裏主要指JS
、CSS
、圖片等)站點是離你最近的CDN
節點,這樣便保證了大流量的分散以及在各地訪問的加速。服務器
這便出現了一個問題,那就是倘若一個賣家發佈了一個新的寶貝,上傳了幾張新的寶貝圖片,那麼淘寶網如何保證全國各地的CDN
節點中都會同步存在這幾張圖片供用戶使用呢?這就涉及大量的內容分發與同步的相關技術。另外,淘寶上擁有海量的寶貝圖片等靜態文件,這些文件的總容量也達到了數PB (1PB=1024TB=1048576GB)
,爲了快速存取這些文件,淘寶開發了分佈式文件系統TFS
(TaoBao File System)來處理這類問題。網絡
好了,這時你終於加載完成淘寶首頁,而後習慣性地在首頁搜索框中輸入「毛衣」二字並按回車鍵,這時你又產生了一個PV,而後,淘寶網的主搜索系統便開始爲你服務,它首先對你輸入的內容基於一個分詞庫進行分詞操做。衆所周知,英文是以詞爲單位的,詞和詞之間靠空格隔開,而中文是以字爲單位,句子中全部的字連起來才能描述一個意思。例如,英文句子「I am a student」用中文表示,則爲 「我是一個學生」。計算機能夠很簡單地經過空格知道 student 是一個單詞,可是不太容易明白「學」、「生」兩個字合起來才表示一個詞。把中文的漢字序列切分紅有意義的詞,就是中文分詞,有些人也稱爲切詞。「我是一個學生」 分詞的結果是 「我」 「是」 「一個」 「學生」。併發
進行分詞操做以後,還須要根據你輸入的搜索詞進行購物意圖分析。用戶進行搜索時經常有以下幾類意圖。負載均衡
經過對你的購物意圖的分析,主搜索會呈現出徹底不一樣的結果。分佈式
以後的數個步驟後,主搜索系統便根據上述以及更多複雜的條件列出了搜索結果,這一切是由一千多臺搜索服務器完成的。而後你開始逐一點擊瀏覽搜索出的寶貝,查看寶貝詳情頁面。常常網購的親們會發現,當你買過一個寶貝以後,即使是商家屢次修改了寶貝詳情頁,你仍然可以經過「已買到的寶貝」查看當時的快照。這是爲了防止商家對在商品詳情中承諾過的東西賴帳不認。顯然,對於每一年數十億甚至上百億筆交易的商品詳情快照進行保存和快速調用不是一件簡單的事情。這其中又涉及數套系統的共同協做,其中較爲重要的是Tair(淘寶自行研發的分佈式KV存儲方案)。oop
接下來,不管你是否真的進行了交易,你的這些訪問行爲都會如實地被系統記錄下來,用於後續的業務邏輯和數據分析。這些記錄中的訪問日誌記錄即是最重要的記錄之一,可是從前面咱們得知,這些訪問是分佈在各個地區多個不一樣的服務器上的,而且因爲用戶衆多,這些日誌記錄都很是龐大,達到TB級別也很是正常。那麼,爲了快速、及時、同步地傳輸這些日誌數據,淘寶研發了 TimeTunnel,用於進行實時的數據傳輸,而後交給後端系統進行計算報表等操做。
你的瀏覽數據、交易數據以及其餘不少數據記錄均會被保留下來,使得淘寶存儲的歷史數據垂手可得地便達到了數十甚至更多個PB。如此巨大的數據量存儲在阿里巴巴集團的數據倉庫中,而且其中有些數據使用了壓縮比高達 1:120
的極限存儲技術。以後這些數據會經過一個叫作雲梯的基於Hadoop的由3000多臺服務器組成的超大規模數據系統,以及一個基於阿里巴巴集團自主研發的ODPS系統的數據系統,不斷地進行分析和挖掘。
淘寶從這些數據中可以知道小到你是誰,你喜歡什麼,你的孩子幾歲了,你是否在談戀愛,喜歡玩魔獸世界的人喜歡什麼樣的飲料等,大到各行各業的零售狀況、各種商品的興衰消亡等海量的信息。
說了這麼多,其實也只是敘述了淘寶上正在運行的成千上萬個系統中的寥寥幾個。即使是你僅僅訪問一次淘寶的首頁,所涉及的技術和系統規模都是你徹底沒法想象的,是淘寶2000多名頂級的工程師們的心血結晶,其中甚至包括長江學者、國家科學技術最高獎得主等衆多牛人。一樣,百度、騰訊等的業務系統也毫不比淘寶簡單。你須要知道的是,你天天使用的互聯網產品看似簡單易用,背後卻凝聚着不可思議的智慧與勞動。
(本文所涉及的技術與數據均來源於互聯網)