“目前我們正在規劃我們新一代的智能資料平台;這幾年以來,我們也一直在嘗試做一個足夠強大的資料平台來高效支援内外部的應用;我們也在不斷調研全球最新的資料技術和産品。最近一年來,我也對到底要什麼樣的資料平台、到底需要什麼樣的功能、我們要根據什麼原則去設計,有一些不太成熟的、碎片化的思考。上周五跟老閻、松柏、老何和學波一起溝通規劃時,讨論了很多問題,也使得我對這些問題的思考更加深入了一些。這裡做一下簡要總結。”

“在大資料行業幹了這麼些年,我相信大家都有一種在泥潭中掙紮的感覺。要搞清楚到底有哪些資料、資料的結構、資料的來源、資料的意義、資料的上下文、資料的品質、資料可能有哪些局限性等等,都是非常麻煩的事情。在大多數情況下我們會發現資料的中繼資料缺失,資料的說明文檔不存在或者文檔有用的内容很少。為了某一個新任務要把資料搞清楚,我們可能需要咨詢很多不同的人,每個人對資料的說法都不完全一緻,當所有相關方都溝通了幾次後,我們才大緻把資料的概貌搞清楚。而這僅僅是完成了第一步,後面的資料處理、資料探索、特征工程、分析模組化、生産應用還有無數的迷宮的需要探索。
自然,面對這些問題,我們會想能不能有一個平台把資料以及資料利用的各個環節都有效管起來,讓我們可以很輕松的把資料的來龍去脈搞清楚,借助各種強大的功能非常友善的讓我們把資料處理、資料探索、特征工程、分析模組化乃至生産應用都輕松的解決。總之,我們希望這個平台能把一切都管起來,把一切關于資料、項目和工程的資訊都管起來。使用者隻需要在這個平台上就能獲得關于資料的一切資訊,并能夠獲得各種運用資料的能力。這可以說是資料平台的終極理想。
但是最近半年來,我對這個終極理想産生了比較大的疑惑,感覺追求這一目标可能是“理性的自負”。
複雜與失控的現實
複雜的大資料:
“首先,大資料本身就是極其複雜的,不僅在于規模、次元、類型,也在于其各種變化和各種不完美。而且大資料還在日複一日的變得更大、更複雜、更快,要把所有資料以及所有資料的所有方面全部都搞清楚,恐怕是非常困難的,很可能已經是人力不可及的事情。
可能必須得承認,我們對大資料的控制能力是有限的,大資料很大程度上對于人類來說就是失控的。很直接的一個例子就是“資料湖”,顯然“資料湖”失去了傳統資料庫和資料倉庫那種井井有條的規範美。“資料湖”基本上就是把所有可以收集到的資料堆放在一起,并沒有非正常範的管理。并不是人們不想管理,而是事實上是做不到的,隻能向現實妥協。當然,這種妥協很大程度上是可能是自發的而不是自覺的。
可能很多人也認為“資料湖”隻是一種過渡,我們還在等待更強大的資料管理和資料治理的技術、工具、平台和方法論的出現。但是,人的智力和精力終歸是有限的,如果我們期望能為所有資料都建立非常良好的文檔和譜系來進行管理,并且能夠得到及時的維護更新,需要投入的人力可能是無法承受的。而且如何保證這些管理的品質?隻做形式審查是比較容易的,但是無法正真保證管理文檔的内容品質,但是實質審查實際上又是不可能做到的。是以,很可能我們根本沒有辦法對大資料建立起傳統意義中的管理體系。”
複雜的技術:
“其次,技術上的問題也是非常複雜的。技術問題的複雜性主要來自于各種技術本身的不完備性,任何技術都隻能解決某一類型的問題。但是一個通用的資料平台,至少需要考慮能解決大部分的常見需求,這就意味着必須要将不同的技術整合到一起。多種技術的整合是非常考驗系統工程能力的,這是要過的第一關。
但更大困難在于技術的快速發展,新技術、新開源項目不斷湧現,既有技術和項目有些持續發展、不斷更新,有的逐漸衰退。這種情況下,如何能夠保證平台本身在技術上能跟上時代是個非常困難的問題。一個系統的結構一旦确定,就會形成路徑依賴,随着時間的推移,會變得越來越難以變動,越來越難以将新技術整合進來。
另外,即使技術本身不變化、功能不變化,但是處理的資料規模不同、品質不同、具體的資源規模和配置都會有很大的不同。處理大資料難點在于如何用有限的資源和能力來處理規模巨大的問題。同樣的處理邏輯,但是資料規模的不同,有效的處理方法可能就有很不同。而這是預設功能難以全面考慮清楚的。
綜上,大資料平台面對的技術問題也是開放性的,或者說也是失控的,我們執着于技術和功能層面的大一統也很可能是“理性的自負”。
大資料平台設計哲學的重構
面對大資料,在資料和技術都失控的情況下,考慮如何強加對資料的控制和提高駕馭資料的能力都很可能是徒勞的。我們需要重新思考大資料平台的設計哲學,而不是在傳統大型軟體設計的哲學下做加強和修補。對于此, TalkingData首席資料科學家 張夏天 有一些思考。
擁抱不完美:
“首先,我們必須承認我們的無知和無能,放棄去建構一個全知全能的平台的理想。我們需要思考大資料平台要管什麼,更重要的是不管什麼。我們需要在該放手的地方就放手,我們需要接受甚至是擁抱某種程度的失控。我們很可能就沒有辦法把所有資料都非常好的管起來,隻需要通過平台,新手就很容易把資料情況搞清楚。我們很可能也無法提供完全統一設計風格、互動邏輯的功能界面。我們必須容忍一定的混亂,進而擁抱無限的可能和變化。”
經驗與價值的沉澱:
“還是先從資料來看,了解資料最便捷的途徑就是找到最了解這個資料的人進行直接溝通。最了解資料的人可能是資料的生産者,也可能是資料的處理者,甚至是消費者。很多情況下完全搞清楚,可能需要與所有相關方都進行溝通後才比較清楚。平台的設計到底是要消除這種直接溝通,還是讓這種溝通更有效率呢?
因為全面文檔化是不現實的,那麼我們能夠考慮的是讓目前的方式效率更高。資料平台能夠承擔的一個功能是更有效的把資料的需求方和了解資料的人連接配接起來。原來我想找一個了解某個資料的人,都可能需要問好幾個人,而要了解清楚一個資料又可能需要找到好幾個人,這就需要不斷線上下反複的溝通。如果平台能夠告訴我哪些人對這些資料最了解,這就可以提升相當多的效率。
當一個人一位對某個資料最了解,而被人問了很多次問到很煩的時候,他可以把自己對這個資料的總結的文檔和FQA放到平台上。對這個資料關心的人也可以寫評論談自己對資料的了解和遇到的坑。當一個資料被使用的越多,那麼平台上就可以沉澱出越多關于這個資料的資訊,包括最熟悉的人和各種對資料的描述和解讀,後來的使用者就越容易掌握這個資料。
我們可以想象,一個資料平台,經過一段時間的沉澱,有些資料的相關文檔會變得十分豐富,而有些資料根本無人問津。當我們不追求全面的控制後,最有價值的資訊可能就自動湧現了。當然,當我們要使用一些鮮有人問津的資料時,就需要經曆一個比較痛苦的過程。但是隻要平台能把這個過程積累到的經驗沉澱下來,就是有價值的。”
從标準化到社群化:
“利用大資料是需要探索精神的,大資料平台不應該是一條機械的流水線,把使用者變成一個個沒有聯系的随時可以替換掉的零部件。因為我們不可能做成真正建構這樣有效率的流水線。同時,我們幾乎無法用一套客觀的量化名額來衡量對資料的利用效率,我們必須寄希望于人的主動精神。大資料平台的設計哲學應該以人為中心,尊重人的價值,激勵人的探索和創新精神,讓對資料有激情的人能夠湧現出來,産生更大的聲音,同時鼓勵和便利人與人之間的溝通,進而提高總體的效率。總之,平台設計思想應該從标準化轉為社群化。”
彈性與開放:
“從技術上來看,我們需要盡可能的适應各種不同的功能和性能需求以及未來可能出現的技術演進。為了解決這個問題,我們需要的不是一個結構複雜包羅萬象的技術架構,因為越複雜的系統就越脆弱,就越難以進化。 我們也不能綁定核心計算引擎就是Spark或者某幾種特定技術,否則這就不是一個能力全面的資料平台。
很多為自有業務設計的資料平台是可以考慮業務特性來進行特化的。但是我們作為企業服務的提供商,需要考慮的是足夠的通用性和靈活性。我們在技術架構的設計哲學上,不應該執着于提供多少強大的功能,而是應該專注于能夠提供多少可能性和可擴充性。我們永遠無法知道明天客戶會有什麼新需求,也無法知道會有什麼新技術出現。
是以在技術架構上,應該以容器技術為基礎,實作彈性的資源管理,和對技術和功能的開放支援能力。在容器技術的支援下,可以做到不同計算資源的即開即用即回收,可以支援資源的動态智能調整。當一個任務需要Spark時就建立Spark叢集,需要TensorFlow就建立TensorFlow叢集,任務完成就可以把資源及時回收,任務過程中根據資源使用情況和任務完成要求,動态的增加或者減少資源。
這種架構下,我們不是将各種技術能力整合封裝成各種固定功能提供給使用者将他們的工作傻瓜化,而是向使用者賦能為其開放各種技術能力以及資源能力去創造無限的可能性。這種架構下很難提供統一的界面設計風格、互動邏輯,很多工作也需要使用者開發完成。因為我們無法做到對所有的技術進行統一風格的封裝,而是把所有的技術直接暴露給了使用者,使用者必須自己使用這些技術來解決問題。當然這并不是說我們不需要做産品設計,隻是産品設計的出發點不是創造一套獨立完美的體系,而是應該着力于讓使用者更容易的将不同的技術友善的組織起來,同時減少在不同技術之間切換的麻煩。
同時,技術架構也需要考慮不同子產品之間如何組織的問題,這個問題遵循服務化的思路應該是已經形成共識,這裡就不再過多展開。隻是個人覺得在推行服務化之前,我們需要把服務接口的标準、服務總線的技術定下來。有好的服務基礎架構,新增、替換、更新不同的子產品就變得相對容易。從需求角度确定的功能和子產品不可能是百分之百正确的,後續一定會面臨着重構和調整的問題。隻有做好面對一切變化的準備,才能更好的面對各種不确定性。”
适應而不是限制:
“最後,我想談談關于方法論的問題。産品設計方法論先行是對的,但是我們要深入思考什麼才是有效的方法論。關于資料挖掘的方法論已經存在十幾年了(CRISP-DM),老實說我們在思考的資料科學的方法論并不會有本質性的改變。但我對這些方法論的感覺就是“如何把大象放進冰箱”,或者5步畫馬法。原則上都對,但是對實際工作的指導意義非常有限,因為魔鬼都在細節中。
其實面對大資料,不僅我們對資料和技術是失控的,實際上我們如何處理、應用資料的過程在很大程度上也是失控的。整個過程就像在走迷宮,工作步驟分形似的不斷展開。任何大的指導原則對于具體工作的指導意義就變得極為有限。
正因為如此,産品設計應該考慮的是如何适應這種Ad-hoc的工作狀态,而不是用一套流程把使用者束縛起來。我們可以提供一些機制便于使用者來梳理手頭的工作,但是盡可能不要去強制使用者遵守某種限制性很強的标準或者規範。為什麼像NoteBook這樣設計如此簡單的工具能夠流行起來,很重要的一點就是給使用者足夠自由的工作界面來做任何想做的事情,而且即寫即得,便于随時修改政策,同時文檔可以根據需要随時插在代碼之中。正是這種無結構的扁平性,使得使用者可以按照最合适的路徑去完成自己的工作,而不是在被設計好的過程中掙紮。”
總結
“寫了這麼多,其實核心想說的就是我們必須警惕“理性的自負”。我們首先必須承認理性的力量是有限的,我們不是無所不能的。面對着資料失控、技術失控和需求失控的問題,我們到底是要想盡一切辦法去控制,還是順應、包容甚至是欣賞這些失控。這是在我們智能資料平台研發道路的起點上需要思考的問題。”