同事曾對我說走資訊這行真的是「學海無涯、不進則退」,仔細想想確實如他所言。不斷推陳出新的程式語言、底層框架與應用工具,難用一己之力盡悉底蘊。面對「生也有涯,知也無涯」的難題,我個人的心法是「有益則用、須用則厲學」,不要嘩眾取寵地學習當下流行的技術。「弱水三千,取一瓢飲」,導入新技術必須能確切改善、解決即有環境中的不便和問題,才值得投入有限的心力學習。
後端工程師肯定對crontab不陌生,這個易學易用的系統工具成就了不計其數的資訊系統。但在大數據/人工智慧應用百花齊放的今日,crontab就顯得左支右絀。因為大數據工程包括了資料匯入、預處理、執行演算法或訓練建模、匯出結果等工作流程,流程間的執行順序有依賴關係,延用crontab的「定時器」概念將難以達到精確、有效的排程控制。像是機器學習建模時間的不定性、大數據故障還原後的數據回補作業,都是維運人員心中的痛點。Apache Airflow這個後起之秀,正吸引著眾多數據工程師的目光,它也被AWS和GCP青睞而納入自家服務平台,未來將有希望成為業界公認的標準工具(如同crontab)。當然針對工作流程相依的問題,市面上少說有近十套「工作流程管理」工具,像在Hadoop軟體生態系中,就有知名的Azkaban和Oozie扮演這個角色,然而它們都只能用來協調MapReduce作業,不如Airflow那般可以驅動各種執行環境(Bash、Python、AWS、GCP)。
Airflow具有三大特色,首先是「設定即文件」,工程師利用可自我描述的Python程式碼,即可設定複雜的工作流程管線(Workflow pipeline),用來啟動各式各樣的程式。透過Airflow附帶的Web管理介面,能一目瞭然地看到排程啟動時間、工作流程間的相依性、執行後的歷史記錄等重要資訊。其次是「排程相依」,這正是導入工作流程管理工具的主要目的。讓失敗的排程自己發出訊號,中止與它相關的後續排程,避免浪費資源執行無謂的運算。更可貴的是,透過將依存關係定義清楚的工作流程,維運工程師可以輕鬆地用「一鍵重跑」來回補遺失的數據資料,顯著減少錯誤復原中工程師需要的處理工時。最後是「跨主機協作」,不論是大數據或是人工智慧,免不了必須整合不同的程式執行環境。可能是先呼叫本地程式匯入資料到HDFS,再啟動Hadoop進行資料預處理,最後才丟入Spark進行數據建模。傳統的crontab,面對這種的跨主機情境,只能對各個程式多抓冗餘的Buffer來進行時間設定,避免前支程式尚未跑完,後一支程式已經啟動。透過Airflow的分散佈署,相依的工作流程可以跨主機連動,從根本上解決協作問題,也縮短整組排程的總完成時間(因為不用抓Buffer)。
Apache絕對是開源碼世界中的金字招牌,許多你覺得棘手的IT病徵,或許能在Apache開源軟體中找到藥方。然而自學Apache開源項目的過程可不是清新小旅行,殘缺不全的官方文件、結構零散的章節、見樹不見林的參數說明,都足以讓人一頭霧水澆熄學習的熱情。還好Manning出版社所出的Apache系列叢書(也被稱為人像書),常會挑選被受關注的開源項目,邀請專家執筆撰寫專書。這些所費不貲的英文原文書,就像汪洋中的明燈般,適時地對迷航在新技術的工程師們伸出援手。由淺入深漸近式引導、詳盡且聚焦的範例程式、全面性討論該技術的相關議題(例如:如何測試、維運)。Manning長久以來穩定的高品質、針對開源社群推出專書的用心,讓它成為我最仰賴的新技術自學導師。雖然閱讀原文書比較費力,但每次總能獲得扎實有用的新技能,活用在後續參與的專案中。這本「Data Pipelines with Apache Airflow」確實讓我的大數據實作提升到更棒的新境界,真心推薦給每位後端工程師同業。






