首頁  >  文章  >  php高級技術分享:為什麼看起來不是很複雜的網站,淘寶、騰訊卻需要大量頂尖高手來開發?

php高級技術分享:為什麼看起來不是很複雜的網站,淘寶、騰訊卻需要大量頂尖高手來開發?

PHPz
PHPz原創
2017-04-12 13:47:134160瀏覽

為什麼看起來不是很複雜的網站,淘寶、騰訊卻需要大量頂尖高手來開發?就拿淘寶來說說,當作給新人一些科普。


php高級技術分享:為什麼看起來不是很複雜的網站,淘寶、騰訊卻需要大量頂尖高手來開發?


先說你看到的頁面上,最重要的幾個:

【搜尋商品】

這個功能,如果你有幾千條商品,完全可以用select * from tableXX where title like %XX%這樣的操作來搞定。但是-當你有10000000000(一百億)商品的時候,任何一個資料庫都無法存放了,請問你怎麼搜尋?這裡需要用到分散式的資料儲存方案,另外這個搜尋也不可能直接從資料庫裡來取數據,必然要用到搜尋引擎(簡單來說搜尋引擎更快)。好,能搜出商品了,是否大功告成可以啵一個了?早點呢,誰家的商品出現在第一頁?這裡需要用到巨複雜的排序演算法。要是再根據你的購買行為做一些個人化的推薦——這夠一幫牛叉的演算法工程師奮鬥了終生。

##########

【商品詳情】就是搜尋完畢,看到你感興趣的,點擊查看商品的頁面,這個頁面有商品的屬性、詳細描述、評價、賣家資訊等等,這個頁面的每天展示次數在30億以上,同樣的道理,如果你做一個網站每天有10個人訪問,你絲毫感覺不到服務器的壓力,但是30億,要解決的問題就多了去了。首先,這些請求不能直接壓到資料庫上,任何單機或分散式的資料庫,承受30億每天的壓力,都將崩潰到完全沒有幸福感,這種情況下要用到的技術就是大規模的分散式緩存,所有的賣家資訊、評價資訊、商品描述都是從緩存裡面來取到的,甚至更加極致的一點「商品的瀏覽量」這個信息,每打開頁面一次都要刷新,你猜能夠從緩存裡面來取嗎?淘寶做到了,整個商品的詳情都在緩存裡面。


【商品圖片】一個商品有5張圖片,商品描述裡面有更多圖片,你猜淘寶有多少張圖片要儲存? 100億以上。這麼多圖片要是在你的硬碟裡面,你怎麼去找其中的一張?要是你的同學想拷貝你的圖片,你需要他準備多少個硬碟?你需要配置多少大的頻寬?你們的網卡是否能夠承受?你需要多長時間拷貝給他?這樣的規模,很不幸市面上已經沒有任何商業的解決方案,最終我們必須自己來開發一套儲存系統,如果你聽過google的GFS,我們跟他類似,叫TFS。順便說一下,騰訊也有這樣的一套,也叫TFS。


【廣告系統】淘寶上有很多廣告,什麼,你不知道?那表示我們的廣告做的還不錯,居然很多人不認為它是廣告,賣家怎麼出價去買淘寶的廣告位?廣告怎麼展示?怎麼查看廣告成效?這又是一套演算法精奇的系統。


【BOSS系統】淘寶的工作人員怎麼去管理這麼龐大的一個系統,例如某時刻突然宣告某位作家的作品全部從淘寶消失,從資料庫到搜尋引擎到廣告系統,裡面的相關數據在幾分鐘內全部消失,這又需要一個牛叉的後台支撐系統。


【运维体系】支持这么庞大的一个网站,你猜需要多少台服务器?几千台?那是零头。这么多服务器,上面部署什么操作系统,操作系统的内核能否优化?Java虚拟机能否优化?通信模块有没有榨取性能的空间?软件怎么部署上去?出了问题怎么回滚?你装过操作系统吧,优化过吧,被360坑过没,崩溃过没?这里面又有很多门道。


