中文字幕亚洲精品乱码,青草青草久热国产精品,两性午夜福利国产一级毛片,日韩精品一区二区三区视频,久久不卡免费视频久久高清精品,人人妻人人澡人人爽不卡视频,亚洲国产一区二区精品,亚洲一区二区三区AV,中文亚洲av片在线观看,日韩性人妻诱慰无码

會(huì)員服務(wù) 登錄 注冊(cè)
×
資訊活動(dòng)

敏捷的數(shù)據(jù)工程實(shí)踐

發(fā)布時(shí)間:2024-05-24 來源:金屬加工

隨著數(shù)據(jù)在越來越多的企業(yè)中被應(yīng)用,數(shù)據(jù)技術(shù)的發(fā)展可謂突飛猛進(jìn)。不僅基于Hadoop的大數(shù)據(jù)生態(tài)在持續(xù)完善,我們也能看到很多新興的分布式技術(shù)如潮水般涌現(xiàn)。

雖然數(shù)據(jù)技術(shù)發(fā)展飛快,但是對(duì)于做數(shù)據(jù)開發(fā)的我們,整個(gè)數(shù)據(jù)項(xiàng)目開發(fā)過程還是很痛苦。我們接觸過的客戶常常這樣抱怨:

搞不懂?dāng)?shù)據(jù)怎么算出來的,反正很復(fù)雜

數(shù)據(jù)庫里面好幾百個(gè)SQL,代碼都很長(zhǎng)

經(jīng)常延遲出數(shù)據(jù),流水線總是出問題

這是什么原因呢?我們發(fā)現(xiàn)這常常是由于團(tuán)隊(duì)的數(shù)據(jù)工程實(shí)踐做得不夠好。

想要規(guī)?;瘜?shí)施企業(yè)數(shù)據(jù)項(xiàng)目開發(fā),除了數(shù)據(jù)技術(shù)之外,數(shù)據(jù)工程實(shí)踐也得跟上。

這篇文章的內(nèi)容是結(jié)合我們?cè)诙鄠€(gè)客戶的數(shù)據(jù)項(xiàng)目經(jīng)驗(yàn),給大家分享一些行之有效的數(shù)據(jù)工程實(shí)踐。

數(shù)據(jù)工程與敏捷數(shù)據(jù)工程

首先,我們需要了解一下什么是數(shù)據(jù)工程。

我們一般理解的工程是以解決實(shí)際生活中的復(fù)雜問題為目標(biāo),通常是以團(tuán)隊(duì)為單位進(jìn)行實(shí)施,綜合利用各種科學(xué)知識(shí)及經(jīng)驗(yàn)解決問題(參考wiki)。軟件工程則是在軟件開發(fā)領(lǐng)域的工程,它綜合利用各類軟件構(gòu)建知識(shí)、技術(shù)工具及經(jīng)驗(yàn)來構(gòu)建復(fù)雜軟件。

IEEE將軟件工程定義為:

將系統(tǒng)化的、規(guī)范的、可度量的方法用于軟件的開發(fā)、運(yùn)行和維護(hù)的過程,即將工程化應(yīng)用于軟件開發(fā)中。

數(shù)據(jù)工程是在數(shù)據(jù)開發(fā)這個(gè)特定的軟件開發(fā)領(lǐng)域的軟件工程,可以定義為綜合利用各類軟件構(gòu)建知識(shí)、數(shù)據(jù)技術(shù)及工具、經(jīng)驗(yàn)來構(gòu)建復(fù)雜的數(shù)據(jù)產(chǎn)品。

1.敏捷數(shù)據(jù)工程

敏捷軟件開發(fā)已經(jīng)成為應(yīng)用軟件開發(fā)的主流工程方法。有大量團(tuán)隊(duì)驗(yàn)證了敏捷方法中推薦的實(shí)踐的有效性。

數(shù)據(jù)開發(fā)屬于一個(gè)特定的軟件開發(fā)領(lǐng)域,大部分的應(yīng)用軟件開發(fā)方法可適用于數(shù)據(jù)開發(fā),敏捷軟件開發(fā)方法自然也不例外。因此,我們可以將敏捷數(shù)據(jù)工程定義為:

將敏捷軟件開發(fā)的思想應(yīng)用于數(shù)據(jù)開發(fā)過程中,得到的一系列工程方法的合集。

