Skip to content

This is a infrastructure project run with Apache Airflow.

Notifications You must be signed in to change notification settings

eastmoon/infra-airflow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Airflow

Apache Airflow是用於數據工程管道的開源工作流管理平台。它於2014年10月在Airbnb開始,作為管理公司日益複雜的工作流程的解決方案。通過創建Airflow,Airbnb可以通過編程方式編寫和計劃其工作流程,並通過內置的Airflow用戶界面進行監控。

Apache Airflow wiki

Airflow 是一套用於開發、排程、監控批次處理工作流的開源軟體,其基於 Python 的延展框架令開發者可建置所需的工作流來串接各類技術與服務,監控面則基於 Web 介面來協助管理工作流狀態。

Airflow 的工作流是一套基於 Python 定義的工作流,稱為 Workflows as Code ( WaC ),其設計目的:

  • 動態化 ( Dynamic ):利用 Python 語言設計的工作流可以動態規劃流程,讓流程非固定階段與商業邏輯的規劃
  • 擴展性 ( Extensible ):Airflow 框架提供對各類技術服務提的操作元,任何 Airflow 的元件可輕易傳接服務至所需的流程環境
  • 靈活性 ( Flexible ):工作流運用 Jinja 模板來實踐流程參數化設計

架構

在 Airflow 中,工作流 ( Workflow ) 等同 DAG ( Directed Acyclic Graph ) ,其中包括數個個體工作單元 Tasks,DAG 負責描述 Tasks 間的依賴關係與執行順序,Tasks 則描述自身該做什麼,例如提取資料、分析數據等。

在 Airflow 安裝後,其服務包括一下單元:

  • Scheduler,主要負責觸發排程中的工作流與提交任務給執行者運行
  • Executor,負責任務的執行者,在預設中 Airflow 的執行是在 Scheduler 中,但在生產或產品環境中,多將任務交給 Worker 執行
  • Webserver,主要負責提供使用者介面來檢視、觸發與除錯 DAG 和 Tasks 的行為
  • DAG 目錄,DAG 檔案存放目錄以提供 Scheduler 與 Executor 讀取並執行
  • Metadata 資料庫,提供 Scheduler、Executor、Webserver 做狀態存儲

軟體架構示意圖

安裝與執行

參考 Installation 文件,安裝 Airflow 的必要環境是 Apache 與 Python,且安裝文件是基於 Linux 環境,若要運用於不同作業系統,則可考慮使用 Docker 映像檔 以服務方式啟動於作業系統。

docker pull apache/airflow
  • 啟動服務
docker run -it --rm apache/airflow airflow standalone

在 Docker 中,AIRFLOW_HOME 預設在 /opt/airflow 中,其中 DAG 目錄在 /opt/airflow/dags 而執行記錄在 /opt/airflow/logs

docker exec -ti <container name> airflow info

在文獻中,對於 Docker 的運用分為兩篇文獻,一篇是如上所述的 Docker 命令 的操作,適用於開發模式,另一篇為使用 Docker-Compose 建立分散式應用服務,建議使用於產品模式,其主要理由是建議將運算負責的 Executor、管理負責的 Scheduler、介面操作的 Webserver、工作觸法執行的 Triggerer、Metadata 資料庫、緩存服務全部改為獨立的服務容器並分開運作避免單一容器的效率降低與資安風險增加。

不過,對於 Docker-Compose 的設計,Executor、Scheduler、Webserver、Triggerer 實際都是 airflow 容器,以相同容器與設定區分開來運作,並在容器啟動時分別透過命令介面 airflow webserverairflow schedulerairflow celery workerairflow triggerer 來啟動容器對應的服務內容。

關於單體與分散式運作概念,可以參考以下文獻說明:

Airflow 元件通訊示意圖

Reference : How Apache Airflow Distributes Jobs on Celery workers

由上圖與文獻所述,Airflow 的啟動是需要透過命令介面執行不同命令來開啟相對應服務,在適用開發模式的單體容器 ( Standalone ),雖然使用 airflow standalone,但實際上內部仍是呼叫多個命令工作,而在產品模式的分散式結構中,則是各容器各自執行命令,在透過 Metadata 資料庫、Redis 緩存來進行 DAG 狀態改變,從而觸發各服務的運作。

基於前述,本專案在安裝與啟動設計也區分為二,並依據需要建立如下對應命令介面:

開發模式

airflow dev up
airflow dev down
airflow dev into

產品模式

airflow prd up
airflow prd down
airflow prd cli -c="airflow info"

產品模式使用的設定檔來源於官方文件並進行適度修改,例如關閉下載範例、調整目錄位置等。

設計

文獻

About

This is a infrastructure project run with Apache Airflow.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published