凱鈿全面轉用AWS Graviton執行個體,主機費用大幅降低達15%
臺灣知名的PDF閱讀和編輯器與電子簽署軟體服務供應商凱鈿行動科技(Kdan Mobile),透過轉換使用性價比更高的AWS Graviton執行個體,不只節省15%的主機費用,購入的運算資源還提高5%到10%
【圖説】凱鈿全面轉用AWS Graviton執行個體,主機費用大幅降低達15%
從臺南起家,凱鈿行動科技(Kdan Mobile)以其知名的PDF閱讀及編輯器與電子簽署軟體服務,證明了臺灣在軟體開發領域的活力與實力。接近15年的堅持與創新,讓他們在全球累積達到2億次下載量以及1,200萬會員,現在於全球更有6個服務據點。技術經理李南光指出,儘管市場上同類產品比比皆是,而凱鈿之所以能脫穎而出,部分原因在於他們是該領域的先行者。
凱鈿創立於2009年,搶先在手機應用程式普及之前,憑藉著直觀的用戶界面和功能,在北美市場快速崛起打響名號。除了進入文件數位化工具市場早,凱鈿更是早早布局雲端,實現資料同步、跨裝置協作,滿足專業用戶對於高效文件處理的需求。凱鈿在2011年就採用雲端原生設計思維,選擇AWS的Amazon Elastic Compute Cloud (Amazon EC2) 服務建立其微服務架構「其實第一版的微服務也不太微」凱鈿技術經理李南光笑著回憶說道。最初凱鈿在EC2上建立三大塊服務,處理所有雲端上的工作負載,隨著產品迭代與業務擴展,他們才逐漸細緻地拆分雲上微服務。
導入EKS實現容器管理、規模擴展高度自動化
近兩年,凱鈿進一步最佳化雲端部署,開始採用 Amazon Elastic Kubernetes Service (Amazon EKS)實現更為成熟的微服務架構,並且全面更換原本採用的x86架構的EC2執行個體,改使用由AWS自家設計,性價比更高的Arm架構Graviton執行個體。Kubernetes是一套廣受歡迎與支援的開源容器調度系統,能夠自動化部署、擴展和管理應用程式,而EKS為AWS所提供的全託管服務,使用戶可以簡單地執行Kubernetes應用程式,並自動化許多日常維護工作,像是更新和安全配置等,大幅降低用戶採用Kubernetes的門檻。凱鈿透過腳本配置EKS,使其可根據需求動態啟動必要的EC2執行個體,讓會員登入、檔案狀況或是交付給特定用戶執行電子簽署等微服務,可以在EKS平臺上穩定且高效地運作。
最初凱鈿上雲是向AWS直接租借EC2服務,雖然相較於自建機房,已經免去管理硬體的繁瑣,還能獲得雲端按需取用、高安全性等優勢,但是隨著業務規模擴大,凱鈿所使用的虛擬機器數量增加,這使得配置機器變得耗時又費力,李南光提到,光是要升級30臺虛擬機器的作業系統,需要逐一關閉逐一啟動機器,就花費了2個禮拜。
當業務持續發展,凱鈿開始需要用到40、50臺虛擬機器,每個微服務又各有不同的套件和相依性,手動逐一安裝配置變得不切實際。因應這項挑戰,凱鈿轉向微服務Docker化,透過建立映像檔實現更新自動化,如此工程師在更新機器時,就無須關注底層配置,只需要利用映像檔即可快速部署。不過,即便是以腳本自動部署,但時不時還是會遇到臨時狀況,需要工程師緊急手動重開機器。
為此,凱鈿決定導入EKS自動化虛擬機器配置,雖然前後花了一年的時間搬遷、測試,但現在凱鈿的微服務基礎設施完全交由EKS自動管理,EKS會自動監控Pod的健康狀態,隨時啟動新Pod來補充運算需求,更新也可由EKS完全處理。
應用程式容器化成轉換高性價比Graviton執行個體關鍵前置
如此不僅提高維運效率,也增加了系統的可擴展性和可靠性,同時,李南光也指出,導入EKS是他們後來可以簡單地把所有系統,輕鬆轉移到Graviton執行個體上的關鍵前置作業。
Graviton是由AWS自主設計的處理器,可在雲端運算提供最佳化的效能和能源效率,Graviton以Arm架構為基礎,與傳統的x86架構處理器相比,能夠在特定應用場景下,提供更好的性價比。
凱鈿應用程式容器化後,便與底層基礎設施解耦,因此無論是在傳統的x86架構,還是Arm架構的處理器上,只要Kubernetes支援這些環境,容器化應用程式皆能夠在各種硬體和作業系統環境中一致地運作。對凱鈿而言,這意味著不需要投入額外的資源,處理與Arm相關的基礎設施與硬體的支援度問題,大幅簡化技術轉移和升級過程。
不過,也是在因緣際會下,凱鈿才開始他們的Graviton轉移之路。最初是因為凱鈿購入了採用Arm架構處理器的筆電,工程師抱著實驗的心態,在本地端測試Arm架構。由於凱鈿所使用的程式語言Ruby、Nodejs、Golang、Elixir都支援Arm,因此大部分相依項目只要改採用Arm支援版本重新編譯,就可以轉移到Arm處理器上運作。
而少部分不支援Arm的第三方套件,通常是缺乏維護者許久沒有更新,凱鈿便會重寫需要用到的程式碼。但李南光不認為重寫這些套件是額外的工作,他表示,因為這些不支援Arm的套件,通常早就欠缺維護,遲早有一天他們也需要更新這些程式碼,而現在只是提早進行這些工作而已。
在解決了所有相依性問題後,工程師發現在Arm架構處理器上的編譯速度,的確快上許多。有了本地端的經驗,凱鈿便開始研究雲端改採Graviton執行個體。
Graviton執行個體更便宜更高效
為了全面採用Graviton,凱鈿的首要任務是調整持續整合/持續部署(CI/CD)流程,有鑒於凱鈿微服務之前已經全部容器化,並已搬遷到EKS,加上所使用的程式語言也都支援Arm架構,團隊能以Docker建置指令,重新創建適用於Arm的應用程式版本。在基礎設施層面,凱鈿進一步新增支援Arm架構的CI/CD工作管線,為採用Graviton執行個體建立穩固基礎。
凱鈿工程師投入約一個月的時間,解決相依項目對Arm的支援問題,並在雲端進行約一個月的仔細測試。經過評估,凱鈿便在既有的預留執行個體(Reserved Instances,RI)合約到期之時,決定購買新一批Graviton執行個體。凱鈿從原本的T2系列EC2執行個體,轉換改用Graviton家族的T4g等其他執行個體。李南光提到,經轉移後整體機器費用下降,而購買到的服務效能反而提升。根據凱鈿內部估計,轉用Graviton執行個體大概節省了15%的主機費用,購入的效能還提升5%到10%。
凱鈿曾經嘗試要使用多架構的方式,讓映像檔可以同時支援x86和Arm64的架構,但發現這樣不只效能不佳,很多時候甚至會發生可以建立x86映像檔,卻無法建置Arm64映像檔的情況,幾經評估後,凱鈿最後決定採用原生Arm的映像檔建立方式,將微服務完全轉移到Graviton執行個體上。
【圖説】凱鈿行動科技技術經理李南光表示,凱鈿已將大部分工作負載都轉移到 Graviton 執行個體上,並持續評估更多適合轉移至 Graviton 的工作負載
AWS Graviton的高性價比對凱鈿是一個極具吸引力的選項,特別是兼具優秀的效能和成本效益的雙重優勢。目前,凱鈿已經順利將大部分工作負載都轉移到Graviton執行個體上,並持續評估更多適合轉移至Graviton的工作負載,以達到更佳的營運能力和經濟效益。在未來的雲端發展上,凱鈿仍抱持著創新初衷,努力拓展其雲端平臺的能力,探索更多採用新興技術的可能性。
原文出處:iThome