席捲IT業界的Container技術,雖然聽起來高不可攀,貌似只有具備扎實技術的大公司開發團隊才能使用,而位在臺灣的雷亞遊戲,員工數只有130人,其中30人的開發團隊大多數都是電腦圖像工程師,後端工程師的數量一隻手就能數完。雷亞遊戲技術長鐘志遠卻大膽地在正式環境中導入Docker及Kubernetes,更證明使用新技術並非大公司的專利。
成立於2012年的雷亞遊戲,截至現今已經推出了5款遊戲,在Google Play平臺上累積下載次數超過2,300萬,其遊戲已在23個國家中拿下付費排行榜的第一名。在2012年年底,雷亞遊戲推出音樂遊戲Mandora,鐘志遠表示,別於過去推出的產品,Mandora必須經由網路與後端系統連線,但是當時包含鐘志遠在內的8人工程團隊,全部都是專精影像處理,對於底層Linux、資料庫、負載平衡、系統狀況監控,以及網路架構等技術皆不精熟。
碰上如此多技術障礙,「我們決定盡可能使用手上有的資源,不要自己土法煉鋼。」在調查多方PaaS平臺解決方案後,鐘志遠決定選用AWS Elastic Beanstalk在Python環境進行遊戲開發,並且使用第三方資料庫服務商提供的服務,在拼湊各家現有現成服務後,也順利地完成此專案,「幸好當時使用流量並不高,讓伺服器能繼續順利運作。」他笑說。
鐘志遠表示,隨著公司成長,雷亞遊戲的企圖心越來越大,例如企畫團隊將會提出更多需要工程團隊實作的功能,未來也要成立專屬雷亞自家的帳號系統。同時,因為開發者規模增加,雷亞遊戲未來也需要更多遊戲發布商(Publisher)的支援,「所以遊戲伺服器不能依賴於任何PaaS平臺之上,當產品交付給發布商後,得要靠他們自行部署。」最後,鐘志遠還計畫推出更多透過網路連線的產品,因此雷亞遊戲也希望將系統拆解為許多微服務,藉此減低開發成本。
但即便到了2015年,包含鐘志遠在內,工程團隊仍然只有3位後端工程師,而這3人手上也肩負了兩個專案,「人力吃緊的狀況仍然存在。」如此情況讓他下定決心,必須用更少人力,在一定時間內開發出可以支撐雷亞遊戲營運的後端平臺,而此平臺必須完成三大目標:程式錯誤最小化,部署成本最低化,並讓系統累積的技術層(Technology Stack)降到最低。鐘志遠解釋,只要系統結構越簡單,越不需要花費心思研究新技術,讓團隊心力集中花費在寫程式以及思考遊戲邏輯,才能提升工作效率,「而Container便是讓我們完成這些目標的關鍵角色。」
雷亞遊戲技術長鐘志遠表示,在過去使用AWS PaaS平臺的經驗中,也讓他了解到PaaS平臺就像是黑盒子,但是在Container環境中,而應用程式運作所需要的底層技術都被封裝在容器中,「可以輕易了解程式結構,像是系統發布要求到結束的完整流程。」
每個後端工程師必學撰寫Dockerfile
在使用Docker Container前,第一步得先撰寫Dockerfile建置容器映像檔。鐘志遠認為,透過Dockerfile,開發者可以了解應用程式運作所需要的資源,以及該如何部署開發環鏡。因此他要求每一個參與後端系統開發的工程師,都必須具備撰寫Dockerfile的能力,「讓不同工程師自行開發的程式,也都能在他人電腦上運作。」在Dockerfile撰寫完成後,開發者只要將程式碼掛載於某執行目錄下,便能很快速地布建開發環境。
除了能快速建置開發環境,鐘志遠也在持續整合(Continuous Integration,CI)流程中導入了Container。他表示,在開發者存取GitLab儲存庫時,首先得要完成CI腳本,讓程式碼部署、測速流程盡量自動化。而利用Container將程式運作環境、程式碼一同封裝的特性,「測試時,不僅是測試程式碼,同時也可以測試運作環境。」
他也歸納雷亞遊戲CI流程的四大步驟:建制映像檔、測試映像檔、映像檔上傳至遠端環境,以及將部署在主幹(Master)環境、預備(Staging)環境或是開發環境。
第一步是利用Docker建置容器映像檔,只要映像檔名稱命名完成後,只要利用一行程式碼就可以將映像檔上傳至本地端容器儲存庫。第二步驟測試映像檔中,透過Container可以快速開啟、關閉,隨需即用的特性,快速建置測試環境。鐘志遠表示,此特性讓開發團隊不需要特別維護專門測試環境,例如,開發者只要利用過去CI流程中建制的腳本,就可以建置起資料庫,立即進行資料庫環境測試,「完成後再將資料庫清理完即可。」
再者則是將映像檔上傳至遠端環境,由於雷亞遊戲使用的Google公有雲服務中,有提供儲存Container映像檔的儲存庫,開發者只要對映像檔簡單地進行標註(tag),就可以將映像檔從本地端儲存庫中,上傳至雲端儲存庫中。
最後則是將映像檔部署於不同環境,例如主幹、預備以及開發環境。由於Google容器引擎(Container Engine,GKE)背後底層平臺為Kubernetes,也只需透過一行程式碼,就可以將應用程式部署於Kubernetes,「我們的CI過程相當簡單,利用Container建立CI流程是非常簡單的事情。」鐘志遠說。
這也是鐘志遠相當中意Container技術的原因,他認為,容器技術很適合整合在CI流程中,「藉此確保映像檔的運行環境一定經過測試才會上線,並且可以在異質基礎架構上進行部署。」
不過在決定程式碼部署於何種環境時,雷亞遊戲也有一定的內部控制流程,例如,工程團隊就替每一個環境都建立Git分支,當A開發者想要將程式碼部署開發環境時,就必須發出合併需求,並且請鐘志遠檢核程式碼品質,同時A開發者的合併請求,也必須另外的B開發者簽呈。完成這些控管流程後,鐘志遠便會同意將合併開發者提交的程式碼,10分鐘之後,Kubernetes就會將容器部署完畢,「現在所有程式碼得必須經過這樣的CI流程測試才可以上線。」
Kubernetes可免手動管VM,環境也不如PaaS受限
然而,究竟是哪些因素,讓鐘志遠決定從既有PaaS環境,轉移到Kubernetes、Container環境?他比喻,若Google GCE、AWS EC2這類的IaaS環境,和Google GAE、AWS EBS此類型的PaaS環境,分別處於光譜兩極端,最底層為IaaS,而最上層為PaaS時,Kubernetes則位於中間偏上的光譜地帶,「介於PaaS及IaaS之間,不過它比較類似PaaS。」鐘志遠近一步解釋,Kubernetes不如IaaS的操作,必須深入至VM層級手動建置服務,但是也不受限於PaaS環境的局限,可以在Container環境中選擇偏好的技術建置開發環境。
「我們希望能有一個具備PaaS環境特色的環境運行Container,讓程式碼可以在異質環境中運作。」鐘志遠表示,在過去使用AWS PaaS平臺的經驗中,也讓他了解到PaaS平臺就像是黑盒子,例如,常常應用程式部署到一半便發生錯誤,由於團隊中並沒有熟悉Linux的後端人才,也沒有太多時間研究系統Log檔案,礙於對PaaS平臺掌握不足,也對開發團隊帶來很大的負擔。在導入Kubernetes環境之後,開發團隊也擁有較大的自由。鐘志遠認為,Kubernetes是一套容器調度工具,並且將系統需求引導至Container環境中,而應用程式運作所需要的底層技術都被封裝在容器中,「可以輕易了解程式結構,像是系統要求發布到結束的完整流程。」
導入Kubernetes也可以延續PaaS平臺的使用習慣,開發者不需要自動管理VM,同時它也具備自動彈性擴充(Auto-Scaling)、負載平衡、Log記錄,以及系統監控等基礎建設功能。
Kubernetes中也有一支背景程式專門蒐集各個節點的運作狀況,只要透過第三方雲端服務供應商,開發者即可以將系統Log資訊連接至監控系統,像是觀測每個節點的CPU使用量,將資料進行視覺化。
使用Kubernetes的三大優點
除了技術決策的原因,鐘志遠也歸納其他Kubernetes的使用優點。第一是其開源的性質,只要使用上碰到任何異常,只要開啟它在GitHub專案的頁面,就可以了解其運作原理且進行除錯。
第二則是Kubernetes支援多區(Multi-zone)部署功能,在其1.2.4版本中,開發者可以在資料中心內建置叢集外,叢集還可以分布在不同區間(Zone)內,藉此提升應用程式的可用性。
最後則是其運行環境很容易開發者進行除錯。鐘志遠舉例,當開發者想要利用本機電腦連線至遠端環境除錯時,開發者不需要透過重重的SSH連線、建立VPN等步驟,只需要一些基本指令,就可以對Container進行存取並且讀取其內部運行資料。
今年開始將Kubernetes導入正式環境
雷亞遊戲今年推出的音樂遊戲VOEZ中,總共包含了三大系統元件:帳號系統、遊戲邏輯系統,以及防作弊系統,而鐘志遠就導入了Kubernetes做為其底層架構,將其VOEZ切割成數個Kubernetes叢集。他解釋,由於帳號系統會與其他遊戲共用,所以自成一個獨立叢集,而由於遊戲邏輯系統與防作弊系統間的互動緊密,因此兩者則整合於統一叢集中,「利用Kubernetes則可以將不同微服務進行串接。」
但是行銷團隊經常構思不同的推廣方案,像是在周六推出免費歌曲,此時系統請求就會暴增5倍,「這對行銷是好事,但是突然暴增的流量對工程師非常有壓力。」鐘志遠表示,由於此專案只有3位工程師負責,並沒有專屬人力時時監控系統流量,因此,系統自動水平擴充是他認為最重要的功能。而在Kubernetes中,只需要一組指令就可以完成水平擴充功能。他舉例,開發者可以自行設定參數,例如當CPU使用率達到70%時,系統會自行產生新節點(Pod)。同時,也必須要對底層VM進行類似設定,讓系統在自動產生新節點時,提前產生可以容納節點的VM,「藉此就可以透過Kubernetes實現水平擴充的功能。」
Auto-scaling
雷亞遊戲行銷團隊經常構思不同的推廣方案,像是在周六推出免費歌曲,此時系統請求就會暴增5倍。因此,系統自動水平擴展是鐘志遠認為最重要的功能。
除了水平擴充,還能進行流量測試、系統監控
除了部署服務、自動水平擴充外,Kubernetes還可以進行流量測試、系統監控。鐘志遠表示,單臺電腦可以發出請求有限,而開發者可以在Kubernetes平臺上部署分散式流量測試工具Locust,「過去我們就曾使用30臺VM,像系統發布每秒5,000至6,000次的請求次數(RPS,Request per second)。」
而Kubernetes中也有一支背景程式專門蒐集各個節點的運作狀況,只要透過第三方雲端服務供應商,開發者即可以將系統Log資訊連接至監控系統,像是觀測每個節點的CPU使用量,將資料進行視覺化。
從今年一月才開始使用Docker及Kubernetes的雷亞遊戲,在短短半年內就成功導入到正式環境。目前VOEZ每日的活躍使用者約有100萬人,必須利用100個4核心VM才能撐起叢集的運作,「而Container及Kubernetes威力之處,就是讓我們在半年內,只靠三個人就完成這樣的系統架構。」
熱門新聞
2024-11-18
2024-11-20
2024-11-15
2024-11-15
2024-11-12
2024-11-19
2024-11-14