數(shù)據(jù)工程成功的核心
2023-06-07 11:36:09 | 來源:Thoughtworks洞見 |
2023-06-07 11:36:09 | 來源:Thoughtworks洞見 |
作者|馬小強(qiáng),陳健
(資料圖片僅供參考)
什么是數(shù)據(jù)工程數(shù)據(jù)工程是軟件工程的一部分,但不是傳統(tǒng)軟件工程在數(shù)據(jù)領(lǐng)域的簡(jiǎn)單重現(xiàn)。數(shù)據(jù)工程是一套完整的體系,其包含了需求探索、架構(gòu)設(shè)計(jì)、平臺(tái)構(gòu)建、測(cè)試、維護(hù)演進(jìn)等一系列階段,涵蓋了項(xiàng)目管理、開發(fā)過程管理、工程工具與方法、構(gòu)建管理、質(zhì)量管理等,是一套為了應(yīng)對(duì)規(guī)?;a(chǎn)和使用數(shù)據(jù)、為業(yè)務(wù)提供數(shù)據(jù)支撐,最終產(chǎn)生價(jià)值的體系。
數(shù)據(jù)工程與軟件工程的差異從廣義來講,數(shù)據(jù)平臺(tái)也屬于計(jì)算機(jī)軟件的一種,只不過通常意義上我們所說的計(jì)算機(jī)軟件是指應(yīng)用程序、工具和庫等,其主要目的是為用戶提供功能和服務(wù),以滿足他們的個(gè)人或商業(yè)需求;而數(shù)據(jù)平臺(tái)則是指用于存儲(chǔ)、處理和管理數(shù)據(jù)的基礎(chǔ)設(shè)施和工具集合。數(shù)據(jù)平臺(tái)通常包括硬件、操作系統(tǒng)、數(shù)據(jù)庫、數(shù)據(jù)倉(cāng)庫、數(shù)據(jù)湖、ETL管道、數(shù)據(jù)可視化和數(shù)據(jù)分析工具等,它們的主要目的是為企業(yè)提供可靠、高效、安全和可擴(kuò)展的數(shù)據(jù)處理和管理能力,以支持業(yè)務(wù)決策和數(shù)據(jù)驅(qū)動(dòng)的戰(zhàn)略。這里我們將軟件工程從產(chǎn)出物類型的角度劃分為數(shù)據(jù)類和應(yīng)用類,可以從如下三個(gè)視角來對(duì)比數(shù)據(jù)類和應(yīng)用類:
使用方不同:數(shù)據(jù)類主要面向數(shù)據(jù)分析師、數(shù)據(jù)科學(xué)家等數(shù)據(jù)專業(yè)人士,提供數(shù)據(jù)處理、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)分析等方面的技術(shù)支持,幫助用戶從海量數(shù)據(jù)中提取有用信息,支持?jǐn)?shù)據(jù)驅(qū)動(dòng)的業(yè)務(wù)決策;而應(yīng)用類主要面向企業(yè)的業(yè)務(wù)人員以及終端用戶。系統(tǒng)關(guān)注點(diǎn)不同:數(shù)據(jù)類主要關(guān)注數(shù)據(jù)處理、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)分析、數(shù)據(jù)可視化等方面的技術(shù),重點(diǎn)在于數(shù)據(jù)的準(zhǔn)確性、完整性、一致性和安全性等方面;而應(yīng)用類主要關(guān)注軟件的功能、性能、可靠性和安全性等方面的技術(shù),重點(diǎn)在于軟件的功能實(shí)現(xiàn)、用戶體驗(yàn)和代碼質(zhì)量等方面。產(chǎn)出物不同:數(shù)據(jù)類的產(chǎn)出物主要是數(shù)據(jù)處理流程、數(shù)據(jù)倉(cāng)庫、數(shù)據(jù)分析報(bào)告、數(shù)據(jù)可視化報(bào)表等數(shù)據(jù)相關(guān)的產(chǎn)品和服務(wù);而應(yīng)用類的產(chǎn)出物主要是軟件系統(tǒng)、軟件模塊、軟件組件、軟件文檔等軟件相關(guān)的產(chǎn)品和服務(wù)。為什么要做好數(shù)據(jù)項(xiàng)目的工程化雖然數(shù)據(jù)平臺(tái)和應(yīng)用類軟件面向的用戶不同、考慮的首要需求不同、面對(duì)的數(shù)據(jù)量和工具也不盡相同,但是要進(jìn)行長(zhǎng)久的運(yùn)營(yíng),是一定要面對(duì)功能性、健壯性、易用性、拓展性、可維護(hù)性等關(guān)鍵指標(biāo),而要滿足這些指標(biāo),就要進(jìn)行科學(xué)的工程化。并且一般而言數(shù)據(jù)平臺(tái)的生命周期也遠(yuǎn)遠(yuǎn)大于傳統(tǒng)軟件,所以,數(shù)據(jù)工程落地的好壞,直接關(guān)系到數(shù)據(jù)能否快速產(chǎn)生價(jià)值。
數(shù)據(jù)項(xiàng)目工程化是加速數(shù)據(jù)到價(jià)值過程規(guī)?;淖罴褜?shí)踐,那么我們就需要了解在實(shí)現(xiàn)數(shù)據(jù)到價(jià)值過程中所經(jīng)歷的數(shù)據(jù)接入、集成、清洗、處理、分析、使用等環(huán)節(jié)所涉及到的痛點(diǎn)和挑戰(zhàn)都有哪些。
數(shù)據(jù)治理年年做,但又年年做不好。在面對(duì)多鏈路、多業(yè)態(tài)的企業(yè)數(shù)據(jù)平臺(tái)中,需要接入眾多部門/系統(tǒng)的業(yè)務(wù)數(shù)據(jù),然而數(shù)據(jù)平臺(tái)并不涉及業(yè)務(wù)流程,也就意味著數(shù)據(jù)的生產(chǎn)源頭、流程、業(yè)務(wù)邏輯等信息的梳理、主題域的劃分、數(shù)據(jù)血緣管理、元數(shù)據(jù)的管理等就顯得非常重要。否則,就會(huì)遇到需求方不知道當(dāng)前企業(yè)有哪些可用的數(shù)據(jù),數(shù)據(jù)質(zhì)量如何,數(shù)據(jù)由誰負(fù)責(zé),當(dāng)前數(shù)據(jù)做過什么樣的處理,數(shù)據(jù)如何使用等問題。如何降低數(shù)據(jù)平臺(tái)的維護(hù)成本。在數(shù)據(jù)平臺(tái)的維護(hù)過程中,業(yè)務(wù)/需求側(cè),會(huì)面臨源頭的業(yè)務(wù)梳理、業(yè)務(wù)變動(dòng)、需求變動(dòng)等;技術(shù)側(cè),需要維護(hù)分布式的數(shù)據(jù)平臺(tái)基座,面對(duì)不同異常情況的數(shù)據(jù)處理,數(shù)據(jù)處理邏輯和數(shù)據(jù)的版本維護(hù)等。怎么能高效地進(jìn)行數(shù)據(jù)處理。高效地?cái)?shù)據(jù)處理不僅僅是引入強(qiáng)大高效的計(jì)算引擎就可以解決的,需要考慮在常規(guī)和異常情況下如何能夠處理“僅需要”處理的數(shù)據(jù),從而避免造成時(shí)間和資源的浪費(fèi)。怎么設(shè)計(jì)才能滿足業(yè)務(wù)的變動(dòng)和快速變化的需求。數(shù)據(jù)平臺(tái)如何進(jìn)行分層,解耦,需要做哪些解耦,來響應(yīng)變化和多樣的需求場(chǎng)景。數(shù)據(jù)平臺(tái)如何賦能業(yè)務(wù)。數(shù)據(jù)平臺(tái)找不到高價(jià)值的業(yè)務(wù)場(chǎng)景,無法清晰度量業(yè)務(wù)價(jià)值。...面對(duì)上述的痛點(diǎn)和挑戰(zhàn),僅僅使用大數(shù)據(jù)的相關(guān)組件是無法解決的,只有進(jìn)行系統(tǒng)地設(shè)計(jì)規(guī)劃才能做好數(shù)據(jù)項(xiàng)目的工程化。我們總結(jié)了多年數(shù)據(jù)工程交付的經(jīng)驗(yàn),提煉了一些核心思想,這些往往是大家在進(jìn)行數(shù)據(jù)工程落地時(shí)容易忽略的點(diǎn)。
數(shù)據(jù)梳理數(shù)據(jù)梳理就是要全域分析數(shù)據(jù)粒度,規(guī)劃數(shù)據(jù)層次以及統(tǒng)一數(shù)據(jù)口徑。這么做的目的是整理清楚數(shù)據(jù)所代表的業(yè)務(wù)含義、去除跨部門和跨場(chǎng)景在理解上的不一致、尋找使用數(shù)據(jù)和計(jì)算的統(tǒng)一口徑、找到能夠維護(hù)數(shù)據(jù)的管理者,最終構(gòu)建在企業(yè)內(nèi)部能夠描述數(shù)據(jù)流轉(zhuǎn)過程、數(shù)據(jù)變化過程的全景。這么做的好處是讓數(shù)據(jù)使用者能夠?qū)?shù)據(jù)的變化有全面的認(rèn)識(shí),對(duì)于后續(xù)數(shù)據(jù)項(xiàng)目開展提供扎實(shí)的基礎(chǔ)。
數(shù)據(jù)的背后是信息、是業(yè)務(wù)知識(shí),因此我們想要理清楚有哪些數(shù)據(jù),就需要先對(duì)業(yè)務(wù)流程進(jìn)行梳理,根據(jù)項(xiàng)目類型的不同需要梳理的業(yè)務(wù)流程范圍也會(huì)有所不同,比如:圍繞整個(gè)公司視角的梳理、圍繞某個(gè)場(chǎng)景的梳理,但無論是哪種范圍,都需要把業(yè)務(wù)流程梳理出來。業(yè)務(wù)流程的梳理僅僅是第一步,業(yè)務(wù)流程梳理的目的是在于產(chǎn)出基于業(yè)務(wù)流程關(guān)鍵節(jié)點(diǎn)有哪些數(shù)據(jù),通常來講我們需要精確到字段級(jí)。對(duì)于數(shù)據(jù)工程而言數(shù)據(jù)梳理可以從以下視角來審視。
數(shù)據(jù)分級(jí)分類。面對(duì)企業(yè)多業(yè)態(tài)、多鏈路復(fù)雜流程的場(chǎng)景下,會(huì)涉及不同角色不同部門的不同級(jí)別和類別的數(shù)據(jù),因此在前期我們需要對(duì)齊數(shù)據(jù)的分級(jí)分類。數(shù)據(jù)梳理的核心其實(shí)是領(lǐng)域模型、實(shí)體模型和業(yè)務(wù)流程的梳理,需要從組織架構(gòu)、業(yè)務(wù)流程等進(jìn)行主題域的分組劃分以及確定所涉及的實(shí)體和實(shí)體屬性的信息。分級(jí)分類一方面可以更好的理解業(yè)務(wù)和數(shù)據(jù),從而更清晰的得到數(shù)據(jù)全景圖,為后續(xù)的數(shù)據(jù)處理和使用做準(zhǔn)備,另一方面可以了解其數(shù)據(jù)分布,在運(yùn)營(yíng)階段更好的進(jìn)行數(shù)據(jù)管理。此外,基于數(shù)據(jù)的分級(jí)分類,可以更清晰的劃分?jǐn)?shù)據(jù)邊界,幫助業(yè)務(wù)更好的梳理和優(yōu)化業(yè)務(wù)流程。同時(shí),也需要基于安全的視角對(duì)數(shù)據(jù)進(jìn)行分級(jí)分類,從公開數(shù)據(jù)、內(nèi)部數(shù)據(jù)、機(jī)密數(shù)據(jù)等級(jí)別進(jìn)行劃分,從而決定后續(xù)的數(shù)據(jù)共享策略。統(tǒng)一口徑。在上述梳理完數(shù)據(jù)的分級(jí)分類后,應(yīng)該已經(jīng)對(duì)整個(gè)業(yè)務(wù)流程所涉及的實(shí)體有了清晰的認(rèn)知,那么口徑的統(tǒng)一是在統(tǒng)一什么?這里提到的主要是實(shí)體的口徑統(tǒng)一和實(shí)體內(nèi)指標(biāo)的口徑統(tǒng)一。對(duì)于實(shí)體的口徑,在業(yè)務(wù)系統(tǒng)的設(shè)計(jì)開發(fā)階段,通常都是圍繞業(yè)務(wù)流程進(jìn)行,也就意味著并不會(huì)過多考慮同一個(gè)實(shí)體跨業(yè)務(wù)系統(tǒng)的定義,導(dǎo)致同一實(shí)體在不同業(yè)務(wù)系統(tǒng)的業(yè)務(wù)定義、業(yè)務(wù)邊界等不相同,但是口語間的業(yè)務(wù)傳遞描述又是相同的實(shí)體,即相同現(xiàn)實(shí)世界中的實(shí)體在數(shù)據(jù)視角下的業(yè)務(wù)定義和邊界可能不同。實(shí)體的邊界劃分通常是基于業(yè)務(wù)決定。對(duì)于指標(biāo)的口徑,通常在使用數(shù)據(jù)進(jìn)行分析或數(shù)據(jù)挖掘時(shí),指標(biāo)信息的業(yè)務(wù)邏輯定義就尤為關(guān)鍵,在業(yè)務(wù)復(fù)雜的場(chǎng)景下,指標(biāo)信息的定義從大分組上定義相似,但是又有細(xì)微的邏輯差別。約定數(shù)據(jù)Owner。在業(yè)務(wù)流程中,不同的部門和系統(tǒng)會(huì)使用已有的數(shù)據(jù),并可能會(huì)對(duì)已有的數(shù)據(jù)在某個(gè)業(yè)務(wù)流程的節(jié)點(diǎn)上進(jìn)行修改,同時(shí)也可能基于現(xiàn)有數(shù)據(jù)產(chǎn)生新的數(shù)據(jù)。那么面對(duì)多版本、多邊界的實(shí)體數(shù)據(jù),如何保證使用數(shù)據(jù)的部門和系統(tǒng)所使用的數(shù)據(jù)就是所期望的數(shù)據(jù)呢?因此我們需要進(jìn)行數(shù)據(jù)的owner梳理。這里與其說是梳理數(shù)據(jù)owner,倒不如說是梳理業(yè)務(wù)流程中不同實(shí)體的生命周期變化的關(guān)鍵負(fù)責(zé)人。當(dāng)然這里所講的數(shù)據(jù)并非一個(gè)實(shí)體,而是會(huì)細(xì)粒度到實(shí)體的某個(gè)屬性,甚至是某個(gè)屬性的某個(gè)值,如訂單狀態(tài)的值。同樣,到底是粗粒度的實(shí)體還是細(xì)粒度的屬性值定義邊界,依然是由業(yè)務(wù)決定,即是基于業(yè)務(wù)流程中的核心節(jié)點(diǎn)來決定。通常來講數(shù)據(jù)owner與數(shù)據(jù)在映射管理關(guān)系是一個(gè)一對(duì)多的過程,即一個(gè)數(shù)據(jù)owner會(huì)負(fù)責(zé)至少一個(gè)數(shù)據(jù)或者是一類數(shù)據(jù)。企業(yè)根據(jù)數(shù)據(jù)owner所處的部門、負(fù)責(zé)的業(yè)務(wù)域、所對(duì)接的業(yè)務(wù)部門、所處的權(quán)限級(jí)別,可以將分級(jí)分類后的數(shù)據(jù)域數(shù)據(jù)owner進(jìn)行映射,形成企業(yè)自己的數(shù)據(jù)管理體系。數(shù)據(jù)owner需要定義數(shù)據(jù)的業(yè)務(wù)含義、業(yè)務(wù)邊界、數(shù)據(jù)標(biāo)準(zhǔn)和數(shù)據(jù)的使用權(quán)限等。構(gòu)建數(shù)據(jù)標(biāo)準(zhǔn)管理流程。我們知道了要找誰來修改數(shù)據(jù),可是如果數(shù)據(jù)被修改錯(cuò)誤、或者是修改的不符合業(yè)務(wù)場(chǎng)景和標(biāo)準(zhǔn),可能會(huì)引發(fā)一系列新的問題。我們約定數(shù)據(jù)管理者的初衷是能夠讓數(shù)據(jù)得到正確的修改,而不是引發(fā)新的問題。因此我們需要的是讓數(shù)據(jù)管理者根據(jù)技術(shù)對(duì)數(shù)據(jù)的要求、業(yè)務(wù)對(duì)數(shù)據(jù)的要求對(duì)數(shù)據(jù)進(jìn)行修改,所以構(gòu)建的數(shù)據(jù)標(biāo)準(zhǔn)管理體系要包括數(shù)據(jù)標(biāo)準(zhǔn)、數(shù)據(jù)安全權(quán)重。到目前為止,我們有了管理數(shù)據(jù)的人、管理數(shù)據(jù)的方式,我們就擁有了可用的數(shù)據(jù),無論是將數(shù)據(jù)提供給其他系統(tǒng)還是為即將開展的項(xiàng)目提供數(shù)據(jù)基礎(chǔ)就已經(jīng)具備一定的基礎(chǔ)了。從數(shù)據(jù)使用的視角來看這些數(shù)據(jù)可以通過集中管理的方式來提供出去。低運(yùn)維數(shù)據(jù)類平臺(tái)最核心的功能就是計(jì)算數(shù)據(jù),通常來講,數(shù)據(jù)平臺(tái)需要維護(hù)的數(shù)據(jù)流水線能達(dá)到上百條,要管理、維護(hù)幾百條數(shù)據(jù)流水線的運(yùn)維成本往往是最容易被忽略的。自動(dòng)化是降低數(shù)據(jù)平臺(tái)運(yùn)維成本和提高效率的關(guān)鍵。通過自動(dòng)化工具和流程,可以減少手動(dòng)干預(yù)和人工錯(cuò)誤。例如,自動(dòng)化部署、自動(dòng)化監(jiān)控和自動(dòng)化故障恢復(fù)等。自動(dòng)化部署和自動(dòng)化監(jiān)控一般都有開源的實(shí)現(xiàn)數(shù)據(jù)組件可以實(shí)現(xiàn),相對(duì)而言比較易于實(shí)現(xiàn),但是數(shù)據(jù)流水線的自動(dòng)化故障恢復(fù)則困難重重。常常會(huì)遇到數(shù)據(jù)計(jì)算到一半需要刷數(shù)據(jù)重新跑、難以debug等各種問題。我們將低運(yùn)維中最重要的三個(gè)點(diǎn)攤開,幫助減少手動(dòng)干預(yù)和人為錯(cuò)誤,提高可靠性和可用性,并降低數(shù)據(jù)平臺(tái)的運(yùn)維成本。
1.冪等性冪等性是數(shù)據(jù)流水線自動(dòng)化故障恢復(fù)的核心,冪等性的定義是相同的參數(shù)重復(fù)執(zhí)行得到相同的結(jié)果。ETL 的冪等性就要求 ETL 可以被重復(fù)多次執(zhí)行,且不會(huì)影響最終的計(jì)算結(jié)果。在面對(duì)復(fù)雜的數(shù)據(jù)流時(shí),數(shù)據(jù)處理過程中的異常或日常 運(yùn)維需求都意味著 ETL 可能會(huì)隨時(shí)停止、隨時(shí)啟動(dòng),那么如何在 ETL 重復(fù)多次執(zhí)行的情況下確保數(shù)據(jù)的準(zhǔn)確性和一致性就極為關(guān)鍵。滿足 ETL 冪等性的核心邏輯在于處理數(shù)據(jù)階段待處理批次的數(shù)據(jù)隊(duì)列清晰有序且可控,同時(shí)對(duì)于所涉及數(shù)據(jù)要滿足業(yè)務(wù)依賴。從運(yùn)維視角看,運(yùn)維人員可以在不同需求場(chǎng)景下對(duì) ETL 進(jìn)行手動(dòng)觸發(fā),而不用擔(dān)心是否會(huì)影響數(shù)據(jù)的準(zhǔn)確性,從而可以在保證數(shù)據(jù)質(zhì)量的前提下降低運(yùn)維成本。從設(shè)計(jì)視角來看,則是要將調(diào)度依賴和數(shù)據(jù)依賴進(jìn)行解耦,這樣就能確保調(diào)度層面的異常不會(huì)影響到數(shù)據(jù)本身。從混沌工程的原則看,能確保在滿足數(shù)據(jù)質(zhì)量的前提下,降低計(jì)算資源浪費(fèi)。
基于冪等性的大原則下,實(shí)現(xiàn)任務(wù)和調(diào)度的解耦,層與層之間的解耦,異常分級(jí)分類的解耦,都能實(shí)現(xiàn)低運(yùn)維,同時(shí)可以保證任務(wù)的高效運(yùn)行。這里的高效運(yùn)行不是靠強(qiáng)大的計(jì)算引擎來提高任務(wù)的執(zhí)行效率,更多指的是無需浪費(fèi)額外的計(jì)算資源,實(shí)現(xiàn)任務(wù)處理的資源最小化原則。
2.日志分級(jí)分類數(shù)據(jù)處理會(huì)涉及到任務(wù)調(diào)度服務(wù)、資源調(diào)度管理、計(jì)算、存儲(chǔ)等多種技術(shù)組件,而在數(shù)據(jù)處理階段,每一個(gè)組件的異常都會(huì)導(dǎo)致數(shù)據(jù)處理的失敗,那么在定位問題時(shí)就需要去各個(gè)組件中查看問題的根源,這就導(dǎo)致了運(yùn)維成本大大增加。因此需要將日志進(jìn)行分類解耦,資源層面、調(diào)度層面、 計(jì)算層面、數(shù)據(jù)層面等不同數(shù)據(jù)問題進(jìn)行分類,可以幫助我們更便捷地開展運(yùn)維工作。同時(shí),對(duì)數(shù)據(jù)的錯(cuò)誤也進(jìn)行了分級(jí),在數(shù)據(jù)處理階段,對(duì)于異常數(shù)據(jù)不能進(jìn)行一刀切的方式處理,而應(yīng)當(dāng)根據(jù)業(yè)務(wù)來決定異常數(shù)據(jù)的錯(cuò)誤級(jí)別,哪些數(shù)據(jù)可以流入數(shù)據(jù)平臺(tái),哪些需要被清理掉,在數(shù)據(jù)處理階段需要明確定義各類數(shù)據(jù)錯(cuò) 誤的處理規(guī)范。
在運(yùn)維場(chǎng)景下,要求運(yùn)維人員了解所維護(hù)的數(shù)據(jù)流水線中的各種業(yè)務(wù)上下文和實(shí)現(xiàn)細(xì)節(jié)是不現(xiàn)實(shí)的。那么如何做到面對(duì)復(fù)雜數(shù)據(jù)流、復(fù)雜組件和復(fù)雜任務(wù)的場(chǎng)景中,快速識(shí)別和定位異常問題呢?因此結(jié)合上述對(duì)于日志的分級(jí)以及數(shù)據(jù)層面異常分類,可以將復(fù)雜的運(yùn)維場(chǎng)景進(jìn)行切分,同時(shí)結(jié)合統(tǒng)一的門戶或工作臺(tái)進(jìn)行日志查詢,更好的實(shí)現(xiàn)低運(yùn)維。
3.完善的數(shù)據(jù)監(jiān)控機(jī)制在數(shù)據(jù)平臺(tái)的數(shù)據(jù)使用階段,我們要盡可能的避免數(shù)據(jù)異常問題在數(shù)據(jù)使用階段被暴露發(fā)現(xiàn),這樣不僅會(huì)導(dǎo)致平臺(tái)的數(shù)據(jù)信譽(yù)度下降,異常數(shù)據(jù)流入下游系統(tǒng)或?qū)σ恍┓治鰶Q策造成影響,都會(huì)嚴(yán)重影響到業(yè)務(wù)。因此我們期望數(shù)據(jù)從開始接入到使用階段,應(yīng)當(dāng)有完善的數(shù)據(jù)監(jiān)控機(jī)制。在數(shù)據(jù)接入階段,我們需要有識(shí)別上游變更的能力,即主動(dòng)識(shí)別上游的系統(tǒng)變更、通道變更、數(shù)據(jù)結(jié)構(gòu)變更等。在數(shù)據(jù)處理階段,基于業(yè)務(wù)定義的錯(cuò)誤數(shù)據(jù)的級(jí)別分類,配置不同的預(yù)警,確保需要業(yè)務(wù)配合的異常數(shù)據(jù)調(diào)整及時(shí)預(yù)警并調(diào)整數(shù)據(jù)。在數(shù)據(jù)使用階段,通過貼合業(yè)務(wù)的數(shù)據(jù)測(cè)試自動(dòng)化流程來識(shí)別異常數(shù)據(jù)。
完善的數(shù)據(jù)監(jiān)控機(jī)制目的是為了將異常問題更早的暴露出來,同時(shí)可以推動(dòng)業(yè)務(wù)系統(tǒng)或流程的完善。
數(shù)據(jù)測(cè)試測(cè)試,是交付前必不可少的一道環(huán)節(jié),是為了確保交付產(chǎn)物的正確性、完整性和安全性等而進(jìn)行的一系列操作的過程,其最終目標(biāo)是為了保證數(shù)據(jù)流水線的品質(zhì),對(duì)于保障軟件的穩(wěn)定性和可靠性具有重要意義。
測(cè)試金字塔理論是傳統(tǒng)軟件工程指導(dǎo)測(cè)試工作的核心理論,在數(shù)據(jù)工程領(lǐng)域,測(cè)試金字塔理論也同樣適用,只不過需要進(jìn)行一些改造。
我們將測(cè)試金字塔重新定義為:
單元測(cè)試為基礎(chǔ)確保最小邏輯的準(zhǔn)確。其涵蓋兩方面:一、數(shù)據(jù)工程的基礎(chǔ)是 ETL,大部分?jǐn)?shù)據(jù)工程均會(huì)有 一些工具來自動(dòng)生成 ETL,而 ETL 自動(dòng)生成代碼,就必然少不了單元測(cè)試。二、有了 ETL 之后,ETL 內(nèi)部 仍然是由多個(gè)功能活方法組合而成,針對(duì) ETL 內(nèi)部方法的單元測(cè)試仍然不可或缺。由于單元測(cè)試相對(duì)獨(dú)立, 編碼成本較低,可以以小的代價(jià)運(yùn)行。并且 ETL 為數(shù)據(jù)工程事實(shí)上的基本單位,對(duì)其進(jìn)行的單元測(cè)試可以 覆蓋大部分細(xì)粒度的邏輯。分層測(cè)試確保單個(gè)模型的數(shù)據(jù)質(zhì)量。在數(shù)據(jù)工程當(dāng)中,為了快速響應(yīng)變化、提高重復(fù)利用率以及減少性能瓶 頸,大部分的數(shù)據(jù)架構(gòu)是縱向分層的架構(gòu),而不同層次有不同的數(shù)據(jù)處理邏輯,那么就需要先對(duì)每一層先進(jìn) 行獨(dú)立測(cè)試驗(yàn)證,再重點(diǎn)測(cè)試層與層之間的集成與功能。測(cè)試關(guān)注:元數(shù)據(jù)驗(yàn)證、數(shù)據(jù)值、處理邏輯與處理 性能等。在保證每層數(shù)據(jù)、邏輯正確的情況下,才能為更高層次的功能與數(shù)據(jù)質(zhì)量提供保證。數(shù)據(jù)端到端測(cè)試確保交付需求的質(zhì)量。端到端測(cè)試是從數(shù)據(jù)源到最終結(jié)果的驗(yàn)證過程。覆蓋了數(shù)據(jù)全鏈路層 與層之間的耦合邏輯。一般而言,從數(shù)據(jù)源頭到最終數(shù)據(jù)應(yīng)用鏈路很長(zhǎng),計(jì)算資源消耗也比較高,進(jìn)行端到 端測(cè)試的方法一般是通過構(gòu)建源數(shù)據(jù),直接對(duì)比處理末端或應(yīng)用端數(shù)據(jù)結(jié)果是否符合預(yù)期。數(shù)據(jù)端到端測(cè)試 雖然可以從最終結(jié)果上校驗(yàn)功能,但其存在成本較高,數(shù)據(jù)用例構(gòu)造復(fù)雜度較高、發(fā)現(xiàn) Bug 定位困難、運(yùn) 行時(shí)間超長(zhǎng)等弊端,所以這層一般更多的是進(jìn)行 happy path 的驗(yàn)證與端到端性能測(cè)試,不會(huì)大范圍覆蓋所 有分支邏輯。性能與安全測(cè)試。測(cè)試金字塔一般用來當(dāng)做面向功能的測(cè)試策略。除了以上講到的在金字塔內(nèi)部的多層測(cè) 試,在數(shù)據(jù)領(lǐng)域,由于數(shù)據(jù)量巨大以及數(shù)據(jù)往往會(huì)涉及到各種機(jī)密與隱私,所以數(shù)據(jù)安全測(cè)試、性能測(cè)試同 樣很重要。數(shù)據(jù)安全一般會(huì)根據(jù)具體項(xiàng)目情況涉及不同的測(cè)試策略,詳情可參閱數(shù)據(jù)安全篇章。而數(shù)據(jù)性能 則是另一個(gè)比較重要的點(diǎn),一般的步驟為:預(yù)計(jì)數(shù)據(jù)量級(jí),構(gòu)造數(shù)據(jù)、準(zhǔn)備生產(chǎn)仿真環(huán)境、準(zhǔn)備測(cè)試用例、 產(chǎn)出性能測(cè)試報(bào)告、分析與改造等。人員與能力標(biāo)準(zhǔn)。數(shù)據(jù)工程測(cè)試金字塔從下到上技術(shù)細(xì)節(jié)逐漸減少,業(yè)務(wù)含義逐漸增多,通常來講,底層 ETL 測(cè)試主要由數(shù)據(jù)開發(fā)人員負(fù)責(zé)。中部數(shù)據(jù)分層測(cè)試由于包含對(duì)數(shù)據(jù)模型的驗(yàn)證,需要有一定業(yè)務(wù)理解能 力的人員參與測(cè)試用例的制定,一般由數(shù)據(jù)測(cè)試、數(shù)據(jù)業(yè)務(wù)分析師以及數(shù)據(jù)工程師共同參與。而頂層的測(cè)試 用例由于很少涉及編碼細(xì)節(jié),其測(cè)試基本可以由數(shù)據(jù)分析師和數(shù)據(jù)測(cè)試共同完成。小結(jié)綜上所述,做好數(shù)據(jù)項(xiàng)目的工程化具有重要的意義和價(jià)值。數(shù)據(jù)平臺(tái)和應(yīng)用類軟件雖然面向不同的用戶和需求,但長(zhǎng)期運(yùn)營(yíng)的關(guān)鍵指標(biāo)是功能性、健壯性、易用性、拓展性和可維護(hù)性,而科學(xué)的工程化可以滿足這些指標(biāo)。數(shù)據(jù)項(xiàng)目工程化是加速數(shù)據(jù)到價(jià)值過程規(guī)模化的最佳實(shí)踐,因此我們需要了解數(shù)據(jù)項(xiàng)目中的痛點(diǎn)和挑戰(zhàn),其中包括數(shù)據(jù)治理、降低維護(hù)成本、高效數(shù)據(jù)處理、靈活設(shè)計(jì)以滿足業(yè)務(wù)變化和賦能業(yè)務(wù)。