小米數據生產平臺的產品設計方法與實踐
一、數據生命周期全流程介紹
首先,從產品經理的角度,給大家用淺顯易懂的方式介紹一下數據的生命周期全流程是什么。
1、數據全生命周期流程
數據從生產到應用全流程大致可以分為 5 個步驟,首先是數據的產生,接下來對產生的數據進行收集,再找個容器存儲起來,存儲后進行處理加工,最后把數據投入應用。大部分數據產品都對應這五個環節。而今天要介紹的小米數據生產平臺重點在前四個環節,我們將前面四個環節統稱為數據生產鏈路。
數據生產的過程,可以用水的產生到應用做一個類比。首先,水產生于雨水、以及江河湖海中自然產生的源源不斷的水資源(產生),因為我們需要利用水資源,所以人為修建堤壩、水渠、水庫來將這些水分流收集并且存儲起來(收集&存儲)。希望這些水可以為我所用,就需要一些處理流程,進行水凈化、過濾、消毒、去污等一系列操作(處理),最終不同處理方式的水可以分別用于飲用水、灌溉、工業生產生活等場景中(應用)。數據的流程和水的生命流程是類似的。
2、數據的產生
生活中的行為會產生各種各樣的數據,互聯網時代,線上數據較為常見,例如使用手機、電腦、手表等電子用品,人們在以上的終端進行各種操作,就會產生行為數據;另一類是和生活更密切相關的線下數據,例如逛商店、做運動、聽歌、拍照、錄視頻等線下實體行為,同樣會產生數據。
3、數據的收集
數據產生后,根據不同的終端或者維度,進行數據收集。數據的收集是將不同的業務系統、終端、源頭的數據實現互聯互通。
線上數據采集分為客戶端和服務端,客戶端與用戶聯系更緊密,常見的有 Web 端、網頁端、安卓和蘋果手機的操作系統等。
線下會通過物聯網工具去進行信息的采集,例如,攝像頭、傳感器或者 Wi-Fi。另外一種傳統途徑,例如在之前特殊時期,會通過線下問卷或者表格的方式去登記信息,也是一種數據收集過程。
第三類是較為特殊的數據收集過程,通過爬蟲采集外部數據,這類數據不是直接產生,而是在合法合規的前提下爬取已有的數據。另外,業務系統的跨源同步,也可以認為是數據收集的過程,把不同的數據類型匯集到一個更易于應用的大數據系統中。
4、數據的存儲
我們在日常生活中,選擇存儲容器的時候,會考慮很多因素,例如:被存儲物件的形狀、樣式、形態、規模和使用場景,常用的物品希望存得近一點,成本也需要考慮,要權衡花費多少性價比最高。
數據存儲容器的選擇也是類似的邏輯,數據的結構以及存儲的格式,數據大小和條數,在使用場景中,希望是查詢性能更高,還是可擴展性更好,還是并發度更高,在數據的存儲和計算過程中有多少損耗,還有技術上的考量等等,決定了我們用什么存儲系統來存數據最合適。
根據不同的數據結構、規模、使用場景,會選擇不同的存儲類型。大致可以分為五類:關系型數據庫、NoSQL 存儲、網絡及消息隊列、文件系統和大數據存儲。圖中高亮出來的是常見的存儲方式,小米用的是 Iceberg 和 Hologres。
5、數據的處理
存儲完成之后進入到數據加工環節,它是將原始的、堆砌的數據進行數據資產建設,加工后服務于數據應用場景,使其產生業務價值的過程。處理過程分為三個方向:數據ETL和分層建設、對關鍵內容進行清洗、用不同的數據處理方式進行計算
- ETL
ETL(Extraction-Transformation-Loading),中文名為數據抽取,轉換和加載的組合,利用 SQL 語句,所有關系型數據庫的公共語句,將數據抽取出來,經過格式轉換與清洗,再加載到目標庫中。形成數倉分層的表,對數據進行歸納整理,簡化數據,去重,提升數據使用效率。這是 ETL 的過程及產出價值。
- 清洗
可以聯想到生活中洗衣的過程,去污漬、去原本多余的內容、補好衣物、曬干疊好。數據清洗的核心有:將問題數據修補完整,剔除冗余數據、將數據統一整理,將原始低質量的數據轉變成高質量的數據。
- 離線和實時開發
此處對離線開發和實時開發做一個簡單介紹,還是類比水的概念。離線開發就如水用于發電或發熱,需要達到一定的量級才能實現能量轉換,具有更高的輸出效率,離線的過程需要量的積累,再來批量處理。而實時開發就如落雨后直接進行分流、去污處理,沒有中間蓄積的過程,數據的產生和加工、應用是同步進行的。所以,離線開發是批處理,而實時開發是流式處理。面對不同的業務場景和開發訴求,我們可以選擇不同的開發模式。
6、小米的數據生產平臺架構
小米平臺覆蓋了數據的產生、收集、存儲和處理四個環節,基于計算引擎和存儲引擎,在元數據、權限、調度以及集成引擎的基礎服務上。該平臺提供了四大核心能力:統一的數據采集與集成,對采集到的數據進行多引擎的存儲,對其進行離線或實時計算,數據輸出用于分析運維等應用。應用一方面是在平臺內部,一方面是提供給更上層的服務,例如 BI 工具、API 接口服務、系統平臺的打通等多場景支持。
二、技術驅動型產品的設計與協同經驗方法論
1、數據生產平臺是技術驅動型產品
以上提到了很多技術概念,包括流批一體、SDK、引擎、Iceberg 等,我們可以說整個數據生產平臺是一個技術驅動型產品。
技術驅動產品有兩大核心特征:
首先,產品是以技術為核心競爭力,強烈依賴底層技術架構和技術創新為主要方向,更注重系統性能和穩定性。
同時,用戶以技術人員為主,無論是寫 Java,SQL 還是 python 的程序員,他們都是比產品經理更懂底層技術邏輯的用戶。
- 技術型產品常問的幾個問題
如何在技術型產品中凸顯產品經理的作用?
產品經理是做橋梁的,我們需要把技術語言轉化成產品語言,把用戶語言轉化為產品方案。另外設計落地、頂層規劃、產品拆解、項目管理和后續的運營推廣等工作,同樣是產品經理的專業職責所在。做好這些我們擅長的事,就能發揮很多價值。
如何衡量技術型平臺的產出價值?
從需要解決的核心問題出發,不同階段有不同的定位,衡量標準也會動態變化。例如小米數據生產平臺,最初是因為小米內部有很多類似的數據開發平臺,而每個平臺只能解決小部分問題,開發者需要跨 N 個平臺才能完成一系列的開發工作,所以才會建立新的一站式數據開發平臺,來統一解決數據開發過程中的問題,那么平臺的核心考量指標就是舊平臺的下線率、已有業務的遷移率、新平臺被用戶使用起來的資源覆蓋率等等;在統一平臺之后,希望被更多的用戶使用,所以使用頻率以及用戶的滲透率變為核心考量指標。再繼續發展,我們成為一個成熟的產品,一樣會開始關心用戶留存率、訪問量、粘性、甚至滿意度等等,衡量產出價值的方式有很多。
工作方法上會不一樣嗎?是否更加需要產品做更終局的思考?
任何事情都沒有真正意義上的終局,局部最優解也是最優解,規劃的時候整體思考,但是落地的時候需要小步快跑,快速驗證,重要的是在不同階段不斷地更新業務認知。所有工作本質上和其他類型的產品經理是沒有區別的。
- 技術驅動型產品中,產品經理該怎么做?
總而言之,讓專業的人去做專業的事情,所有的事情都是由價值來牽引的。產品為用戶產生價值,是最終的落地點。擁抱變化,更新自己的認知和策略,才能讓我們走得更遠、更穩。
2、小米實踐案例分析
- 案例一:技術驅動架構升級
由技術驅動整個架構升級,產品做配合落地工作。一站式數據生產平臺,以前沒有數據湖的概念,是基于 Hadoop 體系,利用 Hive 或者 Spark 建設的傳統數倉。隨著數據量的擴展,性能和成本問題顯現,原有的模式無法適應新的數據使用場景,所以由技術牽頭,引入數據湖的概念,來解決傳統數倉的成本以及事務型問題,在數據湖的選型環節,技術同事做了很多調研與分析,選型確定為 Iceberg,基于 Iceberg 選型的基礎,產品團隊結合數據生產全流程的鏈路的能力環節,規劃出在其中哪些環節將 Iceberg 數據湖的形式落地,在流程上實現產品能力。
- 案例二:產品驅動體驗效率優化
案例二是由產品來驅動,技術來實現的案例。小米內部有上百個業務團隊,業務場景復雜,不同的數據開發與產出都有前后依賴關系,因為依賴關系建立過程極其繁瑣,從產品視角,希望在建立血緣關系的過程中,提升用戶效率。通過業界的產品調研,我們計劃將依賴關系做成拖拽式,將節點拉入畫布中,連線建立依賴關系,選中某個節點,可以快速聚焦關鍵節點的關鍵鏈路,除了手動配置,也可以解析 SQL 語句,判斷依賴關系,做智能和自動的依賴動作,用戶只需要二次確認,就能快速完成一系列復雜的依賴配置。這些都是由產品調研與交互體驗分析出發來決策功能形態,技術團隊在此基礎上完成具體實現的例子。
- 案例三:技術的升級使得產品能持續完善
案例三,Hive 引擎的查詢機制受限,查詢平均耗時有 888 秒,原有的查詢耗時過長。新的平臺,技術同事引入 Presto+Spark3.X 的升級,查詢效率大幅上升。在技術和架構的升級之上,產品能夠持續完善與擴張,例如多引擎多表的聯查以及根據 SQL 語句表的范圍,智能路由到最佳引擎上。在日志診斷上有風險提示等擴展功能,產品經理突破原有架構的限制,引入了大量交互式查詢的設計,使得整體用戶體驗有了較大的提升。
三、小米一站式數據生產平臺的產品建設思路
1、小米數據生產平臺的推進思路
小米數據生產平臺建設的起因是,小米內部存在很多煙囪式開發,有很多同類型的數據開發平臺,每個平臺功能有限,且平臺之間不連通,用戶會遇到權限、性能、統一數據管理等各種問題,因此需要一個統一的平臺,來收斂并打破煙囪。
推動統一需要在舊平臺基礎上有一定的能力擴展,并且有新的功能吸引原有的用戶群體。在用戶都引入一站式平臺之后,我們并不希望用戶在新的平臺上野蠻生長,所以建立了通用的規范化的流程,來提升數據開發的質量和效率。一站式是一個持續的過程,工具好用才是最終的發展方向。
小米集團對數據開發的核心目標匯聚在質量、安全、成本、效率這四個方向。
- 基礎服務的統一為“破煙囪”奠定基礎
上文有提到數據生成平臺的架構,對架構精細化拆解,來說明我們能做好一個統一數據平臺的建設。首先,技術側牽頭,梳理出一個穩定的技術架構,能支持多種存儲引擎和計算引擎的接入,通過統一的元數據、權限、調度以及集成服務的能力,才能形成功能的落地。
- 可擴展性高的產品形態
在大的技術架構之上,由產品同學提供核心輸出,無論未來接入多少種存儲、計算和跨源數據引擎,都希望產品的體驗是一致的,并且在開發和使用的過程中,不需要有太多額外的學習成本,這樣有利于提高開發效率,降低用戶的心智培養成本。此階段又對產品提出核心要求,由技術人員來實現,最終建設一個可擴展性高的產品形態。
- 特色化的生產開發流程
將規范化的流程落地,由技術來梳理。小米目前的模型,是否能參照業界的隔離機制,技術決策后,由產品來制定小米自己的數據生成開發流程。這個流程的關鍵點是以什么形式進行開發與生產的隔離,數據上和流程上的隔離。小米用工作量的概念,進行開發態和生產態的區分,補充流程環節的檢驗。產品針對業務的使用情況和痛點問題,來設計數據管理流程。
- 一站式的數據生產體驗
一站式數據生產體驗,由產品來主導。我們是一個工具平臺,需要始終以用戶使用起來更趁手,為業務助力為目標。作為一個開發工具,我們也計劃向 IDE 形式靠攏,在研發體系中引入 DataOps 的概念,更高階的功能,實現智能寫 SQL 的功能等等,有更多的產品突破。
- 在更大的維度上做全景擴展,提供更多完善的服務支持
整個的產品不應該是獨木成林的,數據生成平臺在數據鏈路上處于底層環節,核心是數據采集、存儲、計算、查詢與運維能力,數據生產后,如果能被數倉更好地建設起來,對數據進行分層梳理,才能為上層的應用提供服務。建設好以后的數據,通過統一的資產管理,對成本、質量、安全進行把控,并且在應用場景上支持標簽的構建,提升效率和可利用性,為最上層使用,可以做BI可視化報表,數據智能支撐,人群圈選、行為分析等應用場景的結合,融合專業的數據分析團隊,針對性地制定一套產-建-管-用的解決方案,為公司內部提供一套完整的服務,與更多的能力聯合,才能發揮更大的價值。
2、層次遞進的平臺建設思路
最后總結一下平臺建設思路,整體上是層次遞進的過程。
從復雜的 N 個產品中,找到唯一收斂的方向,這是一個從 N 到 1 的收斂過程,過程中需要詳盡的分析調研,抽絲剝繭,求同存異,來找到唯一突破口;
方向確認后,將平臺從 0 到 1 構建起來,MVP 逐步拆解,小步快跑去驗證是否可行;
驗證可行后,進入 1 到 10 的擴張階段,在規范化的基礎上,不斷擴大產品邊界,擴大能力范圍來促進所有業務和場景的深度使用,同時把歷史問題快速收斂;
收斂和歷史問題都解決完成后,就要回歸本心,一開始就是面向技術人員的工具平臺,核心解決的是工具的效率,對業務產品價值的支持,一邊克制一邊創新,尋找符合定位的更多可能性,使得產品發揮更大價值。
四、問答環節
Q1:小米數據生產平臺的監控機制是怎樣的?
A1:有專業的數據監控模塊去把控數據質量。基礎作業運行成功/失敗,數據內容是否符合預期,設定數據預期,不符合預期,產生告警。小米有重要保障的數據,在問題發生之前預警,有基線機制,在部分任務資源上有傾斜,任務能優先運行完成,且鏈路上游環節資源保障,在任務沒有運行完的時候提前預警,把風險暴露出來,盡快去解決。
Q2:Presto 和 Doris 在平臺上都有,它們是如何分工的?
A2:Presto 和 Doris,取決于引擎本身的特性。Presto 的查詢效率非常高,缺點是業務邏輯復雜或者遇到大寬表 Presto 無法做很好的支撐。Doris 更多應用于分析型的場景,BI 分析或者業務分析,查詢數據產品報表的場景,應用更廣泛。所以在數據即時查詢用的是 Presto 引擎,直接出結果;對于特殊的表,用 Doris 查詢,且用 Doris 做數據開發,同時推送到 BI 平臺用于報表展示。
Q3:數據湖和數據倉庫在平臺中分別起什么作用?
A3:數據湖可以實現流批一體,實時計算和離線計算可以交叉運行,一體化完成數據湖的建設;數據倉庫更多是用于離線開發,對于時效性要求不高的數據,例行化執行,進行基礎的倉庫建設。
Q4:平臺各模塊的技術選型,作為產品經理如何參與選型過程?
A4:從需求出發,作業鏈路的調度,判斷業務規模以及對并發度的要求,還有對實時和離線場景的要求,來提出具體訴求。另外,調度中的模型是否需要依賴關系來進行作業邏輯的編排,并由研發同事去調研,哪些調度方式更適合,小米用的是自研調度器,為了適應小米的數據特性而研發的。質量監控告警的核心偏產品層面設計,監控告警對作業本身的運行沒太大影響,相對來說是一個事后監控機制,其實和應用場景類似,數據產生之后,查數看是否符合質量監控預期,質量監控選型更多從產品角度出發,去設計功能,技術要求并不高,更多的是和已有的技術開發與生產環節融合,提高技術兼容性。