2021年3月28日 星期日

Data Pipelines with Apache Airflow

 

同事曾對我說走資訊這行真的是「學海無涯、不進則退」,仔細想想確實如他所言。不斷推陳出新的程式語言、底層框架與應用工具,難用一己之力盡悉底蘊。面對「生也有涯,知也無涯」的難題,我個人的心法是「有益則用、須用則厲學」,不要嘩眾取寵地學習當下流行的技術。「弱水三千,取一瓢飲」,導入新技術必須能確切改善、解決即有環境中的不便和問題,才值得投入有限的心力學習。

後端工程師肯定對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」確實讓我的大數據實作提升到更棒的新境界,真心推薦給每位後端工程師同業。


2021年3月27日 星期六

初心

 

即便沒去過在大直美麗華附近的米其林二星餐廳RAW,親眼看到這位傳奇大廚,也應該在電視廣告上見過江振誠代言抗敏感牙膏,那個剛毅自信的神情。「初心」是他親自執筆的自傳型散文,講述他從求學工讀、執業數年又遠赴法國學藝,出師後征戰各大頂級西餐廳的心路歷程。

他的故事再次印證了某一類社會賢達的成功法門,包括:良好的家庭教養、青少年期就立定志向、高標準的自我要求、好的機遇與貴人提攜等等。但「初心」也不是本老掉牙的勵志小品,在陽光積極格言名句(120%的努力、機會是給準備好的人)之外,隱約地感覺江振誠是用自己的故事在分享一位好廚師應該如何看待食物和料理。對從事餐飲工作的讀者來說,肯定有更多的心得反芻。

書中末篇,江振誠介紹他知名的料理心法「八角哲學」,包括純淨Pure、鹽Salt、技藝Artisan、質感Texture、南方South、獨特Unique、記憶Memory、風土Terroir,這是他烹調的核心精神,開枝散葉在每一套端出的餐點上。從字裡行間可以察覺,江振誠經過多年的歷練與省思,言談舉止不再像廚師,倒像是位廚藝家。對食材、料理等「技」的部份不再多著墨,對人與食的關係、餐飲如何打動人心等「心」的部份,才是他在乎的命題。因此在江振誠的餐廳,沒有依尋套路或固定形式的定番菜單,有如漫畫「將太的壽司」描寫般,他的料理每次都是和食材對話,試圖呈現最佳的風味。如同他說的,將食物搭配故事,才能讓客人留下鮮明的記憶,他的餐廳想提供給客人印象深刻的餐飲體驗,是針對頂級消費客群打造的用餐情境,成為餐飲市場中的藍海。

和中餐館不同,法式餐廳的營運模式多是主廚兼老闆。對經營者來說,除了廚藝更需要的是經營管理的手腕和快速反應市場的商業操作。江振誠憑藉驚人的技藝與敏銳的眼光,打入高端餐飲市場取得強有力的利基點,足以做為今日餐飲從業者的典範。可惜的是,他的無菜單料理沒有標準化的食譜能傳承,無法成為流傳千古的精典菜色(例如:牧羊人派、羅宋湯)。對江振誠這個人、他的料理有興趣的朋友,即使訂不到RAW餐廳開開洋葷,也能買本「初心」來略懂略懂。好「八角」,不讀嗎?

 

2021年3月21日 星期日

終結失業,還是窮忙一場?:擺脫了打卡人生,我們為何仍感焦慮,還得承擔更多風險

 

單純是個人的好惡,我討厭使用外送平台,一來徒增花費(運費),二來飯來張口的日子,對健康和體重都沒好處。但外出時,看到車水馬龍中奔馳的外送員,證明消費者可是敞開雙手盡情擁抱這貼心的服務,歐吉桑我的想法是跟不上時代啦。相對於大眾對「人力派遺」的負面印象,「斜槓」和「零工經濟」則被時下青年族群廣泛認同,同樣都是非典型就業,社會觀感卻是天壤之別。