不再多写了,除了上面提到的这些,还有很多很多需要做的技术,当然并不是这些东西有多么高不可攀,任何复杂的庞大的东西都是从小到大做起来的,里面需要牛叉到不行的大犇,也需要充满好奇心的菜鸟,最后这一句,你当我是别有用心好了。



forecho :


刚看了一篇很有意思的文章,讲的很清楚——《你刚才在淘宝上买了一件东西》


你發現快要過年了,於是想給你的女朋友買一件毛衣,你打開了http://www.taobao.com。這時你的瀏覽器先查詢DNS伺服器,將http://www.taobao.com轉換成ip位址。不過首先你會發現,你在不同的地區或不同的網路(電信、聯通、移動)的情況下,轉換後的IP位址很可能是不一樣的,這首先涉及到負載平衡的第一步,透過DNS解析網域名稱時將你的訪問分配到不同的入口,同時盡可能保證你所訪問的入口是所有入口中可能較快的一個 (這和後文的CDN不一樣)。


你透過這個入口成功的訪問了http://www.taobao.com的實際的入口IP位址。這時你產生了一個PV,也就是Page View,頁面存取。每日每個網站的總PV量是形容一個網站規模的重要指標。淘寶網全網在平日(非促銷期間)的PV大概是16-25億之間。同時作為獨立的用戶,你這次造訪淘寶網的所有頁面,均算是一個UV(Unique Visitor使用者存取)。最近臭名昭著的http://12306.cn的日PV量最高峰在10億左右,而UV量卻遠小於淘寶網十餘倍,這其中的原因我相信大家都會知道。


因為同一時刻造訪http://www.taobao.com的人數過於巨大,所以即使是產生淘寶首頁頁面的伺服器,也不可能僅一台。僅用於生成http://www.taobao.com首頁的伺服器就可能有成百上千台,那麼你的一次造訪時生成頁面給你看的任務便會被分配給其中一台伺服器完成。這個過程要確保公正、公平、平均(暨這成百上千台伺服器每台負擔的用戶數要差不多),這一很複雜的過程是由幾個系統配合完成,其中最關鍵的便是LVS( Linux Virtual Server),世界上最受歡迎的負載平衡系統之一,正是由目前在淘寶網任職的章文嵩博士開發的。


經過一系列複雜的邏輯運算和資料處理,用於這次給你看的淘寶網首頁的HTML內容便生成成功了。對web前端稍微有點常識的童鞋都應該知道,下一步瀏覽器會去載入頁面中用到的css、js、圖片、腳本和資源檔。但可能相對較少的同學才會知道,你的瀏覽器在同一個網域下並發載入的資源數量是有限制的,例如IE6-7是兩個,IE8是6個,Chrome各版本不大一樣,一般是4-6個。我剛剛看了一下,我訪問淘寶網首頁需要加載126個資源,那麼如此小的並發連接數自然會加載很久。所以前端開發人員往往會將上述這些資源檔案分佈在好多個網域下,變相的繞過瀏覽器的這個限制,同時也為下文的CDN工作做準備。


據不可靠消息,在雙十一當天高峰,淘寶的訪問流量最巔峰達到871GB/S。這個數字意味著需要178萬個4Mb頻寬的家庭寬頻才能負擔的起,也完全有能力拖垮一個中小城市的全部網路頻寬。那麼顯然,這些訪問流量不可能集中在一起。而且大家都知道,不同地區不同網路(電信、聯通等)之間互訪會非常緩慢,但是你卻發現很少發現淘寶網訪問緩慢。這便是CDN(Content Delivery Network),即內容傳遞網路的角色。淘寶在全國各地建立了數十上百個CDN節點,利用一些手段保證你訪問的(這裡主要指js、css、圖片等)地方是離你最近的CDN節點,這樣便保證了大流量分散在各地訪問的加速節點上。


這便出現了一個問題,那就是假若一個賣家發布了一個新的寶貝,上傳了幾張新的寶貝圖片,那麼淘寶網如何確保全國各地的CDN節點中都會同步的存在這幾張圖片供用戶使用呢?這裡邊就涉及了大量的內容分發與同步的相關技術。淘寶開發了分散式檔案系統TFS(Taobao File System)來處理這類問題。


