掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
首先需要解決的重要的問(wèn)題:數(shù)據(jù)工程和軟件工程之間有哪些不同之處?

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供鄠邑網(wǎng)站建設(shè)、鄠邑做網(wǎng)站、鄠邑網(wǎng)站設(shè)計(jì)、鄠邑網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、鄠邑企業(yè)網(wǎng)站模板建站服務(wù),10余年鄠邑做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
二者非常相似,許多起源于軟件工程的最佳實(shí)踐對(duì)數(shù)據(jù)工程同樣有效,前提是需要正確地構(gòu)建它們。
在本文中,將詳細(xì)介紹幾個(gè)軟件工程的最佳實(shí)踐,以及如何更好地創(chuàng)建和維護(hù)數(shù)據(jù)管道。文中將特別關(guān)注管道,因?yàn)檫@是我們?cè)贓stuary關(guān)注的重點(diǎn),這些原則同樣適用于大型數(shù)據(jù)堆棧。
本次討論將是在高層進(jìn)行,雖然我自己不是一個(gè)軟件工程師,但是希望你能從下屬原則中獲取到戰(zhàn)略和領(lǐng)導(dǎo)價(jià)值。
數(shù)據(jù)產(chǎn)品和軟件產(chǎn)品是有區(qū)別的,其利益相關(guān)者各不相同。
通常,軟件產(chǎn)品的構(gòu)建涉及到高技術(shù)團(tuán)隊(duì)之間的協(xié)作,需要將產(chǎn)品交付給不同的用戶群體,通常是商業(yè)用途的用戶群體。例如,銀行可能會(huì)為其客戶創(chuàng)建一個(gè)移動(dòng)應(yīng)用程序。
相比之下,數(shù)據(jù)產(chǎn)品往往駐留在企業(yè)的內(nèi)部,其利益相關(guān)者和參與者可以從高技術(shù)的工程師到需要利用數(shù)據(jù)來(lái)完成工作的非技術(shù)性專業(yè)人員。例如,同一家銀行可能為其客戶創(chuàng)建不同的財(cái)務(wù)和人口數(shù)據(jù)產(chǎn)品,以實(shí)現(xiàn)不同的安全、銷售和戰(zhàn)略功能。
在閱讀這篇文章過(guò)程中,讀者將在數(shù)據(jù)空間中徜徉,可能無(wú)需強(qiáng)調(diào)二者區(qū)別的細(xì)節(jié),讀者僅需要從業(yè)務(wù)的角度,來(lái)審視數(shù)據(jù)與軟件的不同。
但是從本質(zhì)上來(lái)講,數(shù)據(jù)工程和軟件工程的實(shí)踐卻基本相同,比如可以編寫(xiě)、維護(hù)和部署代碼來(lái)解決一個(gè)可重復(fù)的問(wèn)題,正因如此,某些有價(jià)值的軟件工程最佳實(shí)踐可以轉(zhuǎn)換為數(shù)據(jù)工程最佳實(shí)踐,許多最新的數(shù)據(jù)趨勢(shì)——如數(shù)據(jù)網(wǎng)格和數(shù)據(jù)操作程序——以一種全新的方式實(shí)現(xiàn)了軟件工程實(shí)踐,并取得了良好的結(jié)果。
通過(guò)查看歷史數(shù)據(jù),理解為什么這些最佳數(shù)據(jù)實(shí)踐均來(lái)自于軟件工程,并了解為什么直到最近才將它們應(yīng)用到數(shù)據(jù)工程中的原因。
軟件工程學(xué)科在20世紀(jì)60年代首次得到認(rèn)可,當(dāng)時(shí),“軟件創(chuàng)建是一種形式的工程”的想法是一種富有挑釁性的想法。事實(shí)上,選擇“軟件工程”這一詞的目的是鼓勵(lì)從業(yè)者停下來(lái),將科學(xué)原理應(yīng)用到實(shí)際工作中去。在接下來(lái)的幾十年里,軟件工程師對(duì)科學(xué)和機(jī)械工程中的原理進(jìn)行了測(cè)試和改進(jìn)。
在20世紀(jì)90年代,隨著對(duì)軟件需求的日增,整個(gè)行業(yè)落后于日益增長(zhǎng)的軟件需求,導(dǎo)致了所謂的“應(yīng)用程序開(kāi)發(fā)危機(jī)”,這次危機(jī)促使軟件工程師采用敏捷開(kāi)發(fā)和相關(guān)的實(shí)踐,它意味著需要優(yōu)先考慮快速的生命周期迭代,并對(duì)軟件背后的人文系統(tǒng)賦予價(jià)值。
眾所周知,數(shù)據(jù)工程是一個(gè)相對(duì)年輕的領(lǐng)域。雖然絕大多數(shù)人類歷史的數(shù)據(jù)都早已經(jīng)存在,但是關(guān)系型數(shù)據(jù)庫(kù)則是在20世紀(jì)70年代創(chuàng)建的。直到21世紀(jì)初,數(shù)據(jù)庫(kù)還只局限于小部分管理者,在IT領(lǐng)域,數(shù)據(jù)基礎(chǔ)設(shè)施通常作為一個(gè)具有許多組件的企業(yè)內(nèi)部資源,是一個(gè)相對(duì)較新的開(kāi)發(fā)(毋庸諱言:是一個(gè)快速變化的開(kāi)發(fā)), “數(shù)據(jù)工程師”這個(gè)職位起源于二十一世紀(jì)一十年代。
總之,軟件工程師已經(jīng)工作了大約60年,他們今天仍然在做大致相似的工作,期間,他們解決了很多問(wèn)題。數(shù)據(jù)工程領(lǐng)域可以利用軟件工程這一優(yōu)勢(shì)。
閑話少說(shuō),下文是一些可以(也應(yīng)該)應(yīng)用于數(shù)據(jù)管道的軟件工程最佳實(shí)踐。
軟件或數(shù)據(jù)產(chǎn)品的生命周期包括規(guī)劃、構(gòu)建、文檔化、測(cè)試、部署和維護(hù)在內(nèi)的周期性過(guò)程。
敏捷軟件開(kāi)發(fā)通過(guò)縮短開(kāi)發(fā)生命周期來(lái)滿足需求,與此同時(shí),繼續(xù)進(jìn)行產(chǎn)品迭代和產(chǎn)品改進(jìn)。
同樣地,可以(也應(yīng)該)為數(shù)據(jù)管道實(shí)現(xiàn)一個(gè)快速的生命周期。
在整個(gè)組織中,對(duì)新數(shù)據(jù)產(chǎn)品的需求將迅速且頻繁地出現(xiàn),應(yīng)為生命周期工作流中的全部環(huán)節(jié),做好充分的準(zhǔn)備。
將敏捷開(kāi)發(fā)方法集成到數(shù)據(jù)中的概念是DataOps框架的一個(gè)重要組成部分,參看我關(guān)于這個(gè)主題的全文。
為確保數(shù)據(jù)生命周期更加緊湊,不要迷失在技術(shù)實(shí)現(xiàn)細(xì)節(jié)中,這一點(diǎn)非常重要,需要對(duì)技術(shù)具體實(shí)現(xiàn)細(xì)節(jié)進(jìn)行抽象。
軟件工程師對(duì)抽象的概念感覺(jué)良好,抽象是將信息簡(jiǎn)化為更一般的對(duì)象或系統(tǒng),也可以將其視為泛化或建模。
在軟件工程中,相關(guān)的抽象層次通常存在于代碼的內(nèi)部。例如,函數(shù)或面向?qū)ο蟮木幊陶Z(yǔ)言是有用的工具,但它們并沒(méi)有揭示如何去執(zhí)行這些細(xì)節(jié)。
在數(shù)據(jù)中,需要使用一個(gè)高于代碼的抽象層級(jí),主要有以下兩個(gè)原因:
對(duì)于數(shù)據(jù)管道來(lái)說(shuō),兩個(gè)相關(guān)的抽象是:從一個(gè)系統(tǒng)攝取數(shù)據(jù)并將其推送到另一個(gè)系統(tǒng)的行為(在Estuary中使用術(shù)語(yǔ)捕獲和物化,但二者語(yǔ)義會(huì)有所不同)。
當(dāng)談?wù)撌褂?“捕獲”和“物化”這樣的術(shù)語(yǔ)時(shí),無(wú)論是工程師還是業(yè)務(wù)用戶都需要將管道的語(yǔ)義價(jià)值統(tǒng)一起來(lái)(從系統(tǒng)X中獲取數(shù)據(jù)推送到系統(tǒng)Y,這樣便可以實(shí)現(xiàn)Z)。
理解上述意思之后,便抓住了重點(diǎn),但這也僅僅是抽象討論的延續(xù),下面進(jìn)行更多實(shí)質(zhì)性的討論。
首先考慮將數(shù)據(jù)視為一個(gè)產(chǎn)品,這是當(dāng)下流行的數(shù)據(jù)網(wǎng)格框架的一個(gè)核心準(zhǔn)則。
數(shù)據(jù)即產(chǎn)品屬于公司內(nèi)部的不同領(lǐng)域:擁有不同技能的團(tuán)隊(duì),共享數(shù)據(jù)的操作用例。數(shù)據(jù)即產(chǎn)品可以快速轉(zhuǎn)換為多種形式的可交付成果,這些成果全部是由用例來(lái)驅(qū)動(dòng)的。換句話說(shuō):它們關(guān)乎“做什么”,而非“如何做”。
軟件工程與聲明式編程并行,聲明式編程關(guān)注的是程序可以“做什么”,這與命令式編程恰恰相反,命令式編程關(guān)乎任務(wù)應(yīng)該“如何做”。
聲明式編程是建立在命令式編程之上的一種抽象程序:在運(yùn)行時(shí),程序經(jīng)過(guò)編譯之后,才能解決“如何做”的問(wèn)題。聲明性編程允許在運(yùn)行時(shí)具備更大的靈活性,從而節(jié)省了資源。此外,聲明性編程更容易控制,同時(shí)也更加容易實(shí)現(xiàn)。
使管道具有可聲明性:首先在管道的功能基礎(chǔ)上進(jìn)行構(gòu)建,而非根據(jù)管道的機(jī)制進(jìn)行構(gòu)建,從而能夠更好地支持“數(shù)據(jù)即產(chǎn)品”的文化理念。
項(xiàng)目將從管道所要交付的產(chǎn)品開(kāi)始,比如說(shuō),一個(gè)特定的實(shí)例化視圖,并在此基礎(chǔ)上設(shè)計(jì)管道,聲明式管道方法確保不會(huì)迷失在技術(shù)細(xì)節(jié)中,忽略了數(shù)據(jù)的業(yè)務(wù)價(jià)值。
在軟件開(kāi)發(fā)和數(shù)據(jù)管道中,失效不可避免。很多人都從失效中吸取過(guò)教訓(xùn):努力修復(fù)災(zāi)難性的系統(tǒng)損壞,避免因中斷而失去進(jìn)度或數(shù)據(jù),或者避免將一個(gè)低級(jí)錯(cuò)誤放大。
無(wú)論在軟件還是數(shù)據(jù)語(yǔ)境的應(yīng)用中,都可以利用類似的預(yù)防性備份措施來(lái)預(yù)防失效的發(fā)生。
為此需要添加一些重要的考量,管道供貨商會(huì)提供數(shù)據(jù)編排工具來(lái)實(shí)現(xiàn)這些功能。
測(cè)試
正如軟件工程一樣,測(cè)試是管道生命周期的一部分。
除了在部署前進(jìn)行全面的手動(dòng)測(cè)試之外,還應(yīng)該編寫(xiě)自動(dòng)化的單元測(cè)試,以密切關(guān)注量產(chǎn)中的管道。
如何編寫(xiě)這些測(cè)試內(nèi)容取決于平臺(tái)的種類以及如何與之交互。例如,如果需要在管道中使用Airflow,那么可以創(chuàng)建Python腳本來(lái)測(cè)試它們?;蛘?,可能更偏向用一個(gè)更健壯的監(jiān)控設(shè)置來(lái)捕獲潛在的問(wèn)題。
根據(jù)經(jīng)驗(yàn)法則,數(shù)據(jù)管道應(yīng)用的轉(zhuǎn)換越多,需要的測(cè)試就越多。
版本控制
軟件工程師使用版本控制,通常是用Git來(lái)協(xié)同工作,并保留將軟件回滾到先前版本的能力。
如果使用的是來(lái)自供應(yīng)商的產(chǎn)品,它可能會(huì)提供GitOps工作流,這意味著工程師可以使用Git在他們首選的開(kāi)發(fā)環(huán)境中進(jìn)行管道協(xié)作。然而,并不是所有人都這么做。
即使無(wú)法在數(shù)據(jù)基礎(chǔ)設(shè)施中使用Git,供應(yīng)商也會(huì)啟用一些選項(xiàng)來(lái)備份管道,所以一定要充分利用該功能。
分布儲(chǔ)存及回填能力
云托管和存儲(chǔ)技術(shù)的出現(xiàn)降低了數(shù)據(jù)中斷和數(shù)據(jù)丟失的風(fēng)險(xiǎn),但它并沒(méi)有完全消除這些風(fēng)險(xiǎn)。
數(shù)據(jù)基礎(chǔ)設(shè)施應(yīng)該選用分布式的,也就是說(shuō),不同的組件應(yīng)分布到不同的服務(wù)器上,從而使其能夠容錯(cuò)。對(duì)風(fēng)險(xiǎn)的控制程度取決于云提供商及其所選定供應(yīng)商。
始終迭代
軟件工程最佳實(shí)踐的最后一條策略是:當(dāng)某些例程不工作時(shí),就進(jìn)行迭代。
現(xiàn)狀和最佳實(shí)踐總是在不斷的變化之中,這既適用于軟件工程,也適用于數(shù)據(jù)工程。
最好的方法總是要經(jīng)過(guò)深思熟慮,安全地引入變革,并得到所有利益相關(guān)者的支持。
從上述這些原則開(kāi)始,通過(guò)相互間的合作配合,適配數(shù)據(jù)團(tuán)隊(duì)的系統(tǒng)和文化。始終關(guān)注那些積極的影響和需要改進(jìn)的領(lǐng)域,并從那里開(kāi)始行動(dòng)。
本文改編自Estuary的博客,可以通過(guò) LinkedIn找到我們的團(tuán)隊(duì),可以在GitHub上獲取到源代碼。
衷心感謝 Ben Huberman的大力支持

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流