翰林教育科技技術長 林右翔 (攝影/洪政偉)

那一年,疫情突然進入三級警戒時,全臺學校緊急改成遠距教學,連學生考試都改在家裡線上進行,各種數位教育平臺、視訊教學用量大暴增,主打國中小、高中線上學習、測驗的翰林教育科技(以下簡稱翰林教科)也不例外。

考試開始!許多學校,用早自習的小考,展開一天的課程,分散各地的學生,紛紛打開線上考卷,測驗平臺得撐住瞬間湧入的數十萬人次流量,系統不能卡,每一題的答案都不能漏掉,這是翰林教科IT在疫情的日常。

為了因應這波緊急線上考試需求,翰林教科不到一周時間,開發出一款不怕爆量的線上測驗服務,疫情期間,每天處理的線上測驗卷經常超過30萬張,因為採取逐題回傳的設計,後端系統一天處理的前端請求量高達上百萬次,線上測驗服務都能如常運作。這個快速開發的IT應變能力,是翰林教科十多年來,不斷追求新技術練兵的累積。

早在2010年,不少企業還在摸索公雲是什麼,翰林教科就大膽採用公雲,而非自建機房。2014年,Docker問世不到一年,還在高速發展中,翰林教育科技技術長林右翔就決定導入容器技術,趁機將單體式系統拆解成微服務架構,甚至自己開發了一套類似Kubernetes的容器調度系統,來管理正式環境上的大量容器,當時K8s還是一個剛起步的開源專案。

為何一次又一次的擁抱最新,甚至是才剛問世的技術?他認為,公司正處於成長前期,尚未出現需要認真守住的商業模式,所以,「我們投資在彈性,讓每個專案都有技術選擇自由,目標是在未來把握各種機會。」一路上,翰林教科不斷強化技術架構的彈性,時至今日,團隊開發環境沒有過多限制,「工程師開發新專案時,可以自行決定採用的語言和框架。」林右翔說。保持彈性,是他的堅持。

2014年就採用Docker,甚至在K8s問世前自建容器調度工具

翰林教科來自一家老字號出版社的轉型成果。創立超過60年的翰林出版社,在2010年成立一個新部門,數位部專案學習組,負責將既有產品整合、強化為多功能的數位產品,這個團隊後來獨立成了一家子公司,也就是翰林教育科技。林右翔是一開始就加入這個團隊的元老級成員。

2010年,三大公雲問世沒幾年,臺灣許多企業對新興的雲端技術仍有不少戒心,但,林右翔很快看到了公雲的潛力。自建機房成本太高,以量計價的雲端服務,能降低許多基礎設施成本,非常適合剛起步的創新部門。在高層支持下,翰林教育科技,很快就將服務部署到公雲,打下了後來快速跟進雲原生技術的重要基底。

2013年,Docker隔空出世,林右翔和團隊第一時間就看上這項新技術。他回憶,當時正處業務開發階段,快速迭代、測試不同版本產品是團隊首要目標。Docker的快速封裝能力,正好滿足他們的需求。並且,Docker可以讓多個容器化應用共用同一臺主機,有助於降低成本,更讓林右翔躍躍欲試。隔年Docker釋出正式版後,翰林教科也開始將這項新興技術落地到產品環境上。

這個技術決策,不僅開啟了翰林教科的雲原生之路,也讓技術架構慢慢走向彈性化。不過,實際挑戰仍在後頭。將容器化技術運用在正式環境後,林右翔和團隊漸漸將既有單體式架構轉成微服務架構。

起初,林右翔按照功能數量來切分,最多五個對外功能就要獨立成一隻獨立模組來設計微服務,但這個拆分作法過細,反而增加了不少維運困擾。例如,當某個頁面出錯,工程師無法快速判斷錯誤根源,得花時間查找資料,才能確認從哪個模組進行修復。後來,林右翔改以業務邏輯作為主要拆分依據,例如,將會員登入、註冊、忘記密碼和會員資料修改等功能整合為獨立模組,來減少複雜度。

不過,開發這些模組的程式語言不只一種,測試和部署的問題慢慢浮現。「工程師改寫不同程式的語言不難,難的是無法確定是否改對。」林右翔解釋,採用微服務架構最大挑戰是,無法進行有效測試和部署,直到後來,導入CI/CD,才解決了這個問題。林右翔要求每個模組專案都要設置CI/CD,「這是對所有專案的唯一要求。」如此一來,能降低不同開發語言維護難度,讓後續拆分服務時,更不受維運人力資源限制。