「終結失業,還是窮忙一場?」一書的作者,以橫跨近十年的時光探訪不同個案,包括零工經濟圈中的經營者和接案工作者。相當然耳,即便媒合平台換成網路,經濟的供需法則依舊顛撲不破。即時、跨國界的資訊流,加劇拉開擁有專業技能與平庸事務兩種工作者之間的薪酬,電話客服可以外包到遠在天邊的印度小村莊,不受法定最低工資的保障,講師教練、餐飲外燴和木工水電卻能活用網路擴展客源,有機會從受僱者變成自僱者,不用侷限在組織的敘薪天花板。書中還提及有趣的小資訊,原來Amazon和Google等科技巨擘的人工智慧成就背後,是由大量低薪外包的接案人力撐起。不論是圖片貼標還是語音判識等高端應用,都得感謝這群被大眾忽視的零工接案者。

書中談到許多新創公司以新經濟的名義,理直氣壯地在剝削勞工權益,而在政府勞工部門介入指摘時,反咬政府是在遏止創新、妨礙科技發展。作者以Uber公司為實例,讓讀者看到問題的矛盾點。Uber對公眾宣稱它與所有司機都是承攬關係,司機執業時發生的意外、過失與Uber無關,另一方面卻藉由調整派工與計酬公式(演算法),間接地要求合作司機在特定時間點必須出勤,並且維持基本的服務工時。形式上,司機是自由工作者,事實上,他們根本受制於Uber一家公司,提供全職勞務,卻失去應有的勞健保、退休金等合法勞工權益。消費者看似在零工經濟中獲得更物超所值的服務,背後卻是犧牲社會上另一群人的利益,像是「鋼之鍊金術師」所說的「等價交換」,只是你我不曾用心察覺。

在美國,像Uber一樣把核心業務外包,將自己定位成牽線平台的新創公司如雨後春荀般成立。營業項目包山包海,舉凡食衣住行都有創業家爭先恐後地插旗。書中挑選的觀察對象是一家經營辨公室清潔的新創公司,起初也是以零工經濟為號召,吸引投資人的目光。主打能提供給簽約客戶低價高品質的清潔服務,而低價的原因就是利用勞務委外承攬的策略,把清潔作業派工給按件計酬的零工從業者。後來老闆發現外包人員無法穩定地執行優質的服務(接案者來來去去),拉低客戶續約的意願,不得以改變自己的營運模式,開始聘請正職清潔工,這項決定後來證明是明智之舉,業績隨之逐步成長,變成一家小有名氣的零工經濟新創。不過我跳TONE一想,這不就是間腳踏實地經營的清潔服務公司,那有零工經濟?

對於無法找到正職和只有零碎時間能工作的人,零工經濟確實提供一條獲取收入的新管道。但整體而言,參與這種非典型就業的勞工,多數都只能賺取低於基本工資的報酬。換言之,透過零工經濟平台接案的人,多半身兼多職,有其它收入來源來維持生計。報章媒體和矽谷創業家當然不會自打嘴巴提及這些不美好,而隨著社會的變遷,我們可能是用投資人、經營團隊或接案者等不同身份直接、間接與零工經濟打交道,閱讀「終結失業,還是窮忙一場?」能替我們打造更全方位的視野,面對這新世代的勞僱關係。

 

2021年3月14日 星期日

鹿男

 

對日本小說的涉略不多,硬要我說出個知名作家,應該是東野圭吾。理由很簡單,去逛實體書店時,小說類型的展示台上多半有他的作品。現代日本小說有著文化雷同好理解、對話敘事淺白、情節鋪陳有層次等等優點,翻閱後時常讓人欲罷不能,想一口氣看到最後,讓謎底揭曉。但這種「一次性消費」的書,留下的印象太深刻,基本上很難再重讀,不太經濟實惠,因此反而是我不常入手的類型。

