“目前我們正在規(guī)劃我們新一代的智能數(shù)據(jù)平臺(tái);這幾年以來,我們也一直在嘗試做一個(gè)足夠強(qiáng)大的數(shù)據(jù)平臺(tái)來高效支持內(nèi)外部的應(yīng)用;我們也在不斷調(diào)研全球最新的數(shù)據(jù)技術(shù)和產(chǎn)品。最近一年來,我也對(duì)到底要什么樣的數(shù)據(jù)平臺(tái)、到底需要什么樣的功能、我們要根據(jù)什么原則去設(shè)計(jì),有一些不太成熟的、碎片化的思考。上周五跟老閻、松柏、老何和學(xué)波一起溝通規(guī)劃時(shí),討論了很多問題,也使得我對(duì)這些問題的思考更加深入了一些。這里做一下簡(jiǎn)要總結(jié)。”
“在大數(shù)據(jù)行業(yè)干了這么些年,我相信大家都有一種在泥潭中掙扎的感覺。要搞清楚到底有哪些數(shù)據(jù)、數(shù)據(jù)的結(jié)構(gòu)、數(shù)據(jù)的來源、數(shù)據(jù)的意義、數(shù)據(jù)的上下文、數(shù)據(jù)的質(zhì)量、數(shù)據(jù)可能有哪些局限性等等,都是非常麻煩的事情。在大多數(shù)情況下我們會(huì)發(fā)現(xiàn)數(shù)據(jù)的元數(shù)據(jù)缺失,數(shù)據(jù)的說明文檔不存在或者文檔有用的內(nèi)容很少。為了某一個(gè)新任務(wù)要把數(shù)據(jù)搞清楚,我們可能需要咨詢很多不同的人,每個(gè)人對(duì)數(shù)據(jù)的說法都不完全一致,當(dāng)所有相關(guān)方都溝通了幾次后,我們才大致把數(shù)據(jù)的概貌搞清楚。而這僅僅是完成了第一步,后面的數(shù)據(jù)處理、數(shù)據(jù)探索、特征工程、分析建模、生產(chǎn)應(yīng)用還有無數(shù)的迷宮的需要探索。
自然,面對(duì)這些問題,我們會(huì)想能不能有一個(gè)平臺(tái)把數(shù)據(jù)以及數(shù)據(jù)利用的各個(gè)環(huán)節(jié)都有效管起來,讓我們可以很輕松的把數(shù)據(jù)的來龍去脈搞清楚,借助各種強(qiáng)大的功能非常方便的讓我們把數(shù)據(jù)處理、數(shù)據(jù)探索、特征工程、分析建模乃至生產(chǎn)應(yīng)用都輕松的解決。總之,我們希望這個(gè)平臺(tái)能把一切都管起來,把一切關(guān)于數(shù)據(jù)、項(xiàng)目和工程的信息都管起來。使用者只需要在這個(gè)平臺(tái)上就能獲得關(guān)于數(shù)據(jù)的一切信息,并能夠獲得各種運(yùn)用數(shù)據(jù)的能力。這可以說是數(shù)據(jù)平臺(tái)的終極理想。
但是最近半年來,我對(duì)這個(gè)終極理想產(chǎn)生了比較大的疑惑,感覺追求這一目標(biāo)可能是“理性的自負(fù)”。
復(fù)雜與失控的現(xiàn)實(shí)
復(fù)雜的大數(shù)據(jù):
“首先,大數(shù)據(jù)本身就是極其復(fù)雜的,不僅在于規(guī)模、維度、類型,也在于其各種變化和各種不完美。而且大數(shù)據(jù)還在日復(fù)一日的變得更大、更復(fù)雜、更快,要把所有數(shù)據(jù)以及所有數(shù)據(jù)的所有方面全部都搞清楚,恐怕是非常困難的,很可能已經(jīng)是人力不可及的事情。
可能必須得承認(rèn),我們對(duì)大數(shù)據(jù)的控制能力是有限的,大數(shù)據(jù)很大程度上對(duì)于人類來說就是失控的。很直接的一個(gè)例子就是“數(shù)據(jù)湖”,顯然“數(shù)據(jù)湖”失去了傳統(tǒng)數(shù)據(jù)庫和數(shù)據(jù)倉庫那種井井有條的規(guī)范美。“數(shù)據(jù)湖”基本上就是把所有可以收集到的數(shù)據(jù)堆放在一起,并沒有非常規(guī)范的管理。并不是人們不想管理,而是事實(shí)上是做不到的,只能向現(xiàn)實(shí)妥協(xié)。當(dāng)然,這種妥協(xié)很大程度上是可能是自發(fā)的而不是自覺的。
可能很多人也認(rèn)為“數(shù)據(jù)湖”只是一種過渡,我們還在等待更強(qiáng)大的數(shù)據(jù)管理和數(shù)據(jù)治理的技術(shù)、工具、平臺(tái)和方法論的出現(xiàn)。但是,人的智力和精力終歸是有限的,如果我們期望能為所有數(shù)據(jù)都建立非常良好的文檔和譜系來進(jìn)行管理,并且能夠得到及時(shí)的維護(hù)更新,需要投入的人力可能是無法承受的。而且如何保證這些管理的質(zhì)量?只做形式審查是比較容易的,但是無法正真保證管理文檔的內(nèi)容質(zhì)量,但是實(shí)質(zhì)審查實(shí)際上又是不可能做到的。因此,很可能我們根本沒有辦法對(duì)大數(shù)據(jù)建立起傳統(tǒng)意義中的管理體系。”
復(fù)雜的技術(shù):
“其次,技術(shù)上的問題也是非常復(fù)雜的。技術(shù)問題的復(fù)雜性主要來自于各種技術(shù)本身的不完備性,任何技術(shù)都只能解決某一類型的問題。但是一個(gè)通用的數(shù)據(jù)平臺(tái),至少需要考慮能解決大部分的常見需求,這就意味著必須要將不同的技術(shù)整合到一起。多種技術(shù)的整合是非常考驗(yàn)系統(tǒng)工程能力的,這是要過的第一關(guān)。
但更大困難在于技術(shù)的快速發(fā)展,新技術(shù)、新開源項(xiàng)目不斷涌現(xiàn),既有技術(shù)和項(xiàng)目有些持續(xù)發(fā)展、不斷更新,有的逐步衰退。這種情況下,如何能夠保證平臺(tái)本身在技術(shù)上能跟上時(shí)代是個(gè)非常困難的問題。一個(gè)系統(tǒng)的結(jié)構(gòu)一旦確定,就會(huì)形成路徑依賴,隨著時(shí)間的推移,會(huì)變得越來越難以變動(dòng),越來越難以將新技術(shù)整合進(jìn)來。
另外,即使技術(shù)本身不變化、功能不變化,但是處理的數(shù)據(jù)規(guī)模不同、質(zhì)量不同、具體的資源規(guī)模和配置都會(huì)有很大的不同。處理大數(shù)據(jù)難點(diǎn)在于如何用有限的資源和能力來處理規(guī)模巨大的問題。同樣的處理邏輯,但是數(shù)據(jù)規(guī)模的不同,有效的處理方法可能就有很不同。而這是預(yù)設(shè)功能難以全面考慮清楚的。
綜上,大數(shù)據(jù)平臺(tái)面對(duì)的技術(shù)問題也是開放性的,或者說也是失控的,我們執(zhí)著于技術(shù)和功能層面的大一統(tǒng)也很可能是“理性的自負(fù)”。
大數(shù)據(jù)平臺(tái)設(shè)計(jì)哲學(xué)的重構(gòu)
面對(duì)大數(shù)據(jù),在數(shù)據(jù)和技術(shù)都失控的情況下,考慮如何強(qiáng)加對(duì)數(shù)據(jù)的控制和提高駕馭數(shù)據(jù)的能力都很可能是徒勞的。我們需要重新思考大數(shù)據(jù)平臺(tái)的設(shè)計(jì)哲學(xué),而不是在傳統(tǒng)大型軟件設(shè)計(jì)的哲學(xué)下做加強(qiáng)和修補(bǔ)。對(duì)于此, TalkingData首席數(shù)據(jù)科學(xué)家 張夏天 有一些思考。
擁抱不完美:
“首先,我們必須承認(rèn)我們的無知和無能,放棄去構(gòu)建一個(gè)全知全能的平臺(tái)的理想。我們需要思考大數(shù)據(jù)平臺(tái)要管什么,更重要的是不管什么。我們需要在該放手的地方就放手,我們需要接受甚至是擁抱某種程度的失控。我們很可能就沒有辦法把所有數(shù)據(jù)都非常好的管起來,只需要通過平臺(tái),新手就很容易把數(shù)據(jù)情況搞清楚。我們很可能也無法提供完全統(tǒng)一設(shè)計(jì)風(fēng)格、交互邏輯的功能界面。我們必須容忍一定的混亂,從而擁抱無限的可能和變化。”
經(jīng)驗(yàn)與價(jià)值的沉淀:
“還是先從數(shù)據(jù)來看,了解數(shù)據(jù)最便捷的途徑就是找到最了解這個(gè)數(shù)據(jù)的人進(jìn)行直接溝通。最了解數(shù)據(jù)的人可能是數(shù)據(jù)的生產(chǎn)者,也可能是數(shù)據(jù)的處理者,甚至是消費(fèi)者。很多情況下完全搞清楚,可能需要與所有相關(guān)方都進(jìn)行溝通后才比較清楚。平臺(tái)的設(shè)計(jì)到底是要消除這種直接溝通,還是讓這種溝通更有效率呢?
因?yàn)槿嫖臋n化是不現(xiàn)實(shí)的,那么我們能夠考慮的是讓目前的方式效率更高。數(shù)據(jù)平臺(tái)能夠承擔(dān)的一個(gè)功能是更有效的把數(shù)據(jù)的需求方和了解數(shù)據(jù)的人連接起來。原來我想找一個(gè)了解某個(gè)數(shù)據(jù)的人,都可能需要問好幾個(gè)人,而要了解清楚一個(gè)數(shù)據(jù)又可能需要找到好幾個(gè)人,這就需要不斷在線下反復(fù)的溝通。如果平臺(tái)能夠告訴我哪些人對(duì)這些數(shù)據(jù)最了解,這就可以提升相當(dāng)多的效率。
當(dāng)一個(gè)人一位對(duì)某個(gè)數(shù)據(jù)最了解,而被人問了很多次問到很煩的時(shí)候,他可以把自己對(duì)這個(gè)數(shù)據(jù)的總結(jié)的文檔和FQA放到平臺(tái)上。對(duì)這個(gè)數(shù)據(jù)關(guān)心的人也可以寫評(píng)論談自己對(duì)數(shù)據(jù)的理解和遇到的坑。當(dāng)一個(gè)數(shù)據(jù)被使用的越多,那么平臺(tái)上就可以沉淀出越多關(guān)于這個(gè)數(shù)據(jù)的信息,包括最熟悉的人和各種對(duì)數(shù)據(jù)的描述和解讀,后來的使用者就越容易掌握這個(gè)數(shù)據(jù)。
我們可以想象,一個(gè)數(shù)據(jù)平臺(tái),經(jīng)過一段時(shí)間的沉淀,有些數(shù)據(jù)的相關(guān)文檔會(huì)變得十分豐富,而有些數(shù)據(jù)根本無人問津。當(dāng)我們不追求全面的控制后,最有價(jià)值的信息可能就自動(dòng)涌現(xiàn)了。當(dāng)然,當(dāng)我們要使用一些鮮有人問津的數(shù)據(jù)時(shí),就需要經(jīng)歷一個(gè)比較痛苦的過程。但是只要平臺(tái)能把這個(gè)過程積累到的經(jīng)驗(yàn)沉淀下來,就是有價(jià)值的。”
從標(biāo)準(zhǔn)化到社區(qū)化:
“利用大數(shù)據(jù)是需要探索精神的,大數(shù)據(jù)平臺(tái)不應(yīng)該是一條機(jī)械的流水線,把使用者變成一個(gè)個(gè)沒有聯(lián)系的隨時(shí)可以替換掉的零部件。因?yàn)槲覀儾豢赡茏龀烧嬲龢?gòu)建這樣有效率的流水線。同時(shí),我們幾乎無法用一套客觀的量化指標(biāo)來衡量對(duì)數(shù)據(jù)的利用效率,我們必須寄希望于人的主動(dòng)精神。大數(shù)據(jù)平臺(tái)的設(shè)計(jì)哲學(xué)應(yīng)該以人為中心,尊重人的價(jià)值,激勵(lì)人的探索和創(chuàng)新精神,讓對(duì)數(shù)據(jù)有激情的人能夠涌現(xiàn)出來,產(chǎn)生更大的聲音,同時(shí)鼓勵(lì)和便利人與人之間的溝通,從而提高總體的效率。總之,平臺(tái)設(shè)計(jì)思想應(yīng)該從標(biāo)準(zhǔn)化轉(zhuǎn)為社區(qū)化。”
彈性與開放:
“從技術(shù)上來看,我們需要盡可能的適應(yīng)各種不同的功能和性能需求以及未來可能出現(xiàn)的技術(shù)演進(jìn)。為了解決這個(gè)問題,我們需要的不是一個(gè)結(jié)構(gòu)復(fù)雜包羅萬象的技術(shù)架構(gòu),因?yàn)樵綇?fù)雜的系統(tǒng)就越脆弱,就越難以進(jìn)化。 我們也不能綁定核心計(jì)算引擎就是Spark或者某幾種特定技術(shù),否則這就不是一個(gè)能力全面的數(shù)據(jù)平臺(tái)。
很多為自有業(yè)務(wù)設(shè)計(jì)的數(shù)據(jù)平臺(tái)是可以考慮業(yè)務(wù)特性來進(jìn)行特化的。但是我們作為企業(yè)服務(wù)的提供商,需要考慮的是足夠的通用性和靈活性。我們?cè)诩夹g(shù)架構(gòu)的設(shè)計(jì)哲學(xué)上,不應(yīng)該執(zhí)著于提供多少強(qiáng)大的功能,而是應(yīng)該專注于能夠提供多少可能性和可擴(kuò)展性。我們永遠(yuǎn)無法知道明天客戶會(huì)有什么新需求,也無法知道會(huì)有什么新技術(shù)出現(xiàn)。
因此在技術(shù)架構(gòu)上,應(yīng)該以容器技術(shù)為基礎(chǔ),實(shí)現(xiàn)彈性的資源管理,和對(duì)技術(shù)和功能的開放支持能力。在容器技術(shù)的支持下,可以做到不同計(jì)算資源的即開即用即回收,可以支持資源的動(dòng)態(tài)智能調(diào)整。當(dāng)一個(gè)任務(wù)需要Spark時(shí)就創(chuàng)建Spark集群,需要TensorFlow就創(chuàng)建TensorFlow集群,任務(wù)完成就可以把資源及時(shí)回收,任務(wù)過程中根據(jù)資源使用情況和任務(wù)完成要求,動(dòng)態(tài)的增加或者減少資源。
這種架構(gòu)下,我們不是將各種技術(shù)能力整合封裝成各種固定功能提供給使用者將他們的工作傻瓜化,而是向使用者賦能為其開放各種技術(shù)能力以及資源能力去創(chuàng)造無限的可能性。這種架構(gòu)下很難提供統(tǒng)一的界面設(shè)計(jì)風(fēng)格、交互邏輯,很多工作也需要使用者開發(fā)完成。因?yàn)槲覀儫o法做到對(duì)所有的技術(shù)進(jìn)行統(tǒng)一風(fēng)格的封裝,而是把所有的技術(shù)直接暴露給了使用者,使用者必須自己使用這些技術(shù)來解決問題。當(dāng)然這并不是說我們不需要做產(chǎn)品設(shè)計(jì),只是產(chǎn)品設(shè)計(jì)的出發(fā)點(diǎn)不是創(chuàng)造一套獨(dú)立完美的體系,而是應(yīng)該著力于讓使用者更容易的將不同的技術(shù)方便的組織起來,同時(shí)減少在不同技術(shù)之間切換的麻煩。
同時(shí),技術(shù)架構(gòu)也需要考慮不同模塊之間如何組織的問題,這個(gè)問題遵循服務(wù)化的思路應(yīng)該是已經(jīng)形成共識(shí),這里就不再過多展開。只是個(gè)人覺得在推行服務(wù)化之前,我們需要把服務(wù)接口的標(biāo)準(zhǔn)、服務(wù)總線的技術(shù)定下來。有好的服務(wù)基礎(chǔ)架構(gòu),新增、替換、升級(jí)不同的模塊就變得相對(duì)容易。從需求角度確定的功能和模塊不可能是百分之百正確的,后續(xù)一定會(huì)面臨著重構(gòu)和調(diào)整的問題。只有做好面對(duì)一切變化的準(zhǔn)備,才能更好的面對(duì)各種不確定性。”
適應(yīng)而不是約束:
“最后,我想談?wù)勱P(guān)于方法論的問題。產(chǎn)品設(shè)計(jì)方法論先行是對(duì)的,但是我們要深入思考什么才是有效的方法論。關(guān)于數(shù)據(jù)挖掘的方法論已經(jīng)存在十幾年了(CRISP-DM),老實(shí)說我們?cè)谒伎嫉臄?shù)據(jù)科學(xué)的方法論并不會(huì)有本質(zhì)性的改變。但我對(duì)這些方法論的感覺就是“如何把大象放進(jìn)冰箱”,或者5步畫馬法。原則上都對(duì),但是對(duì)實(shí)際工作的指導(dǎo)意義非常有限,因?yàn)槟Ч矶荚诩?xì)節(jié)中。
其實(shí)面對(duì)大數(shù)據(jù),不僅我們對(duì)數(shù)據(jù)和技術(shù)是失控的,實(shí)際上我們?nèi)绾翁幚怼?yīng)用數(shù)據(jù)的過程在很大程度上也是失控的。整個(gè)過程就像在走迷宮,工作步驟分形似的不斷展開。任何大的指導(dǎo)原則對(duì)于具體工作的指導(dǎo)意義就變得極為有限。
正因?yàn)槿绱耍a(chǎn)品設(shè)計(jì)應(yīng)該考慮的是如何適應(yīng)這種Ad-hoc的工作狀態(tài),而不是用一套流程把使用者束縛起來。我們可以提供一些機(jī)制便于使用者來梳理手頭的工作,但是盡可能不要去強(qiáng)制使用者遵守某種約束性很強(qiáng)的標(biāo)準(zhǔn)或者規(guī)范。為什么像NoteBook這樣設(shè)計(jì)如此簡(jiǎn)單的工具能夠流行起來,很重要的一點(diǎn)就是給使用者足夠自由的工作界面來做任何想做的事情,而且即寫即得,便于隨時(shí)修改策略,同時(shí)文檔可以根據(jù)需要隨時(shí)插在代碼之中。正是這種無結(jié)構(gòu)的扁平性,使得用戶可以按照最合適的路徑去完成自己的工作,而不是在被設(shè)計(jì)好的過程中掙扎。”
總結(jié)
“寫了這么多,其實(shí)核心想說的就是我們必須警惕“理性的自負(fù)”。我們首先必須承認(rèn)理性的力量是有限的,我們不是無所不能的。面對(duì)著數(shù)據(jù)失控、技術(shù)失控和需求失控的問題,我們到底是要想盡一切辦法去控制,還是順應(yīng)、包容甚至是欣賞這些失控。這是在我們智能數(shù)據(jù)平臺(tái)研發(fā)道路的起點(diǎn)上需要思考的問題。”