除了模組所用技術的差異,重要業務邏輯的模組規模不斷變大,也讓團隊十分困擾。林右翔坦言,團隊曾多次拆分過於龐大的模組,以維持技術架構彈性和可維護性。為了確保每次拆分能達到最佳效果,林右翔訂立了服務拆分評估機制。他表示,當工程師發現特定模組過於龐大、邏輯錯綜複雜,難以在同個模組中新增功能,「這就是一個徵兆。」另外,他們以單人維運單一模組作為評斷依據,當維運單一模組的工作量大於個人工程師負荷量,例如,工程師修改一個Bug所需時間過長,就需要考慮進一步拆分模組。

在拆解服務之際,為了快速更版應用程式和服務,林右翔和團隊也自行打造了一套容器調度工具。他們以RancherOS作為容器作業系統,並以Consul作為服務發現機制,外加自建指令集、腳本來建立容器調度機制,能自動偵測服務健康狀態,並且動態重啟故障服務,快速進行版本更新和退版。直到後來,Kubernetes專案逐漸成熟之後,翰林教科才改用K8s來取代自建的容器調度工具。

不過,當時K8s尚在發展期,版本迭代速度快,連帶周邊開發工具也快速迭代,翰林教科團隊不得不屢次更版,徒增不少維運工作。一直到,GKE服務在臺灣上線,團隊快速將部分服務從AWS遷移至GCP臺灣機房,交給雲端供應商負責維運,卸下了維運自建K8s的重擔。回想這段過程,林右翔忍不住感嘆道,「這是我碰過數一數二難的維運任務!」

2016年就運用無伺服器服務解決爆量問題

一路上使用雲原生技術,讓林右翔印象深刻的並不是每一次挑戰,而是雲端技術快速產品化的現象,一項複雜的雲端技術,沒多久就會變成一款容易上手的雲端服務。後來的採用者,只需付出低成本,就能解決過去耗時、耗力又耗費的任務。無伺服器服務就是其中一項例子。

翰林教科剛起步時,曾歷經一次重大業務策略轉變,從B2C,轉向以B2B為主商業模式,改鎖定補習班、學校作為目標客群。這個策略轉變,帶來了不少商機,但也帶來了高併發流量的挑戰。例如,一到早自習時段,七點半鐘聲一響,高達數十萬名學生可能在同一秒進行登入,就是最典型的情況。

當AWS推出無伺服器架構服務,翰林教科意識到這項服務能有效緩解高併發流量問題。一方面,可以把基礎架構的維運交給雲端供應商處理,讓開發團隊更專注在精進、優化軟體架構,另一方面能以相對低的成本,提供穩定性更高的服務。

2015年,翰林教科快速實驗無伺服器架構服務後便正式採用。不過,早期無伺服器架構存在不少限制,讓他們吃盡苦頭。

林右翔解釋, 早期的無伺服器服務,水平擴張速度有限,無法跟上快速湧進的爆量需求。因此,針對早自習考試這類定時性的爆量任務,翰林教科額外設置處理機制,在表定上課時間前十分鐘,預先傳送大量請求到無伺服器服務,提前擴張用量的規模。

當時的無伺服器服務,還有另一項限制是,執行時間最多90秒。可是,當教師從龐大題庫選好題目,準備匯出考卷時,常因執行時間過長而中斷服務的連線。翰林教科後來採用無伺服器運算引擎調度Fargate調度VM來部署容器化的無伺服器服務,執行耗時的任林右翔解釋,匯出考卷屬高CPU密集的運算工作,當CPU使用率超過八成,無伺服器服務就會自動啟動新VM。由於匯出考卷不需要即時回應,啟動額外VM反而造成資源浪費。針對這類瞬發量大但不須即時回應的任務,翰林教科後來在無伺服器容器部署服務前,設置監控機制,監控待處理的請求數量,自己動態調整需啟用的運算資源,避免浪費。

 

攝影/洪政偉

運用生成式AI生成初版程式碼,再讓初階工程師與工具來回修正