「鹿男」是我朋友書架上陳封的舊書,恰好前陣子社會科學的書看太多有點膩,索性借來這小說來「味變(大胃王用語)」一下。以奈良為故事展開的主場景,才沒讀幾頁就可以感受到作者特別著重在地理位置的描敘,也是這本小說最大的特色。奈良市和市郊中有名的觀光景點,在劇情的推進下被踩點,讀者因此跟隨著主人翁的腳步遊歷這古城。點綴著為故事核心的神話、上古文物,還有生動熱血的劍道競技,「鹿男」成功地融合旅遊、運動競技、奇幻等元素,呈現出一部精彩而輕快(沒死人)的推理小說。

書中巧妙地結合日本傳說和神道文化,平實自然地逐漸帶出超自然的奇幻情節。在萬城目學筆下的日本神明、擁有神秘力量的神獸,就像日本都市中無處不在的鬱鬱蒼蒼,一點都不讓人畏懼害怕,反倒會有一種「啊~神明應該就是這樣吧」的心領神會。如果有機會再度重遊奈良,我肯定會帶著「鹿男」一同啟程。


2021年3月7日 星期日

打火哥的30堂烈焰求生課:第一線熱血消防員親授關鍵保命絕招,破解火場迷思

 

曾參加過公司例行舉辨的消防/急救訓練課程,對講師三令五申告知的火場求生細節也忘得差不多了。知道水火無情,防災知識多多益善,因此看到有這本「打火哥的30堂烈焰求生課」,當然得拜讀一番。

果不其然,書中以30個主題介紹重要且攸關性命的火災現場逃生竅門。令人吃驚的是裡面許多的要點,和你我的印象截然不同。諸如,面對著熊熊烈火,千萬別用水澆。水的沸點是一百度,火焰的溫度早已高達幾百上千度,水一澆下去,馬上變成足以燙傷你的可怕蒸氣,結果火沒救到先受重傷。更別說如果是因為油鍋起火或是汽油爆炸等火災,水的比重較低,蒸發後反而把油氣噴濺更遠,擴大災情。

而在大樓和公寓等住家遇到火警時,一律先往下逃生,因為火災發生時最恐佈的是高溫、劇毒的濃煙,而熱空氣和煙是往上飄,所以越往上跑風險越大。但逃生的前題是現場尚未起黑煙,如果一開門就遇到濃密的黑煙,第一時間反而應該關上大門以阻擋毒煙,並躲在安全的位置等候救援。

安全的地點是指四周的牆面是抗高溫的鋼筋混凝土,浴室用的塑膠門、頂樓加蓋的鐵皮,都不是能久留的地方,要馬上離開。坊間流傳的溼毛巾摀住口鼻再逃生,是造成不必要傷亡的罪魁禍首。首先溼毛巾上的些許水份在高溫的環境肯定烘乾,其次毛巾的孔隙也無法擋下濃煙,更致命的是,火災災情會瞬間擴大,弄溼毛巾的時間直接用來逃生,才是正確作法。逃離火場,如果尚未看到黑煙就快速離開,已經發現黑煙,要採用近乎貼近地面的低姿勢才能呼吸到地板殘留的空氣,像爬行一般離開。

「打火哥的30堂烈焰求生課」有著易讀的白話筆風,條列清楚、專業精準的說法,是本火警防災知識的聖經。身處現代叢林的你我,為自己和家人的安全,或許能居安思危買來翻閱、學習。


2021年3月3日 星期三

[觀點]執行壓力測試、設計高承載量系統時,想想廚房的流理台

 


當對外的系統要正式發布前,特別是面向群眾的網站服務,都會進行系統壓力測試(簡稱壓測)。同時,壓測也是設計一個高承載量系統時,比較常被採用的評量工具。

使用壓測工具時,會遇到兩個核心參數,「執行緒數」和「持續時間」。任務的過程就是不斷地排列組合這兩個數值,產生出對目標系統的大量請求,以找出系統總承載量(壓力測試)或系統瓶頸(優化系統)。

在思考這兩個參數的意義時,我們可以假借生活中常見的東西來理解它們。想想流理台中的水管,像藍色的圖形一樣,它有著「口徑」和「管深」,兩者都實際影響著流理台整體可以承受的總水量。比對壓測工具(綠色圖形),「口徑」就是「執行緒數」,「管深」如同「持續時間」,兩者相乘出來的數值,正是工具能製造出來的總請求量。

