林仕鼎:產品迭代速度決定企業(yè)競爭力
原創(chuàng)2013年4月26日-27日,由51CTO傳媒集團旗下WOT(World Of Tech)品牌主辦的2013大數(shù)據(jù)全球技術峰會在北京富力萬麗酒店召開。本次峰會將圍繞大數(shù)據(jù)基礎架構與上層應用的生態(tài)系統(tǒng),解決大規(guī)模數(shù)據(jù)引發(fā)的問題,探索大數(shù)據(jù)基礎的解決方案,激發(fā)數(shù)據(jù)挖掘帶來的競爭力,讓數(shù)據(jù)發(fā)出聲音。51CTO作為本次峰會的主辦方,將全程視頻、圖文直播報道這場數(shù)據(jù)的盛宴,更多內容請點擊專題:2013大數(shù)據(jù)全球技術峰會。
26日上午,百度云首席架構師林仕鼎發(fā)表了主題為“大數(shù)據(jù)的系統(tǒng)架構支持”的演講。演講中,林仕鼎談到,“互聯(lián)網(wǎng)的服務,它其實是在處理數(shù)據(jù),而且它會接觸到海量的用戶,然后通過用戶又產生新的數(shù)據(jù),我們對這些用戶的數(shù)據(jù)進行分析,可以改進這個系統(tǒng),這也就帶來了互聯(lián)網(wǎng)服務的兩個典型的特點,一個就是超大規(guī)模,首先你要管理互聯(lián)網(wǎng)上的所有數(shù)據(jù),然后能夠支持海量用戶的請求?;ヂ?lián)網(wǎng)的數(shù)據(jù),大家知道,所有的網(wǎng)站也在發(fā)生變化,當用戶的興趣發(fā)生變化,我要使得這個系統(tǒng)能夠跟得上用戶信息的變化,我們需要把這個行為做快速調整,這個快速調整就是通過架構和數(shù)據(jù)分析來達到”。
百度云首席架構師林仕鼎
百度目前的數(shù)據(jù)總量100~1000PB,數(shù)據(jù)處理量10~100PB每天,網(wǎng)頁是千億~萬億級別,日志100TB~1PB每天,巨量的數(shù)據(jù)使快速迭代成為互聯(lián)網(wǎng)產品的主要創(chuàng)新手段。互聯(lián)網(wǎng)服務的特點就在于做成快速迭代,而迭代的本質是讓參與系統(tǒng)進化,迭代的速度就決定了服務的競爭力。但是這個迭代并不是沒有方向的,這個方向在哪?要通過數(shù)據(jù)分析來得到。支撐這一點的平臺和能力,就靠大數(shù)據(jù),迭代的速度決定了這個公司的競爭力。而互聯(lián)網(wǎng)產品的迭代包含想法→快速開發(fā)→原型→測試→系統(tǒng)→部署運維,進而形成產品。
如下為演講全文:
林仕鼎:非常榮幸有這樣一個機會跟大家介紹一下大數(shù)據(jù)相關的技術想法,剛才王總分享了很多的故事,在這個故事的背后,其實還是要靠我們技術來驅動的,所以我想介紹一下這方面的技術,特別是從一個互聯(lián)網(wǎng)公司,還有我們做搜索引擎的公司角度來看,這個數(shù)據(jù)是什么樣的。
我是07年到百度來,剛來就開始做搜索引擎,我之前在微軟做系統(tǒng)方面的研究,做了搜索引擎之后,我個人就有了非常大的震撼,這個世界真的變得不太一樣了,有幾點。第一個是說我看到了數(shù)據(jù)中心有非常多的機器。第二點,這么大規(guī)模的系統(tǒng)它用來做什么?它其實是用來做數(shù)據(jù)處理。對互聯(lián)網(wǎng)公司來說,在公司的技術特點發(fā)生變化的那一刻是后臺機器數(shù)量超過前臺技術的數(shù)量,絕大多數(shù)互聯(lián)網(wǎng)公司都在前面做響應請求的技術,但是對搜索引擎,我們從第一天起,就在處理和加工后臺的數(shù)據(jù),無論是搜索還是廣告,都是這樣的模式。
我們看到因為互聯(lián)網(wǎng)的服務,它其實是在處理數(shù)據(jù),而且它會接觸到海量的用戶,然后通過用戶又產生新的數(shù)據(jù),我們對這些用戶的數(shù)據(jù)進行分析,可以改進這個系統(tǒng),這也就帶來了互聯(lián)網(wǎng)服務的兩個典型的特點,一個就是超大規(guī)模,首先你要管理互聯(lián)網(wǎng)上的所有數(shù)據(jù),然后能夠支持海量用戶的請求。互聯(lián)網(wǎng)的數(shù)據(jù),大家知道,所有的網(wǎng)站也在發(fā)生變化,當用戶的興趣發(fā)生變化,我要使得這個系統(tǒng)能夠跟得上用戶信息的變化,我們需要把這個行為做快速調整,這個快速調整就是通過架構和數(shù)據(jù)分析來達到。
我們先看一下這個數(shù)據(jù)規(guī)模,大概現(xiàn)在的數(shù)據(jù)總量接近一千個PB左右,網(wǎng)頁的數(shù)量大概是幾千億的網(wǎng)頁,從大量的網(wǎng)頁里面我們拿出幾百億來建索引,大數(shù)據(jù)具有這樣的特點,就是它單位密度的數(shù)據(jù)價值是比較低的,因為這里面有垃圾站。對于大量的網(wǎng)頁,我們每年更新幾十億左右,每天會享受用戶的查詢也會在幾十億左右,我們查詢的也是幾百PB。正是因為這樣的一個規(guī)模,這樣的一個壓力,使得我們的技術產生了不一樣的變化,那我們怎么去支持這個超大規(guī)模,并且把它變成一個服務,使得用戶可以訪問呢?首先是靠快速迭代的方法,對于快速迭代,大家可以看到,我們把這兩個算法都放上去,給每一個算法都拿一個總的流量,只要一小部分的流量就可以驗證算法,通過用戶選擇的結果留下比較好的算法。而在線的這樣一個實驗是需要基于很多離線分析的數(shù)據(jù),我們需要把你用的算法需要的數(shù)據(jù)都處理好,我們需要把用戶沉淀下來,然后跟每一個部分的算法提供單獨的數(shù)據(jù),讓它去分析。
對于搜索引擎,我們有很大的網(wǎng)頁庫,可以增加幾千億的網(wǎng)頁,對網(wǎng)頁庫會不斷的進行更新,包括把垃圾去掉,給每一張網(wǎng)頁找到特征,包括它的權重等等。對這樣的一個網(wǎng)頁還是不能提供服務,需要生成一個倒排表,倒排表的數(shù)據(jù)可以提供給用戶的,從網(wǎng)頁到倒排表,它的量特別大。但是這個排序大家知道,你會拿到很多的結果,多的會有幾百萬、幾千萬套,這時候你的重點是在于怎么對這些數(shù)據(jù)進行排序。但是怎么排序是好的呢?這個有很多原因,我們做了一個實驗,這個實驗是把排序的策略放進來,讓用戶選擇哪一個比較好。當然,用戶的選擇可能并不是很直接的,還需要通過一個測試過程,在不同的特征間去找。你去做這個測試,是需要從網(wǎng)頁里面抽取出來,也就是說這是一個搜索引擎主體數(shù)據(jù)的一個過程,我們基于這個數(shù)據(jù)驅不斷迭代。
對于非搜索引擎的產品也有這么一個過程,大家知道,很多的產品實際上你的想法很好,但是你的想法是否被用戶買賬呢?這個不一定。從這個想法到原型到系統(tǒng)到最后的上線,其實需要很長的時間,假如說我們有方法我們在每一個階段都去驗證這樣的算法,使得我們在付出更大的代價之前就可以對算法做一個驗證的話,這樣會非常有效地提高我們的生產效率。在每個階段,我們都有一些對比,可以通過數(shù)據(jù)的分析,變成用戶的查詢日志,并進行快速開發(fā),而且需要有一個開發(fā)的框架支持,這個雖然還很不完善,但是你可以在上面討論,然后對這樣一個原型經過一些測試變成一個系統(tǒng)。現(xiàn)在有了云平臺的支持,我們可以很好的把原型部署上去,因為你不再需要考慮數(shù)據(jù)庫、你的機器、操作系統(tǒng)的問題,而且還有很多云測試,幫助你去測這樣一個系統(tǒng)。然后就是部署。
當然,因為這個產品出來以后,同樣有很多方式去改進你的創(chuàng)新,這時候就需要搜集和處理的過程幫你去做這個工作。這是一個典型的互聯(lián)網(wǎng)產品迭代,技術是否有競爭力,就在于迭代速度是否很快,在每一個階段中,是否能夠更快地到達下一個階段,是不是有辦法根據(jù)用戶的反饋去調整,這些都會帶來一系列的要求。所以說,對比互聯(lián)網(wǎng)用戶來說,有兩方面的抓手,一個是數(shù)據(jù),一個是架構技術。同樣的,我們可以看到,這樣一種系統(tǒng)演進方式的變化體現(xiàn)了IT生產力。最開始在打印機時代我們只有硬件,PC出現(xiàn)以后我們有了軟件,我們的軟件是以服務的方式為主,從我們提供服務那一天開始,這個服務就沒有停止過,但是它在不斷的生成,也就是說我們有大量的工程師和軟件一起構成的這些系統(tǒng)。
到了云的時代,我們的規(guī)模變得越來越大,這是我們軟件加上數(shù)據(jù)中心,我們叫做集成設施,包括大規(guī)模的存儲、大規(guī)模的數(shù)據(jù)倉庫等等,構成了整個業(yè)務的基礎性。然后,在這上面,我們把人類的智慧結合起來,既包括工程師的智慧,也包括用戶的智慧,我們對數(shù)據(jù)進行分析,然后去做改進。
總結起來,互聯(lián)網(wǎng)服務的特點就在于做成快速迭代,而迭代的本質是讓參與系統(tǒng)進化,迭代的速度就決定了服務的競爭力。但是這個迭代并不是沒有方向的,這個方向在哪?要通過數(shù)據(jù)分析來得到。支撐這一點的平臺和能力,就靠大數(shù)據(jù),迭代的速度決定了這個公司的競爭力。
云計算有一個完整的體系,最下面有數(shù)據(jù)中心,服務器,硬件基礎設施,還有包括架構、數(shù)據(jù)智能,因為云被賦予了太多的意義,這種數(shù)據(jù)中心計算有一個特點,對于大數(shù)據(jù)相關的技術除了在應用層面,還有加上數(shù)據(jù)智能、包括大規(guī)模的數(shù)據(jù)分析、實時的數(shù)據(jù)引擎這樣的軟件技術,這是一個相關的技術,因為我們談大數(shù)據(jù)就離不開系統(tǒng)的平臺。主要的技術領域有存儲、有計算,還有超大規(guī)模系統(tǒng),包括體系結構、虛擬化、數(shù)據(jù)中心。
除了這種結構之外,還要關注結構訪問模式是怎樣的,這個數(shù)據(jù)寫下來之后就不會改,還是要不斷地發(fā)生變化,你是否要支持掃描或者是區(qū)域查詢與操作,這些都是要做到的。
對于計算,有像數(shù)據(jù)密集型計算,你讀出來的數(shù)據(jù)基本都能處理掉。但是,除了數(shù)據(jù)密集型之外,還有其他的類型,包括計算密集型、通訊密集型。計算的模式都會落到你要做計算的迭代,而這個計算的迭代,每一輪都要把所有的系統(tǒng)訪問到。這些問題都不是靠這樣一個模式能解決掉的,隨著我們對數(shù)據(jù)及時性的要求越來越高,越來越多的需要考慮一下計算密集型和通訊密集型的模式。它其實是一個存儲和計算相結合的模式。不管是我們做存儲還是做計算,實際上有很多的設計、開發(fā)、運維問題。
對分布式存儲系統(tǒng),主要有這幾種內容,有Pipe、Table、File、K/V。對于不同結構的存儲,其實在我們以前,實際上就是給每一種類型結構都單獨開發(fā)一個系統(tǒng),隨著這些業(yè)務規(guī)模的擴展,這些系統(tǒng)逐漸變得很龐大,很多都在上萬臺,我們發(fā)現(xiàn)有大量的共性的地方,當規(guī)模大的時候,這種對象、文件、表格會產生大容量、高并發(fā)、低延遲的現(xiàn)象,所以我們就要統(tǒng)一存儲體系,這樣的模式最終落到介質上,就是一個個塊,這個塊可以存在Disk上,也可以存在Flash上。因為上面有不同的接口,所以我們也有不同的數(shù)據(jù)訪問層。除了存儲之外,其實我們還要幫助訪問與傳輸?shù)膯栴},一個數(shù)據(jù)存下來,如果訪問不了的話,也是一個問題,對于計算,我們把計算邏輯放在數(shù)據(jù)上面來計算,并不希望做到跨數(shù)據(jù)中心和對外的存在,但是如果說你這樣的服務提供出來給外圍使用的時候,就存在這樣的問題,所以我們在外圍也提供了支持。這是我們在分布式上做的工作。
來看一下分布式計算,大家比較清楚看到的是MapReduce,你還需要有Join、Select、Top的支持,很多時候你要處理的數(shù)據(jù)實際上只是里面一部分,你要做一些Top的操作,要把所有的數(shù)據(jù)讀出來,這個代價是比較大的。所以說,對于不同的操作,我們希望能夠給它統(tǒng)一成一個描述,這個描述就是以有效的方式去描述,定義出它們之間的關系。對于每一個關系之間有一個大數(shù)據(jù),我們要對這些數(shù)據(jù)之間進行切分,把大的任務分解成小任務之后,通過排隊的方法就可以把它放到機器上去執(zhí)行。也就是說這里面其實有好幾個層次,這個任務應該怎么去表示,分為幾個步驟,之間是什么樣的關系,有了這個關系,然后有大有小,這時候很難執(zhí)行,我們就需要把它統(tǒng)一成一定的計算量和數(shù)據(jù)訪問量,這是我們的執(zhí)行層。當然,如果說如果這個戰(zhàn)略方式比較難以被使用的話,對這個數(shù)據(jù)來說,我們還要有一個接口,把這個問題表達出來,翻譯成一個個的操作方式來執(zhí)行。也就是說我們做一個計算平臺的話,除了里面的數(shù)據(jù)模型之外,很重要的就是這個平臺的架構怎么設計,另外我們做的平臺一定會支撐很多個任務在上面并行執(zhí)行,這時候怎么提高機器的利用率,我們看到大多數(shù)的計算平臺的實現(xiàn)都沒有短期的架構,所有的東西都是在一塊的,你要改進的話,只要把它分解成不同的任務。所以說,我們需要對系統(tǒng)進行分層,比如說對一些流程要進行描述,讓用戶去寫這樣的問題,對模型和數(shù)據(jù)流怎么做優(yōu)化,怎么使多個運算合并起來,其實你可以把多個任務合在一塊。
這是大規(guī)模的數(shù)據(jù)處理,要靠實時存儲與計算,它同樣是一個完整的體系,現(xiàn)在大家聽到最多的是流計算,除了這個之外,我們要做圖查詢、KNN查詢等等,它們都有一個共性,就在于它要處理的數(shù)據(jù)要么是流式產生的,要么是復雜事件,因為數(shù)據(jù)庫的結構是簡單的,之所以簡單,是因為它以前的特點是你沒法做隨機。有了更高層的數(shù)據(jù)結構,可以讓你很輕易的生成一個幾億維的數(shù)據(jù),你只要很簡單的寫你的程序就行。我們可以用復雜事件處理引擎去支持我們的檢索,這些技術都是用來做大數(shù)據(jù)分析需要的基礎技術。在系統(tǒng)集成,我們關注的是一個統(tǒng)一的操作算成,比如說加減乘,通過這樣我們可以簡化流程。對于復雜事件處理,很多時候我們需要對一個序列的事件做這樣的操作,比如說這個事件的價格你要取平均值,比如說有三列,我關注第二列、第三列是什么,或者說我做一些描述,我們可以通過比較高層的描述,對這些數(shù)據(jù)進行直接處理,還更復雜的,就是有些pattern。
其實我們說大數(shù)據(jù)時代,還有一點就是我們對整個程序的寫法和思考的方式上面發(fā)生變化,可能以前我們寫的是面向對象,現(xiàn)在有了大數(shù)據(jù)之后,我們考慮問題已經放在數(shù)據(jù)上了,我們的定義就是說你需要對數(shù)據(jù)進行操作,你要關注到這個數(shù)據(jù)的屬性,那么就要有更高層的屬性,讓你可以直接對數(shù)據(jù)進行描述、對事件進行描述。這是一個流式計算模型,過去一段時間,這個數(shù)據(jù)是一個動態(tài)的概念,需要不斷地發(fā)生變化。最后一張我們可以套用這個模型,你需要建多大的倉庫,對這部分數(shù)據(jù)進行處理之后,它需要多長時間反饋回來,這是流數(shù)據(jù)處理需要注意的,你需要怎么考慮把這個數(shù)據(jù)和內存中的數(shù)據(jù)進行結合。
最終,我們的目標就是希望做到更大、更復雜、更快。有了這樣一些技術支持,我們實際上可以對數(shù)據(jù)進行更多的技術處理,比如說可以進行分布式存儲與計算以及流式處理,包括Machine Learning算法,向量引擎,使得每一個需求方可以以一個更智能的方式去表述,通過這樣的模式,我們把這些串起來,當你去做嘗試的時候,你需要有很多的數(shù)據(jù),我們希望能夠把人引進來,通過大規(guī)模人工輔助標注系統(tǒng)讓人參與進來,這時候我們就可以做這樣的評估推薦智能加工。這是我們在技術層面上對數(shù)據(jù)進行加工的一個系統(tǒng)。謝謝!
以上是51CTO.com記者從一線為您帶來的精彩報道。后續(xù)我們還有更加精彩的獨家報道,敬請關注。