不只持續完善基礎設施的技術架構,林右翔也持續精進所用的軟體技術架構,採用更新穎的技術作法。例如,2016年,翰林教科就棄用了伺服器端渲染技術(Server Side Render,簡稱SSR),採用前後端分離架構,完全透過Web API來產生前端的網頁。並且,為了降低成本,翰林教科在持續採用Java的條件下,導入適合K8s的Java框架Quarkus,提升運作在JVM的Pod啟動速度,同時降低記憶體使用量。

這兩年爆紅的生成式AI,自然也成了他關注的重點。林右翔認為,若能善用LLM開發框架Langchain,有望打造出可以動態產生、動態執行程式碼的工具。如同一個自動程式編輯器,能根據輸入的任務自動決定如何調用相關 API 來取得資料,並給出回應。他們正在實驗這樣的新興GAI開發框架。

不只如此,翰林教科也嘗試用生成式AI來改變軟體開發的流程。林右翔表示,過往的軟體開發分工,資深工程師設計專案架構,而由初階工程師負責實作出程式碼,最後,再由資深工程師進行檢核、修正。他們改用生成式AI實作出程式碼的第一個版本,由初階工程師取代資深工程師,來進行檢核,負責修正這些自動生成的程式碼,初階工程師再反覆利用GAI開發工具,來回修正、查錯來完成開發任務。

這一路實作,也改變了林右翔對生成式AI的看法。起初,他認為,生成式AI可能會排擠了初階工程師工作,如今他才意識到,受影響的是中高階工程師。

他解釋,生成式AI開發輔助工具的誕生,讓初階工程師在職涯初期,就能接受到中高階工程師的職業訓練,「未來,初階工程師會用更短的時間,勝任中高階工程師的職業水平。」

持續跟進新興技術,不怕快速迭代的維運挑戰

從大膽採用雲端原生技術,到快速跟進生成式AI,林右翔經歷不少次快速迭代衍生的挑戰,直到新產品推出,才解決過去的困擾。看似做了不少白工,但林右翔認為,與其等待,不如先自己出手,才能在強大商機出現時快速掌握。

一次又一次學習新興技術的迭代過程,讓翰林教育科技鍛鍊出一股勇於創新的心態。「這些經驗讓我的心臟越來越大顆。」林右翔表示:「只要妥善規畫,哪怕得多花一些時間,終究能撐過去。」超過十多年的鍛造,林右翔和團隊越挫越勇,養出不畏創新的技術力。

 CTO小檔案 

翰林教育科技技術長 林右翔

學歷:致理科大財金系

經歷:畢業後至證券業工作,因接觸程式交易而對軟體開發產生興趣。初期偏好開發遊戲和前端應用,投入許多時間實驗Flash,並在相關論壇上發表自建遊戲。因緣際會被軟體新創公司找上,開始從事IT工作,而後加入翰林出版成立的新部門,並在新部門獨立為翰林旗下子公司後擔任翰林教育科技技術長。

 公司檔案 

翰林教育科技

●地址:新北市中和區建一路136號8樓

●成立時間:2017年(前身為翰林出版在2010年成立的數位部專案學習組,於2017年獨立為翰林出版子公司翰林教育科技)

●主要業務:國小、國中、高中線上課程平臺

●員工數:約70人

●董事長:陳威任

●資訊部門名稱:工程部

●資訊部門主管職稱:技術長

●資訊部門主管姓名:林右翔

●資訊部門人數:約15人

 IT大事記 

●2010年:翰林出版成立數位部專案學習組,從公雲上開始建立數位教育產品服務。

●2014年:開始在內部實驗、測試 Docker。推出B2B教學測驗分析平臺。

●2015年:正式導入Docker後開始將單體式架構轉為微服務架構,並自建類Kubernetes容器調度工具。開始採用無伺服器服務(AWS lambda)

●2016年:採用AWS Fargate來解決需要大量算力的非同步任務問題。完整提供小中高各領域線上課程。

●2017年:改採用開源Kubernetes,將維護工作交由開源社群,並在GCP臺灣機房支援GKE服務後,將部分服務遷移至GCP臺灣機房。

●2019年~2021年:B2B線上教學測驗分析平臺陸續推出多種服務,包括運用AI打造智能派卷服務,能自動指派學生曾答錯的同類型題目。

●2022年~2024年:B2C線上課程平臺陸續推出多種服務,包括學生個人檢測報告、解題論壇、學生客製化排課系統等。

熱門新聞

Advertisement