很多敏捷軟件開發(fā)思想源于極限編程,其要旨在于通過將好的實(shí)踐做到極致來改善軟件質(zhì)量。例如,構(gòu)建持續(xù)集成流水線可以讓每次提交代碼都進(jìn)行集成,從而避免集成造成的問題。另外,通過將盡可能多的項(xiàng)目?jī)?nèi)容代碼化,可借助版本控制工具來追蹤每次修改的內(nèi)容。

在將敏捷思想應(yīng)用于數(shù)據(jù)工程時(shí),也需要根據(jù)實(shí)際情況進(jìn)行適當(dāng)?shù)牟眉艉驼{(diào)整。

數(shù)據(jù)工程內(nèi)容非常廣泛,包括數(shù)據(jù)需求分析、數(shù)倉設(shè)計(jì)、數(shù)據(jù)開發(fā)過程、數(shù)據(jù)測(cè)試、數(shù)據(jù)運(yùn)維、數(shù)據(jù)項(xiàng)目管理等。結(jié)合敏捷的思想,本文希望拋磚引玉,挑選三個(gè)方面的實(shí)踐方法做一些分享:

代碼化一切

數(shù)據(jù)復(fù)用與代碼復(fù)用

以ETL為單位的持續(xù)集成

2.代碼化一切

在應(yīng)用軟件開發(fā)中,“代碼化一切”被討論得很多。常見的代碼化XX有:

配置即代碼(Configuration as code):將配置文件放入代碼倉庫進(jìn)行管理,可以實(shí)現(xiàn)配置修改的可追溯性。

基礎(chǔ)設(shè)施即代碼(Infrastructure as code):將基礎(chǔ)設(shè)施需要的通用能力抽象出來,以便可以用代碼來定義基礎(chǔ)設(shè)施。然后將基礎(chǔ)設(shè)施代碼放入代碼倉庫進(jìn)行管理,可實(shí)現(xiàn)隨時(shí)可重建的基礎(chǔ)設(shè)施。通常借助一些工具實(shí)現(xiàn),比如Kubernetes支持用yaml文件代碼來定義基于容器的基礎(chǔ)設(shè)施,Terraform支持用yaml文件代碼定義各類基礎(chǔ)設(shè)施,并通過插件來支持幾乎所有的基礎(chǔ)設(shè)施提供商(如本地服務(wù)器、AWS/GCP/Azure云服務(wù)等)。

流水線即代碼(Pipeline as code):避免通過持續(xù)集成工具(如Jenkins)的UI上的復(fù)雜配置來定義流水線,而是通過代碼來定義持續(xù)集成流水線。早在2016年就在Thoughtworks的技術(shù)雷達(dá)上提出,后來得到了各種主流的持續(xù)集成工具的支持。比如Jenkins支持用Groovy代碼來定義流水線,GitHub Actions/GitLab/Circle CI/Travis CI等支持用yaml代碼來定義流水線。

還有更多的比如:

微服務(wù)的可觀察性即代碼(observability as code)

安全策略即代碼(Security policy as code)

圖表即代碼(Diagrams as code)

......

3.代碼化的優(yōu)勢(shì)

從上面這些“代碼化XX”中,我們可以看到一個(gè)趨勢(shì),似乎我們正在嘗試把“一切”代碼化。為什么“代碼化”這么有吸引力?

這要追溯到開發(fā)人員日常工作方式中。作為一個(gè)程序員,每天做得最多的事情是寫代碼,最習(xí)慣最熟練的工作也是寫代碼。通過一個(gè)熟悉的集成開發(fā)環(huán)境(IDE)或者文本編輯器,開發(fā)人員可以高效的編寫、調(diào)試代碼并完成工作。

正由于此,現(xiàn)在市場(chǎng)上有大量成熟的幫助開發(fā)人員寫代碼的工具。它們大都支持了數(shù)量眾多的快捷鍵,可輔助編寫代碼的智能代碼提示,語法檢查等等對(duì)代碼編寫非常友好的功能。開發(fā)人員還往往會(huì)根據(jù)自己的習(xí)慣對(duì)這些工具進(jìn)行配置,以便達(dá)到最高的編碼效率。

不難看出,正是由于這些工作方式,所以開發(fā)人員會(huì)更希望以代碼化的方式來工作,這也就推動(dòng)了“代碼化一切”這樣的工程思想的發(fā)展。

除了可以高效編輯之外,代碼化之后還能獲得這樣一些好處:

可追蹤變更歷史記錄:開發(fā)人員有成熟的代碼版本控制工具可用于記錄每一次修改內(nèi)容、修改人、修改時(shí)間、注釋等。如果有必要,還可以比較任意兩個(gè)版本的差異。對(duì)于診斷問題而言,這無疑是非常高效的。

可回退到任一版本:由于待開發(fā)的功能往往非常邏輯復(fù)雜,因此,常常會(huì)隱藏一些問題在交付的軟件中。如果實(shí)現(xiàn)了“代碼化”,則可根據(jù)需要隨時(shí)回退到某一個(gè)無問題的版本。

可融入開發(fā)人員的日常開發(fā)實(shí)踐:代碼化之后,可以更容易的融入到開發(fā)團(tuán)隊(duì)的日常實(shí)踐中,比如代碼評(píng)審Code Review

4.數(shù)據(jù)開發(fā)中的“代碼化”

數(shù)據(jù)開發(fā)中,我們一般要面對(duì)這樣幾類開發(fā)資源:基礎(chǔ)設(shè)施、安全配置、ETL代碼、ETL任務(wù)配置、數(shù)據(jù)流水線、運(yùn)維腳本、業(yè)務(wù)注釋等。

事實(shí)上,這些資源均可以很容易的被“代碼化”。

基礎(chǔ)設(shè)施可以通過Terraform進(jìn)行代碼化。如果整個(gè)系統(tǒng)運(yùn)行在類似Kubernetes這樣的容器平臺(tái)上,也可以Kubernetes提供的YAML來定義基礎(chǔ)設(shè)施。

安全配置代碼化常常需要一定的開發(fā)成本,一般可借助于各類安全管理應(yīng)用提供的API進(jìn)行代碼化。一個(gè)推薦的做法如下。首先根據(jù)具體的應(yīng)用場(chǎng)景設(shè)計(jì)安全管理模型,并據(jù)此模型定義(較少的)配置項(xiàng),然后提供一個(gè)程序讀取這些配置,并根據(jù)安全管理模型生成安全管理工具提供的API所對(duì)應(yīng)的數(shù)據(jù),最后調(diào)用安全管理工具提供的API完成安全配置的應(yīng)用。

ETL一般以代碼的形式存在,大部分的數(shù)據(jù)開發(fā)工具都提供了功能,使得開發(fā)者可以用SQL的來開發(fā)ETL。但是只有SQL常常難以滿足開發(fā)需求,比如,我們很難在SQL中發(fā)送HTTP請(qǐng)求、打印日志或斷點(diǎn)調(diào)試。這里可以推薦Thoughtworks開源的Easy SQL,它基于SQL進(jìn)行語法增強(qiáng),提供了一種方式使得我們可以更加模塊化的組織ETL代碼,支持了變量、日志打印、斷言、調(diào)試、外部函數(shù)調(diào)用等等功能。有了這些功能,我們可以在ETL代碼中完成各式各樣的工作,無需再結(jié)合其他工具使用,也無需自己編寫復(fù)雜的代碼。

ETL任務(wù)配置是指ETL任務(wù)運(yùn)行時(shí)使用的各類配置。很多數(shù)據(jù)計(jì)算引擎都提供了配置接口,以便我們可以根據(jù)需要來配置最適當(dāng)?shù)挠?jì)算資源、配置程序運(yùn)行所需的外部文件、配置算法等。這些配置看起來不起眼,但是也非常重要,因?yàn)樗鼈兂3?梢詻Q定程序運(yùn)行時(shí)性能,而這跟ETL任務(wù)的運(yùn)行時(shí)間、穩(wěn)定性緊密相關(guān)。所以,將ETL配置納入到代碼庫中管理就顯得十分必要。Easy SQL提供了一種能力,使得開發(fā)人員可以在ETL文件中定義ETL執(zhí)行所需的配置,是一種支持將配置與對(duì)應(yīng)的代碼放在一起的好的實(shí)踐。

數(shù)據(jù)流水線常常以一種“非代碼化”的方式進(jìn)行開發(fā)。很多調(diào)度工具都提供了界面,使得我們可以通過拖拽及配置來完成流水線的開發(fā)。比如阿里的Dataworks,Azure的ADF等。以“非代碼化”的方式開發(fā)流水線的靈活性很差且無法享受到版本控制的優(yōu)勢(shì)。一些開源工具提供了代碼化能力,比如受到很多數(shù)據(jù)開發(fā)人員喜愛的Airflow,它支持用python代碼來定義數(shù)據(jù)流水線,然后根據(jù)流水線定義進(jìn)行可視化展示。對(duì)開發(fā)人員更友好的方式是,提供一種自動(dòng)管理數(shù)據(jù)流水線的機(jī)制,這樣開發(fā)人員就無需編寫流水線了。這是可能的,事實(shí)上,完全可以編寫一個(gè)程序,解析出ETL代碼中的輸入輸出表,然后根據(jù)這些信息自動(dòng)提取ETL間的依賴關(guān)系,接著根據(jù)這些依賴關(guān)系就可以自動(dòng)生成數(shù)據(jù)流水線了。

運(yùn)維腳本常常以代碼的形式呈現(xiàn),但是很多數(shù)據(jù)工具希望將此類腳本納入工具內(nèi)部管理。這容易讓我們喪失代碼化的能力,因?yàn)樗偸枪膭?lì)我們將此類代碼配置到工具的UI界面里(可以想象一下在Jenkins還不支持用Groovy編寫CI/CD流水線時(shí)的使用方式)。

