今天也是在日本旅遊與鐵人競賽當中交錯,實在是十分有趣的經驗!今天看到日本許多有設計感的建築,覺得令人歎為觀止,我想除了設計的靈感之外,也需要強大的工程技術能力來支撐。在建立資訊服務的過程也是有點類似的概念吧,除了需要有非常棒的功能,在底層以及後端的效能都必須給力,才能讓使用者能夠有極致的體驗,希望身位工程師的我們能共勉之!(附上安藤忠雄所設計表參道之丘的照片)
昨天介紹完 Airflow 的特性和功能之後,今天我們進一步的來介紹 Airflow 的基本開發概念。
在之前我們有提到,Airflow 的設計原則是 "Workflow as Code",可想而知,在 Airflow 中,所有 Data pipeline 想要實作的行為順序等操作,都可以透過程式碼進行定義。在 Airflow 中使用的是 Python 程式語言實作 Data pipeline,並使用 DAG 的概念來建立 Data pipeline 的相關工作流程,DAG 的全名是 Directed Acyclic Graph,詳細的 DAG 概念我們會在下一節說明。實際上的做法是將 Data pipeline 的任務及任務之間的執行關係定義成 DAG 文件,而 Airflow 會解析識別 DAG 文件結構進行管理和執行。DAG 可以按照排定的時間執行,也可以透過外部的觸發執行。在過去,一些同樣是以 DAG 描述 Data pipeline 的框架會配置多個文件和系統來創建 DAG ,然而在 Airflow 中,通常 DAG 可以簡單地將程式碼定義在一個 Python 檔案中。這使得開發者能夠更方便地進行開發及管理。
使用 Python 程式碼定義 Data pipeline 的優點,這種方式可以提供很大的靈活性。可以透過程式的重複的建立類似的結構,也可以透過程式碼動態的生成 Data pipeline 的任務。
上一部份我們講到DAG 那什麼是DAG呢?我們帶來進一步了解。DAG 的全名是 -- Directed Acyclic Graph,中文通常叫做有向無環圖。廣泛被運用在許多的科學和科技運用,其中包括範圍從生物學以及電腦科學等領域。
在數學中,有向無環圖(DAG)是一個沒有循環的的有向圖。以白話文來說,就是他是一個有方向性的圖,並且在這圖中不會發生循環。進一步解釋的話,有向無環圖(DAG)是由節點和邊組成,一個節點經過邊到達另一個節點,並且是為有向性的。而在有向無環圖(DAG)中不存在循環,意思就是從一個節點出發,不論經過任何途徑,皆無法回到原本出發的節點。若有一個途徑是會回到原本的節點的話,那會發生循環的情形,而只要有循環的情形則會無限重複,導致無限循環。因為有不會循環的特性,有向無環圖(DAG)不會發生無限循環的狀況。
我們來看看一些 Airflow DAG 的範例可以更理解 Airflow 以及 DAG 的概念。下圖是一個簡單的 ETL 範例,這個Airflow DAG 由三個任務組成,分別是 Extract、Transform、以及 Load。在 Airflow DAG 中定義每個任務所要執行的事物,Airflow 則會建立相關工作流程,並將執行狀態以下圖的方式進行呈現。
同一個任務結束後也可以同時觸發多個後續的任務(下圖)。
也可以進行多個複雜的工作以及加入不同的條件(下圖),但是無論任務有多少有多複雜,都要遵行 DAG 的基本原則,不能發生有循環的途徑。
今天就介紹到這邊了,明天來帶大家開始架設 Airflow 環境!