好了,這時你終於加載了淘寶首頁,那麼你習慣性的在首頁搜尋框中輸入了'毛衣'二字並敲回車,這時你又產生了一個PV,然後,淘寶網的主搜尋系統便開始為你服務了。它首先對你輸入的內容是基於一個分詞庫進行分詞操作。眾所周知,英文是以詞為單位的,詞和詞之間是靠空格隔開,而中文是以字為單位,句子中所有的字連起來才能描述一個意思。例如,英文句子I am a student,用中文則為:「我是一個學生」。電腦可以很簡單透過空格知道student是一個單詞,但是不能很容易明白「學」、「生」兩個字合起來才表示一個詞。把中文的漢字序列切分成有意義的詞,就是中文分詞,有些人也稱為切詞。我是一個學生,分詞的結果是:我 是 一個學生。


#

進行分詞之後,還需要根據你輸入的搜尋字詞進行你的購物意圖分析。用戶進行搜尋時常有以下幾類意圖:(1)瀏覽型:沒有明確的購物對象和意圖,邊看邊買,用戶比較隨意和感性。 Query例如:”2010年10大香水排行”,”2010年流行毛衣”, “zippo有多少種類?”;(2)查詢型:有一定的購物意圖,體現在對屬性的要求上。 Query例如:”適合老人用的手機”,”500元 手錶」;(3)對比型:已經縮小了購物意圖,具體到了某幾個產品。Query例如:」NokiaE71 E63″,」akg k450 px200″;(4)確定型:已經做了基本決定,重點考察某個物件。

之後的數個步驟後,主搜尋系統便根據上述以及更多複雜的條件列出了搜尋結果,這一切是由一千多台搜尋伺服器完成。點擊瀏覽搜尋出的寶貝。的寶貝'查看當時的快照。的事情。 其中又涉及數套系統的共同協作,其中較為重要的是Tair,淘寶自行研發的分散式KV儲存方案。

然後無論你是否真正進行了交易,你的這些訪問行為便忠實的被系統記錄下來,用於後續的業務邏輯和數據分析。這些記錄中存取日誌記錄便是最重要的記錄之一, 但是前邊我們得知,這些訪問是分佈在各個地區很多不同的伺服器上的,並且由於用戶眾多,這些日誌記錄都非常龐大,達到TB級別非常正常。那麼為了快速及時 傳輸同步這些日誌數據,淘寶研發了TimeTunnel,用於進行即時的數據傳輸,交給後端系統進行計算報表等操作。

你的瀏覽資料、交易資料以及其它很多很多的資料記錄都會被保留下來。

#

讓淘寶儲存的歷史資料輕鬆的便達到了十數甚至更多個PB(1PB=1024TB=1048576GB)。如此龐大的資料量經過淘寶系統1:120的極限壓縮儲存在淘寶的資料倉儲中。並且透過一個叫做雲梯的,由2000多台伺服器組成的超大規模資料系統不斷的進行分析與挖掘。


從這些數據中淘寶能夠知道小到你是誰,你喜歡什麼,你的孩子幾歲了,你是否在談戀愛,喜歡玩魔獸世界的人喜歡什麼樣的飲料等,大到各行各業的零售情況、各類商品的興衰消亡等等海量的信息。


說了這麼多,其實也只是敘述了淘寶上正在運作的成千上萬個系統中的寥寥幾個。即使是你僅僅造訪一次淘寶的首頁,所涉及到的技術和系統規模都是你完全無法想像的,是淘寶2000多名頂級的工程師們的心血結晶,其中甚至包括長江學者、國家科學技術最高獎得主等眾多大牛。同樣,百度、騰訊等的業務系統也絕不比淘寶簡單。 你需要知道的是,你每天使用的網路產品,看似簡單易用,背後卻凝聚著難以想像的智慧與勞動。

相關文章推薦:

  1. #php網站效能優化實戰:淘寶首頁載入速度優化實務

  2. 還有比這更賤的php影片教學嗎? php中文網《獨孤九賤》系列教學

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn