Dagster:讓數(shù)據(jù)更接近業(yè)務(wù)價(jià)值的新的數(shù)據(jù)編排器
譯文譯者 | 李睿
審校 | 重樓
本文將分析一種新的數(shù)據(jù)編排器:Dagster。在行業(yè)專家看來(lái),這是第一代數(shù)據(jù)編排器,它使數(shù)據(jù)管道更接近關(guān)鍵業(yè)務(wù)流程,而這些將真正成為關(guān)鍵任務(wù)解決方案的業(yè)務(wù)數(shù)據(jù)流程。為了描述Dagster的功能和用例,將提供一些有關(guān)模式的場(chǎng)景和一些歷史信息,這些信息對(duì)于理解它帶來(lái)的業(yè)務(wù)價(jià)值是十分必要的。
在過(guò)去的十年中,有許多圍繞著編排和編排模式的發(fā)展趨勢(shì)。以下將提供這些模式的簡(jiǎn)單描述:
- 編排:它是一個(gè)由編排系統(tǒng)編排和集中的定義良好的工作流。編排系統(tǒng)就像一個(gè)樂(lè)隊(duì),樂(lè)隊(duì)的指揮將設(shè)定節(jié)奏并指揮演奏人員正確演奏。編排有三個(gè)主要特點(diǎn):
(1)提供集中式工作流,方便地可視化業(yè)務(wù)或數(shù)據(jù)流程。
(2)工作流由一個(gè)最關(guān)鍵的層管理。如果編排系統(tǒng)崩潰,就沒(méi)有業(yè)務(wù)服務(wù),就像沒(méi)有樂(lè)隊(duì)指揮,音樂(lè)會(huì)也不會(huì)取得成功一樣。
(3)它們可以非常靈活地集成到不同的架構(gòu)模式中,例如API、事件驅(qū)動(dòng)、RPC或數(shù)據(jù)流程。
- 編排:它基于事件驅(qū)動(dòng)或流架構(gòu),目標(biāo)是架構(gòu)中的每一個(gè)組件都可以獨(dú)立工作,并有自己的責(zé)任來(lái)決定必須采取的行動(dòng)。編排有三個(gè)主要特點(diǎn):
(1)它必須基于事件驅(qū)動(dòng)或流模式。
(2)沒(méi)有單一和集中的層,因此不存在單點(diǎn)故障,除非只有單個(gè)消息代理。
(3)為理解流程提供更多的可擴(kuò)展性、靈活性和復(fù)雜性。
編排器和業(yè)務(wù)流程管理軟件一直接近業(yè)務(wù)層,這提高了它們?cè)谄髽I(yè)戰(zhàn)略技術(shù)路線圖中的受歡迎程度。第一代業(yè)務(wù)流程管理(BPM)出現(xiàn)在2000年左右,是面向軟件工程師的技術(shù)。
在2014年到2018年期間,事件驅(qū)動(dòng)和編排模式開(kāi)始流行,首先是Netflix,然后是Apache Kafka等流媒體平臺(tái)的出現(xiàn)。
與軟件世界相比,數(shù)據(jù)世界的出現(xiàn)總是有些晚。盡管正朝著一個(gè)場(chǎng)景前進(jìn),但在這個(gè)場(chǎng)景中,操作和分析世界將不再是孤立的。當(dāng)企業(yè)需要應(yīng)用數(shù)據(jù)驅(qū)動(dòng)的方法(數(shù)據(jù)是決策過(guò)程核心的一部分)時(shí),分析層和操作層作為兩種不同的思維工作的架構(gòu)和團(tuán)隊(duì)拓?fù)渚筒黄鹱饔昧恕?
數(shù)據(jù)世界發(fā)生了什么
當(dāng)大數(shù)據(jù)的概念開(kāi)始流行時(shí),出現(xiàn)了第一批數(shù)據(jù)編排器,例如Apache Ozzie(2010年由雅虎公司開(kāi)發(fā)),它基于DAG XML配置,是一個(gè)預(yù)定的工作流,專注于Hadoop生態(tài)系統(tǒng)。不久之后,基于Python的Apache Airflow(Airbnb在2015年推出)出現(xiàn)了。它提供了更多的功能,如從DAG XML配置遷移到編程配置,以及Hadoop生態(tài)系統(tǒng)之外的更多集成,但也是一個(gè)定時(shí)工作流系統(tǒng)。在兩者的中間出現(xiàn)了Luigi(2012年由Spotify公司開(kāi)發(fā)):基于Python,但面向管道而不是DAG,但包括有趣的軟件最佳實(shí)踐,例如A/B測(cè)試。
<workflow-app name="useooziewf" xmlns="uri:oozie:workflow:0.1">
...
<decision name="mydecision">
<switch>
<case to="reconsolidatejob">
${fs:fileSize(secondjobOutputDir) gt 10 * GB}
</case> <case to="rexpandjob">
${fs:fileSize(secondjobOutputDir) lt 100 * MB}
</case>
<case to="recomputejob">
${ hadoop:counters('secondjob')[RECORDS][REDUCE_OUT] lt 1000000 }
</case>
<default to="end"/>
</switch>
</decision>
...
</workflow-app>
Apache Airflow是第一個(gè)真正意義上的數(shù)據(jù)編排器,但在人們看來(lái),它有一些改進(jìn)之處,使其成為一個(gè)非常關(guān)注傳統(tǒng)數(shù)據(jù)世界的產(chǎn)品,而不是關(guān)注數(shù)據(jù)正在成為企業(yè)決策中心的這一新現(xiàn)實(shí)。
- 其用戶界面很差,完全面向數(shù)據(jù)工程師。
- 主要面向執(zhí)行任務(wù),而不知道這些任務(wù)是做什么的。
- 一切都是一項(xiàng)任務(wù),增加了可維護(hù)性和理解性方面的復(fù)雜性。
- 2021年底引入了傳感器的概念,傳感器是一種特殊類型的運(yùn)算符,用于等待外部事件,如Kafka事件、JMS消息或基于時(shí)間的事件。
import requests
from airflow.decorators import dag, task
@dag(
dag_id="example_complex",
schedule_interval="0 0 * * *",
start_date=pendulum.datetime(2022, 1, 1, tz="UTC"),
catchup=False,
dagrun_timeout=datetime.timedelta(minutes=60),
)
def ExampleComplex():
...
@task
def get_data():
...
@task
def merge_data():
...
dag = ProcessEmployees()
所有這些編排解決方案的發(fā)展都有一個(gè)共同點(diǎn):這些公司(雅虎、Airbnb或Spotify)在管理其數(shù)據(jù)管道的復(fù)雜性方面面臨的挑戰(zhàn)。
數(shù)據(jù)驅(qū)動(dòng):數(shù)據(jù)新時(shí)代
編碼器工具的第一個(gè)版本非常注重?cái)?shù)據(jù)工程師的經(jīng)驗(yàn),并基于傳統(tǒng)的分析和操作平臺(tái)架構(gòu),例如數(shù)據(jù)湖、數(shù)據(jù)中心或?qū)嶒?yàn)數(shù)據(jù)科學(xué)工作區(qū)。
行業(yè)專家表示,他們?cè)?017年左右開(kāi)始進(jìn)入數(shù)據(jù)世界的旅程。在此之前,一直致力于接近業(yè)務(wù)流程并基于事件驅(qū)動(dòng)解決方案的操作任務(wù)關(guān)鍵型解決方案。在那一刻發(fā)現(xiàn)了一些工具,例如Oozie或Airflow,它們是ETL工具,專注于計(jì)劃任務(wù)/工作流,沒(méi)有云計(jì)算解決方案,基于企業(yè)復(fù)雜的實(shí)施和維護(hù),可擴(kuò)展性差,用戶體驗(yàn)差。
他們當(dāng)時(shí)的第一個(gè)想法是,這些是現(xiàn)在必須滿足的工具,但在未來(lái)幾年不會(huì)使用。如今,數(shù)據(jù)驅(qū)動(dòng)的方法已經(jīng)改變了一切,每天分析和操作工作負(fù)載之間的界限都比以往任何時(shí)候都更加分散。有許多基于分析和操作工作負(fù)載的關(guān)鍵業(yè)務(wù)流程。這些關(guān)鍵流程中的許多可能與幾年前的非關(guān)鍵數(shù)據(jù)管道非常相似。2020年,Zhamak Deghani發(fā)表了一篇關(guān)于數(shù)據(jù)網(wǎng)格原理的文章,她寫了一句特別重要的話:“我確實(shí)相信,在未來(lái)的某個(gè)時(shí)刻,我們的技術(shù)會(huì)發(fā)展,使這兩個(gè)層面更加緊密地結(jié)合在一起,但現(xiàn)在,我建議將它們的關(guān)注點(diǎn)分開(kāi)?!?/span>
而專家的觀點(diǎn)是,這些平臺(tái)比他們想象的更接近,就業(yè)務(wù)價(jià)值而言,它們比數(shù)據(jù)網(wǎng)格本身的邏輯架構(gòu)更容易在小范圍內(nèi)實(shí)現(xiàn)。例如,考慮時(shí)尚零售行業(yè)和關(guān)鍵流程,例如分配、電子商務(wù)或物流解決方案。多年前,所有這些流程都是可操作的,其中許多都使用了SAP或Oracle等傳統(tǒng)應(yīng)用程序,而如今,他們需要復(fù)雜的數(shù)據(jù)流程,包括大數(shù)據(jù)攝取、轉(zhuǎn)換、分析和機(jī)器學(xué)習(xí)模型,以提供實(shí)時(shí)建議和需求預(yù)測(cè),從而實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)的決策。
當(dāng)然,需要傳統(tǒng)的數(shù)據(jù)管道/工作流,基于獨(dú)立操作和分析平臺(tái)的傳統(tǒng)解決方案將繼續(xù)為一些報(bào)告、批分析流程、實(shí)驗(yàn)和其他分析創(chuàng)新提供價(jià)值。但如今還有其他類型的數(shù)據(jù)處理;具有不同需求并提供更多業(yè)務(wù)價(jià)值的業(yè)務(wù)數(shù)據(jù)流程。需要提供以下功能的數(shù)據(jù)解決方案:
- 更好的軟件開(kāi)發(fā)體驗(yàn)和數(shù)據(jù)代碼管理,應(yīng)用所有最佳實(shí)踐,例如隔離環(huán)境、單元測(cè)試、A/B、數(shù)據(jù)合同等。
- 友好而豐富的集成生態(tài)系統(tǒng),不僅在大數(shù)據(jù)世界中,而且在通用數(shù)據(jù)世界中。
- 基于云的解決方案,提供易于擴(kuò)展、低維護(hù)和易于與IAM解決方案集成。
- 不僅為開(kāi)發(fā)人員,而且為數(shù)據(jù)科學(xué)家、數(shù)據(jù)分析師、業(yè)務(wù)分析師和運(yùn)營(yíng)團(tuán)隊(duì)提供更好的用戶體驗(yàn)。
Dagster簡(jiǎn)介
Dagster是一個(gè)數(shù)據(jù)流編排平臺(tái),它超越了人們所理解的傳統(tǒng)數(shù)據(jù)編排器。該項(xiàng)目由Nick Shrock于2018年啟動(dòng),是他在Facebook工作時(shí)發(fā)現(xiàn)的一種需求的結(jié)果。Dagster的目標(biāo)之一是提供一種工具,消除管道開(kāi)發(fā)和管道操作之間的障礙,但在這個(gè)過(guò)程中,開(kāi)始將數(shù)據(jù)處理世界與業(yè)務(wù)流程聯(lián)系起來(lái)。
Dagster與以前的解決方案相比有了顯著的改進(jìn)。
- 面向數(shù)據(jù)工程師、開(kāi)發(fā)人員和數(shù)據(jù)/業(yè)務(wù)操作工程師:它的多功能性和抽象性允許以更面向開(kāi)發(fā)人員的方式設(shè)計(jì)管道,應(yīng)用軟件最佳實(shí)踐和管理數(shù)據(jù),并將數(shù)據(jù)管道作為代碼。
- 遵循數(shù)據(jù)工程的優(yōu)先原則方法,完整的開(kāi)發(fā)生命周期:開(kāi)發(fā)、部署、監(jiān)視和可觀察性。
- 它包含了一個(gè)不同的新概念,即軟件定義資產(chǎn)。資產(chǎn)是在Dagster中建模并持久化在數(shù)據(jù)存儲(chǔ)庫(kù)中的數(shù)據(jù)對(duì)象或機(jī)器學(xué)習(xí)。
- Dagit UI是一個(gè)基于Web的界面,用于查看Dagster對(duì)象并與之交互。這是一個(gè)非常直觀,用戶友好的界面,允許非常簡(jiǎn)單的操作。
- 這是一個(gè)開(kāi)源的解決方案,同時(shí)提供SaaS云解決方案,加速解決方案的實(shí)施。
- 非??焖俚膶W(xué)習(xí)曲線,使開(kāi)發(fā)團(tuán)隊(duì)能夠在早期交付價(jià)值。
了解Dagster的概念
以下將解釋一些基本概念,給出簡(jiǎn)單的定義,并通過(guò)示例構(gòu)建簡(jiǎn)單的業(yè)務(wù)數(shù)據(jù)管道。
編排器的公共組件
在高層次上,這些是任何編排器的基本組件:
- 作業(yè):主要執(zhí)行單位和監(jiān)控單位;用配置和參數(shù)實(shí)例化一個(gè)圖。
- 操作:基本上它們是想要執(zhí)行的任務(wù),包含操作,可以執(zhí)行簡(jiǎn)單的任務(wù),例如執(zhí)行數(shù)據(jù)庫(kù)查詢(攝取或檢索數(shù)據(jù)),啟動(dòng)遠(yuǎn)程作業(yè)(Spark, Python等),或發(fā)送事件。
- 圖:子圖中相互連接的操作的集合,操作可以組合成一個(gè)圖來(lái)完成復(fù)雜的任務(wù)。
軟件定義資產(chǎn)
資產(chǎn)是持久存儲(chǔ)中的對(duì)象,例如表、文件或持久機(jī)器學(xué)習(xí)模型。軟件定義資產(chǎn)是一個(gè)Dagster對(duì)象,它將資產(chǎn)與用于生成其內(nèi)容的功能和上游資產(chǎn)結(jié)合在一起。
這是Python中的聲明性數(shù)據(jù)定義,允許:
- 將數(shù)據(jù)合同定義為代碼,以及如何在管道中使用它們。
- 通過(guò)數(shù)據(jù)投影定義實(shí)體的組成,無(wú)論其物理結(jié)構(gòu)如何。
- 將用于計(jì)算資產(chǎn)的業(yè)務(wù)邏輯與用于讀取和寫入持久存儲(chǔ)的I/O邏輯解耦。
- 應(yīng)用測(cè)試最佳實(shí)踐,包括在編寫單元測(cè)試時(shí)使用模擬的能力。
- 定義分區(qū)的能力為進(jìn)程的運(yùn)行和重新啟動(dòng)流程打開(kāi)了一個(gè)可能性的世界。有時(shí),只需要重新處理由于某種原因處理不正確或不完整的分區(qū)。
一個(gè)驚人的能力是能夠使用外部工具,例如DBT、Snowflake、Airbyte、Fivetran和許多其他工具來(lái)定義資產(chǎn)。這是令人驚訝的,因?yàn)樗軌蛉谌肴蚱脚_(tái),而不僅僅是大數(shù)據(jù)生態(tài)系統(tǒng)。
啟動(dòng)作業(yè)的選項(xiàng)
在這種情況下,最大的區(qū)別是這些傳感器提供的功能:
- 調(diào)度:按固定時(shí)間間隔執(zhí)行作業(yè)。
- 傳感器:允許基于一些外部事件(如Kafka事件、S3中的新文件、特定資產(chǎn)具體化或數(shù)據(jù)分區(qū)更新)運(yùn)行。
- 分區(qū):允許基于資產(chǎn)數(shù)據(jù)子集的更改運(yùn)行,例如,在特定時(shí)間窗口內(nèi)的數(shù)據(jù)集中的記錄。
- 回填:它提供了只在感興趣的分區(qū)集上重新執(zhí)行數(shù)據(jù)管道的能力。例如,重新啟動(dòng)管道,該管道將計(jì)算每個(gè)國(guó)家的商店銷售的聚合,但只計(jì)算具有美國(guó)商店數(shù)據(jù)的分區(qū)。
傳感器、分區(qū)、回填、IO管理器和資產(chǎn)提供的功能的組合代表了數(shù)據(jù)管道編排世界中非常重要的范式轉(zhuǎn)換。
IO管理器
它提供了與持久存儲(chǔ)庫(kù)的集成組件,允許持久化資產(chǎn)和操作輸出,并將其加載到S3、Snowflake或其他數(shù)據(jù)存儲(chǔ)庫(kù)。
這些組件包含與架構(gòu)中使用的每個(gè)外部通道的所有集成邏輯??梢允褂矛F(xiàn)有的集成,擴(kuò)展它們以包含特定的邏輯,或者開(kāi)發(fā)新的邏輯。
譜系
資產(chǎn)的使用提供了譜系、數(shù)據(jù)可觀測(cè)性和數(shù)據(jù)質(zhì)量監(jiān)控的基礎(chǔ)層。在專家看來(lái),數(shù)據(jù)沿襲是一個(gè)非常復(fù)雜和關(guān)鍵的方面,現(xiàn)在已經(jīng)超越了傳統(tǒng)的表,包括API、主題和其他數(shù)據(jù)源。雖然Dagster提供了強(qiáng)大的功能,但它應(yīng)該是平臺(tái)整體譜系中的另一個(gè)來(lái)源,而不是真相的來(lái)源。
調(diào)試和可觀察性
Dagster的另一個(gè)與眾不同的功能是,當(dāng)使用軟件定義資產(chǎn)時(shí),它提供了數(shù)據(jù)可觀察性。數(shù)據(jù)操作員或數(shù)據(jù)工程師有幾個(gè)特征來(lái)分析數(shù)據(jù)管道:
- 管道狀態(tài),操作狀態(tài)和定時(shí)。
- 帶有錯(cuò)誤和信息跟蹤的日志。
- 資產(chǎn)可以包括顯示信息的元數(shù)據(jù)和訪問(wèn)數(shù)據(jù)物化的鏈接。它甚至提供了將相關(guān)信息發(fā)送到不同渠道的能力,例如在S3中的報(bào)告中的松弛、事件或持久性。
這些功能允許工程師擁有自我自主權(quán),而不會(huì)將編排器視為一個(gè)黑盒。
元數(shù)據(jù)
Dagster允許在所有級(jí)別添加元信息,最重要的是,數(shù)據(jù)操作或任何其他操作用戶都可以訪問(wèn)它。擁有元數(shù)據(jù)是非常重要的,但它也必須是可用的,這就是Dagster發(fā)揮重要作用的地方。
操作團(tuán)隊(duì)有較少的過(guò)程環(huán)境和更多的認(rèn)知變化,因?yàn)樗麄儾粎⑴c開(kāi)發(fā),但同時(shí)管理多個(gè)生產(chǎn)流。一旦數(shù)據(jù)工作流成為業(yè)務(wù)關(guān)鍵任務(wù)的一部分,就必須提供這些元信息。
關(guān)鍵業(yè)務(wù)流程的Dagster
Dagster允許擁有一個(gè)面向數(shù)據(jù)處理的工具,可以在關(guān)鍵路徑上將其集成到業(yè)務(wù)流程中,以提供最大的業(yè)務(wù)價(jià)值。考慮一下從倉(cāng)庫(kù)到商店或其他渠道(如合作伙伴或電子商務(wù))的庫(kù)存補(bǔ)充零售過(guò)程。這是一個(gè)從配送倉(cāng)庫(kù)到商店補(bǔ)充物品的過(guò)程,目標(biāo)是在正確的地方以最優(yōu)的數(shù)量提供正確的產(chǎn)品,以滿足客戶的需求。
- 通過(guò)確保所有渠道都有產(chǎn)品,避免缺貨,改善客戶體驗(yàn)。
- 通過(guò)避免補(bǔ)充銷售概率低的產(chǎn)品來(lái)提高盈利能力。
- 這是一個(gè)業(yè)務(wù)流程,其中分析和機(jī)器學(xué)習(xí)模型有很多影響??梢詫⑵涠x為數(shù)據(jù)驅(qū)動(dòng)的業(yè)務(wù)流程。
庫(kù)存補(bǔ)充是一個(gè)復(fù)雜的業(yè)務(wù)關(guān)鍵操作過(guò)程,以需求預(yù)測(cè)和庫(kù)存清單為主要支柱:
- 需求預(yù)測(cè)需要一個(gè)先進(jìn)的機(jī)器學(xué)習(xí)過(guò)程,基于歷史數(shù)據(jù)來(lái)預(yù)測(cè)未來(lái)需求。
- 庫(kù)存清單提供了每個(gè)地點(diǎn)(如商店、倉(cāng)庫(kù)、分銷商等)的可用庫(kù)存數(shù)量。
- 銷售根據(jù)定價(jià)、降價(jià)等指標(biāo)提供有關(guān)產(chǎn)品需求的信息。
- 這些流程可以每周、每天或一天多次啟動(dòng),這取決于是否從中央倉(cāng)庫(kù)或例如靠近實(shí)體店的倉(cāng)庫(kù)進(jìn)行補(bǔ)貨。
這個(gè)流程需要一些近乎實(shí)時(shí)更新的信息,但它是以批處理或微批處理模式運(yùn)行的數(shù)據(jù)過(guò)程。Dagster是第一個(gè)真正支持在操作層從純操作角度交付業(yè)務(wù)價(jià)值的數(shù)據(jù)編排器。
Dagster的常用案例
Dagster中還有其他更傳統(tǒng)的用例,例如:
- 具有不同來(lái)源的數(shù)據(jù)管道,并作為分析系統(tǒng)(如數(shù)據(jù)倉(cāng)庫(kù)或數(shù)據(jù)湖)的目的地。
- 機(jī)器學(xué)習(xí)訓(xùn)練模型。
- 整合機(jī)器學(xué)習(xí)模型的分析過(guò)程。
當(dāng)然,Dagster代表了上述相同標(biāo)準(zhǔn)的這類過(guò)程的演變。
結(jié)論
預(yù)計(jì)未來(lái)幾年將是數(shù)據(jù)世界令人興奮的幾年,并且正在不斷發(fā)展,特別是在工具的構(gòu)建方面,這些工具能夠?qū)I(yè)務(wù)產(chǎn)生更真實(shí)、更緊密的影響。Dagster是朝著這個(gè)方向邁出的又一步。
而面臨的挑戰(zhàn)不是新的數(shù)據(jù)架構(gòu)或復(fù)雜的分析系統(tǒng),挑戰(zhàn)在于盡快提供真正的業(yè)務(wù)價(jià)值。風(fēng)險(xiǎn)在于認(rèn)為Dagster這樣的工具和數(shù)據(jù)網(wǎng)格這樣的架構(gòu)會(huì)給自己帶來(lái)價(jià)值。這些工具提供了多年前所沒(méi)有的功能,并允許設(shè)計(jì)滿足客戶需求的功能。
人們需要從所犯的錯(cuò)誤中吸取教訓(xùn),運(yùn)用持續(xù)改進(jìn)和批判性思維的方法來(lái)做得更好。Dagster是一個(gè)很好的工具和偉大的創(chuàng)新,就像Dbt、Apache Kafka、DataHub Data Catalog等其他工具一樣,但如果相信一個(gè)工具可以解決所有的需求,那么將構(gòu)建新一代的龐然大物。
Dagster雖然是一個(gè)很好的產(chǎn)品,但它只是補(bǔ)充解決方案以增加價(jià)值的另一部分。
原文標(biāo)題:Dagster: A New Data Orchestrator To Bring Data Closer to Business Value,作者:Miguel Garcia