在設計高承載量的網站服務時,一樣可以延用管線思維,只是描述的對象不同。如紅色圖形呈現的,「入口口徑」是「WEB主機的總承載量」,「出口口徑」是「資料庫主機承載量」,「水管長度」則是「系統資訊流中整體的緩衝容量」。要打造高承載的資訊系統,就像要把水龍頭開更大,而不讓廚房淹水。此時單純把入口口徑(WEB主機數)加大是沒用的。常見的作法,要嘛不是向上擴充,升級成更高等級的資料庫(加大出口口徑),不然就是導入更多緩衝機制,例如Queue/非同步處理(加長水管長度)。

設計、壓測資訊系統時,可別忘了廚房的流理台呦~



2021年3月1日 星期一

對決病毒最前線:從流感、炭疽病、SARS到伊波拉,資深防疫專家對抗致命傳染病的全球大冒險

從2019年起開始爆發的新冠/武漢肺炎,兩年了,至今尚未落幕,全球因病死亡人數也早就破百萬。我們正經歷和百年前西班牙流感相同規模的疫情,它徹底從政治、經濟層面改變了全世界。與COVID-19感染/死亡人數相比,曾經2003年危害全球的SARS疫情根本微不足道,SARS總計全球死亡人數近8百人,連COVID-19的零頭都不到。也因為疫情嚴峻,台灣人關注著防疫指揮中心的一舉一動,指揮官陳時中也變成家喻戶曉的名人。公共衛生領域突然成為學子們感興趣的熱門科系,病毒、抗疫相關資訊也變得洛陽紙貴。

「對決病毒最前線」是由曾任職於美國疾病管制中心(CDC)的阿里.可汗醫師所著,記錄了他與各種可怕、致命的疫病交手的事跡。相信世界衛生組織(WHO)的名稱已是婦孺皆知,認為它是極為專業、先進的防疫組織。事實上很多疫病調查和毒病分析的實際操作,WHO常向美國疾病管制中心求助。作者有如電影007的詹姆士龐德般橫跨各國,執行艱困任務的「疫調偵探」生涯,過半都是因為世衛組織需要美國疫管局協助不明病原體的追查,佐證了美國能成為世界強權背後的硬實力。

書中提及的病毒都大名鼎鼎,死亡率高的出血性漢他、因電影「危機總動員」而大為人知的伊波拉、生化恐佈攻擊的炭疽病。阿里.可汗平鋪直述地介紹它們的歷史、特色,延伸到防疫/公共衛生的議題,當然不會少了作者親自經歷的傳染事件始末。故事中讀者可以獲得有趣、廣泛的傳染病/防疫科普知識,這些資訊或許恰好替我們打造一道防火牆,用來阻擋那些未經查證的疫病假消息。

舉例而言,大部份致死率極高的病毒帶原者,都會指向嚙齒類、飛禽、蝙蝠和猿猴等物種。對野生動物無害的病毒,經過跨物種傳染,就能造成危害人類社群的傳染病,因此食用野味的陋習早該杜絕,在探索大自然時不要接近、觸摸野生動物,遠離動物糞便。另外,流行性感冒病毒基於它易變異、高傳染的特性,加上跨物種傳染途徑多(豬流感、雞流感),已經無法從人類社群中根除,它的子孫病毒一直在小範圍內傳播,只要天時、地利有利傳播就會一舉爆發,因此秋冬施打的流感疫苗,就是想阻絕病毒捲土重來的預防投藥。

在新冠疫情持續蔓延的當下,「對決病毒最前線」絕對是最能呼應2020~2021年時空的科普傑作。雖然書中太多的人名和(美國)地名影響我閱讀的流暢度,但精彩豐富的內容、淺顯權威的病疫知識,是居家辨公/自主健康管理時,能放在桌邊閒暇翻閱的讀物。