本文轉載自《程式設計師》。
優酷作為一家大型視訊網站,擁有海量播放流暢的視訊。我們秉承注重使用者體驗這一產品技術理念,將絕大部分儲存用在視訊資源上。通過建設專用的視訊CDN,建立了可自由擴充套件、效能優異的架構,在提供更好使用者體驗的同時優化了儲存資源。在除視訊資源外的其他方面,我們也累積了海量資料:僅運營資料,每天收集到的網站各類訪問日誌總量已經達到TB級,經分析及壓縮處理後留存下來的歷史運營資料已達數百TB,很快將會達到 PB級,5年後資料量將會達到幾十PB級。
如何更好地處理和分析這些海量資料,以挖掘出其中的價值?
挖掘資料中的價值
對企業來說,尤其是對於為使用者提供服務的行業,僅提供基礎服務已經越來越難應付日趨細化的商業模式。如何為使用者提供差異化的優質服務成為這類企業必須解決的問題。而資料好比燈塔,能為企業指引前進的方向。網際網路、電信、金融等行業都在加大資料的探索及應用力度,這為企業創造了可觀的經濟效益。
對優酷而言,通過使用者的每次播放流程,我們都對頁面瀏覽、評論收藏、視訊播放以及播放時的各種操作進行了記錄。經處理後的分析結果會反饋給不同的業務模組,對包括產品、內容運營、使用者的個性化推薦及廣告投放等方面的提升,都起到了關鍵作用。
網站頁面、客戶端的UI/UE的設計及效果,都需要資料進行支援。通過A/B測試系統,我們收集到使用者對不同UI下的操作反饋,進而評估UI的改變對使用者的影響。
內容方面,通過對使用者網路情況的統計:每次播放是否發生了緩衝,平均下載速度是多少等,進行實時的統計和計算,獲取每個地區每個運營商下使用者的載入表現,以此來決定CDN節點的分佈和分配策略,為不同地區、不同運營商的使用者提供清晰流暢的視訊服務。
在推薦方面,通過對大量視訊播放行為的分析,歸納不同時長、不同型別、不同內容的視訊之間的相互關聯,挖掘不同人群使用者的同質化觀看習慣,對每次使用者的觀看進行有針對性的後續推薦,並藉助後續資料的分析,迭代地改善現有服務,為使用者提供量身定製的推送服務。
資料對於優酷的廣告精準投放也起到了重要作用。優酷的廣告系統支援對不同地域、頻道、標籤及人群等條件的定向投放。在投放策略上,我們本著儘可能不影響使用者體驗的原則,對於廣告長度及投放頻次都進行了限制。雖然這給投放造成了較大難度,但通過對各種細粒度的定向條件組合歷史資料進行的分析,我們在廣告投放方面已經相當準確。在投放階段,我們實時分析使用者屬性、訪問情況及當前廣告投放量,對每次投放動態調整。
技術架構
下面以優酷的運營資料為例介紹我們的海量資料解決之道。我們的運營資料包括播放、使用者互動、搜尋、廣告等,目前總計達數百TB,它們儲存在數百臺伺服器上。我們主要使用的是內部專門開發的輕量級的分散式儲存及資料分析框架,應用於一百臺左右的伺服器叢集,目前仍在使用。另外我們搭建了一個1000個 Slot的Hadoop叢集,並還在繼續擴充套件。考慮到維護成本及擴充套件性,未來我們會將全部業務遷移到Hadoop平臺上,以降低維護成本。另外基於 Hadoop及其上層的HBase、Hive等資料儲存產品,我們會開發出一套資料處理框架,應用於整個資料處理系統。
如圖1所示,根據業務型別的不同,我們收集到日誌之後,按照不同時間策略先對資料進行清洗。不失真的原始日誌,按規定的格式直接以檔案的形式儲存在 Hadoop上,資料清洗轉換後的中間結果,會儲存在Hive資料倉儲上;而一些粗粒度的彙總資料,則寫到MySQL、HBase等資料庫中。
每天優酷的日常資料處理任務多達數百個,對時效性要求不同,任務的執行策略也不同。需要準實時查詢的,我們可以提供延遲10分鐘的資料;其他任務也根據優先順序及緊急程度安排排程,而執行中的資源的分配由系統動態調整。
NoSQL探索之路
層出不窮的NoSQL技術,無疑是現在極其熱門的領域,依託高可用性、高水平擴充套件性、高效存取及支援MapReduce等特性使其在應對Web2.0網站時比關係型資料庫更加得心應手。
目前優酷大量資料依然儲存在MySQL等平臺上,這是考慮到關係型資料庫大都經歷了長時間的實踐檢驗,比較成熟,遵循相同標準,能獲得較好的支援。而且,主流關係型資料庫也都積極嘗試從海量資料等方面改進產品。此外,NoSQL分Key-Value、document、column、圖等多種型別,特性各不相同,這種總稱遮蔽了彼此之間的差異;而且各NoSQL產品還在不斷變化,甚至API也有所更改,這在技術掌握上及維護上成本較高,畢竟找一個懂 MySQL及SQL的開發工程師比找一個MongoDB專家要容易得多。
儘管如此,仍阻擋不住我們對NoSQL產品進行嘗試的熱情:一方面對不同業務應用適合的產品,另一方面對同類產品也在做評估對比。目前優酷的線上評論業務已部分遷移到MongoDB,運營資料分析及挖掘處理我們在使用Hadoop/HBase;在Key-Value產品方面,我們也在尋找更優的 Memcache替代品,如Redis,相對於Memcache,除了對Value的儲存支援三種不同的資料結構外,同一個Key的Value進行部分更新也會更適合一些對Value頻繁修改的線上業務;同時我們在搜尋產品中應用了Tokyo Tyrant;對於Cassandra等產品我們也進行過研究。可以說,我們會一直持續關注NoSQL技術,未來可能會根據需要選擇合適的產品應用到實際業務中。
目前NoSQL技術依然處於發展階段,只有少數蘊涵優秀的技術,並最終倖免淘汰,與其他資料解決方案一起生存下來,未來也許會有新的NoSQL產品出現。開發人員,尤其是各大公司的技術團隊在使用NoSQL專案的同時,根據使用經驗,會對一些針對特定使用場景的特性及服務加以抽象並實現,形成類似於基於Hadoop平臺的Pig這類衍生專案。在這方面未來的發展潛力是巨大的,比如在BI領域,目前的NoSQL產品與現有BI產品幾乎沒有交集。將來一些NoSQL產品應該能夠通過現有主流BI產品直接訪問,或者提供自己的BI模組。類似的功能也許會形成新的標準,顛覆現有開發模式。
機遇大於挑戰
海量資料時代對企業的影響,並非直接來自資料,而在於社會的飛速進步及不斷湧現的商業模式。2007年,微軟CEO鮑爾默說,Google公司現在幾乎是每年翻一番。優酷從起步,到重新整理5年多來美國IPO最大漲幅紀錄,只用了短短4年時間。而隨著變革速度不斷加快,各企業掉隊落伍的可能性已明顯增大。從海量資料中挖掘潛在價值,分析行業趨勢,在短時間內更新業務模式,優化產品和服務,提升核心競爭力,將是企業需要持續解決的課題。
隨著資料量越來越大,平行計算得到了越來越普遍的應用,新技術的產生使得技術選擇多元化,學習成本有所提高;同時,在學習之後的應用階段,開發、測試及維護成本都大大降低,資料分析、挖掘及BI領域依舊會得到成型軟體的支援。因此,海量資料時代的技術人員,機遇反而大於挑戰:一方面需要從關注開發細節,轉而關注各種新技術的特性;另一方面應該具備更深的業務抽象能力。只有具備這樣的綜合能力,才能讓技術發揮更大的價值。
展望
目前,企業所掌握的資料,還遠沒有達到最細的粒度,隨著技術的發展和裝置的廉價化,未來企業能夠收集到的資料還將呈非線性增長。能夠為運營提供支援的新維度、新指標也會被繼續發掘出來。分析的難度隨著維度和指標的增多不斷加大,傳統的資料探勘及BI產品將越來越難滿足需求。
在應對海量資料的計算模型方面,目前MapReduce成為主流,大多數平臺和產品都在應用MapReduce。而未來,也許會有更好的或者針對特定領域更好的計算模型出現。目前Google在圖處理方面,已在使用Pregel模型;Yahoo!也在開發新一代的MapReduce模型,以期從可靠性、可用性、可擴充套件性、向後相容、延遲及叢集利用等方面,對現有模型進行改進。這類改進會進一步提高海量資料的計算效率。
平行計算及分散式系統未來的產品線應會不斷豐富。風靡一時的Hadoop並非完美,高吞吐量造成的高延遲、處理時的資源浪費等,也都會是使用者需要考慮的問題。會不會有替代品出現,讓我們拭目以待。
對於具體企業,不同企業可能選用不同的解決方案。一些中小企業,通過購買SaaS服務,將資料提供給第三方服務商處理。服務商通過對多家同行企業的資料分析,尋找共性,再反饋給企業為其創造更大價值,實現了平臺提供者和使用者的雙贏。另外一些企業會通過租用PaaS及IaaS服務的方式,將相對不敏感的資料放到公有云上處理,以節約裝置採購及維護成本。對於企業的敏感資料,會通過建立私有資料中心,搭建私有云來處理,而同時也會考慮用公有云平臺進行互補。最終結果,資料會向一些大的節點集中,而大的節點也更有能力從掌握的海量資料中挖掘有用資訊。這些資訊通用性強的部分會被共享出來,服務於社會。
對於優酷來說,仍處於飛速發展階段,已經在考慮未來自建資料中心,提高資料處理能力,從網站的運營中發掘出更多資訊,為使用者提供更好的視訊服務。
作者姚鍵,優酷CTO。2006年加入優酷,帶領技術團隊自建CDN網路,同時在產品設計、WEB開發、底層研發、廣告系統、無線業務、運營維護等方面全面發力。曾在ChinaRen、搜狐、新東方線上、51Credit等網際網路站任技術管理職位。