業(yè)務(wù)注釋是另一類可以考慮代碼化的資源。很多團(tuán)隊(duì)將此類信息納入到一個(gè)名為元數(shù)據(jù)管理的應(yīng)用中進(jìn)行管理。元數(shù)據(jù)管理應(yīng)用通??梢蕴峁┮恍┗谧匀徽Z言的搜索能力,而且可以提供友好的界面展示。這是其優(yōu)勢(shì),但是對(duì)于此類信息的維護(hù),就不得不在元數(shù)據(jù)管理應(yīng)用中完成。這常常帶來另一些問題。比如,當(dāng)我們重建某些數(shù)據(jù)庫表時(shí),元數(shù)據(jù)管理應(yīng)用無法將原來的元數(shù)據(jù)遷移到新表。還比如,元數(shù)據(jù)管理應(yīng)用常常無法提供完善的數(shù)據(jù)版本管理功能,從而使得我們無法進(jìn)行版本追溯及回滾。如果將此類業(yè)務(wù)注釋放到代碼庫中進(jìn)行管理,就可以享受到代碼化的優(yōu)勢(shì),并且,通過調(diào)用元數(shù)據(jù)管理應(yīng)用的API可以此元數(shù)據(jù)同步到元數(shù)據(jù)管理應(yīng)用,從而我們也能享受到元數(shù)據(jù)管理應(yīng)用提供的搜索即友好的數(shù)據(jù)展示的能力。

當(dāng)然,實(shí)際項(xiàng)目中可能還有其他一些沒有提到的資源類型,這里不在于為所有資源列舉代碼化方案,而是更多的提供一種代碼化一切的建議。當(dāng)我們發(fā)現(xiàn)團(tuán)隊(duì)正在以一種非代碼化的方式進(jìn)行數(shù)據(jù)開發(fā)時(shí),可能需要思考有沒有什么好的方案可以轉(zhuǎn)變?yōu)榇a化的方式。這將給我們的開發(fā)帶來非常多的好處。

免费无码又爽又刺激高潮虎虎视频| 中文无码乱人伦中文视频在线V| 国产户外野战无码播放在线观看| 国产乱人伦偷精品视频免下载| 亚洲午夜精品久久久久久app| 吃奶呻吟打开双腿做受动态图| a级国产乱理论片在线观看| 精品国产鲁一鲁一区二区交| 极品少妇被猛的白浆直喷白浆| 久久国产精品免费一区二区| 麻豆亚洲AV熟女国产一区二| 午夜性影院在线观看视频播放| 深夜A级毛片免费视频| 综合图区亚洲欧美自拍| 日日碰狠狠添天天爽超碰97久久| 亚洲欧美日韩国产成人精品影院| 黑人好猛厉害爽受不了好大撑| 亚洲一区二区三区国产精华液| 伊人久久大香线蕉成人| 激情内射亚洲一区二区三区爱妻| 亚洲av无码国产一级毛片久久国产精选精华精品| 亚洲欧美国产五月天综合| 精品无码国产自产在线观看极品| 国产精品专区第五页| 亚洲综合色AAA成人无码| 国产在线一二三区电影| 欧美亚洲综合另类精品国产色拍| 国产一级精品无码免费视频| 日韩乱码精品一区二区中文字幕| 亚洲欧洲日本在线观看| 欧美精品XXXXBBBB| 国产精品亚洲av三区国产伟业| 亚洲VA欧美va国产va综合| 最近免费中文字幕大全高清MV| 亚洲国产成人精品区综合| 久久久综合香蕉尹人综合网| 国产精品一区二区在线观看99| 久久精品无码精品免费专区| 国产精品久久久久精品麻豆| 亚洲人成欧美中文字幕| 国产XXXX色视频在线观看|