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