Quantcast
Channel: iThome
Viewing all articles
Browse latest Browse all 31362

雷亞從PaaS轉而擁抱容器,3人就可以維運百萬人遊戲

$
0
0

在許多臺灣企業仍使用VM、實體機做為基礎架構時,本土遊戲開發商雷亞遊戲已經追上使用Container的風潮,並且將Docker及容器調度工具Kubernetes導入正式環境當中。靠著Container,只需要3名後端工程師即可以搞定每日活躍人數破百萬音樂遊戲VOEZ的日常維運。

「我認為使用Container對雷亞遊戲是一條比較簡單的路。」雷亞遊戲技術長鐘志遠表示,從開發者的角度出發,學習使用VM及Container的門檻都一樣的話,倒不如一舉大量採用日前正火熱的容器技術。

篤定不介入底層VM管理

不過,在將Container導入雷亞遊戲團隊前,鐘志遠的技術決策中,就已經排除在內部私有機房使用VM做為基礎架構的選項,「自建內部機房並非壞事」,但因遊戲業除了競爭快速,還得將人力專注於研發上外,並沒有多餘人手負責管理VM。

此外,雖然微軟Hyper-V、VMware vSphere等虛擬化解決方案都提供圖像化管理工具,但在正式環境中,仍要根據實際營運狀況,針對各一VM環境參數微調,以及設定應用程式安裝環境,「開啟VM事小,但後續的維運工作才是困難。」

因此,他決定使用雲端PaaS服務AWS Elastic Beanstalk做為開發環境,考量當時旗下遊戲Mandora的設計架構中變得較為複雜,原先遊戲所串接的外部服務僅有軟體市集提供的線上存檔功能,而Mandora還新增了社群積分排名的功能,「此時就得要利用PaaS平臺建置後端服務。」

透過PaaS平臺,開發者只要設法讓程式碼可以成功部署上線,不需要特定對各一VM微調,或者擔心遊戲流量過多,造成系統當機,「水平擴充的難題交給外部廠商操心就好。」

PaaS平臺的僵固性是優勢,卻也是弱點

然而俗話有云:「成也蕭何,敗也蕭何」,雖然開發者只要按照規範,就可以按部就班地使用PaaS平臺完成工作,開發各類服務。但是這樣的僵固性,卻是PaaS平臺的最大優點亦即缺點。因為對開發者設下重重限制,使用者也無從了解外部廠商PaaS平臺的設計想法,反而造成開發上的困難,「就如同一個黑盒子。」鐘志遠舉例,例如AWS Beanstalk平臺在運作服務時,同步也會運行一組Nginx套件,透過HTTP代理伺服器(HTTP Proxy)與平臺上的應用程式溝通。

但是,由於雷亞遊戲主要使用Python作為開發語言,相比於起Nginx,「比較好的方式是用uSWSGI協定來串接各服務,溝通效率會更好。」礙於PaaS平臺預先已經完成的架構,要進行微調並非不可行,但是得額外開發許多程式腳本,才能進行變更。

而系統元件彼此傳遞資訊效率欠佳的狀況下,當遊戲使用規模變大,或是遇上忽然爆量的使用者請求,此時就得相當講究程式的運作效能,「而PaaS設計的使用情境與我們不相符,此時就成了進步的阻礙。」鐘志遠說。

另外,回顧過往使用AWS Elastic Beanstalk的經驗,鐘志遠表示,大多情況下,開發者只需要上傳程式碼後即可正常運作。但由於使用者不熟悉底層架構實作細節,仍然不時出現部署失敗的現象,「此時我們也苦惱究竟要重新部署、建置還是除錯。」

像是過去曾發生開發團隊部署服務於PaaS平臺時,雖然系統成功創建VM,卻無法順利在虛擬機中部署程式碼。花費數天追溯Log紀錄後,才發現原因是出在VM安全參數設定錯誤,導致系統沒有部署程式碼的權限。

在沒有多餘時間了解平臺運作邏輯、深入研究系統Log紀錄的狀況下,開發團隊對PaaS平臺進行故障排除的難度也更高,「站在遊戲開發商的角度,我們不應該面對如此複雜的維運問題。」

而經由資訊部門的內部技術分享,還有看到許多社群平臺分享使用Container技術的經驗,讓鐘志遠開始思考利用容器技術打造後端平臺的可能性。他表示,如果雷亞遊戲想要領先其他遊戲廠商,「一開始就得選擇最尖端的技術,而不是重頭開始追趕他人。」因此,雷亞遊戲也在今年將Docker及Kubernetes導入正式環境中。

PaaS平臺難以打造微服務架構

比起PaaS平臺,使用Container技術架構後端平臺的好處在於,使用者可以針對自己需求調整環境參數,「可以把容器想像為一個乾淨的作業系統,任何想要安裝的程式,都可以直接部署於Container中。」鐘志遠認為,Container的操作思維,反而比較適合雷亞遊戲的開發習慣。

而容器調度平臺Kubernetes的僵固性也比PaaS平臺低得多,鐘志遠歸納,AWS Beanstalk便預先假定使用者多半開發由單一服務所組成的HTTP網頁應用程式。

他舉例,近年雷亞遊戲開始引入微服務架構的概念,單款遊戲由許多不同元件組成,而各組件負責執行不同的任務,彼此間還得互相連結、傳遞訊息。如果嘗試使用PaaS打造微服務,就必須在平臺中開啟許多實例,同時還要對各實例進行組態設定,才能讓各實例間順利溝通。

與PaaS平臺相比,Kubernetes可以自動建構叢集,讓使用者在叢集內自由開啟Container,並利用Kubernetes內建的設定檔,讓各容器元件溝通,不過鐘志遠提醒,開發者在擁有如此自主性下,得對系統架構有更多的設計考量。

除此之外,Kubernetes沒有預設使用者的開發框架,反之,則是按照開發者的指示來派送、運作及部署Container,所以使用自由度也高的許多,「Kubernetes就像工具包,讓我們可以自行架構系統,而不是使用廠商預先組好的機器。」鐘志遠比喻。

不僅只有Kuberentes,雷亞遊戲也導入了Docker Container,而第一步得先撰寫Dockerfile建置容器映像檔,「如果工程師不會寫Dockerfile,很多事情都無法做」,鐘志遠也要求所有參與開發後端系統開發的成員,都必須具備獨立撰寫Dockerfile的能力。

由於Dockerfile記錄映像檔建置過程中所需要的套件、函式庫,因此,開發者必須了解如何修改Dockerfile,否則可能導致Container的部署過程失敗。鐘志遠也認為,想要學習如何建置環境的工程師,也可以研究Dockerfile的內容,「因為Dockerfile是一個很好的部署文件。」

雷亞的新款遊戲伊甸之魂中,就採取微服務的設計架構,各組件負責執行不同的任務,彼此間也得互相連結、傳遞訊息。(圖片來源/雷亞遊戲)

導入IT自動化及CI

在導入Container的同時,雷亞遊戲在每個後端系統專案開發流程中導入了持續整合(Continuous Integration,CI),確保每個版本都測試後才進入正式環境,「而礙於人力問題,我們盡可能一切都採取自動化。」

而Container技術的特性,也讓CI流程得以簡化,像是過去得花許多時間建立的測試環境,利用容器技術快速開啟的特性,開發者在僅需要開啟Container就可以馬上開始進行程式碼測試。

在還未沒有導入CI前,專案負責人得要負責撰寫測試腳本,在手動測試後,發現運作沒有障礙後,最後再上傳至正式環境。

鐘志遠則身先士卒,一人扛起整套持續整合流程建立的重責大任,他首先將CI腳本及服務建置完成,讓程式碼提交後主動完成測試工作,並且自動部署於測試伺服器,在後端系統開發流程中,雷亞遊戲則是選擇線上程式碼管理平臺GitLab。

靠GitLab搞定版本控制、CI及部署工作

鐘志遠解釋,GitLab包含了版本控制系統Git、CI,以及程式碼部署的功能外,也能相容於VM、Container等異質環境。而GitLab也相當支援Docker,在此技術2013年問世不久時,就積極地擁抱它。

而近期的GitLab版本也大舉推出Container儲存庫功能,使用者可以自行將容器映像檔上傳至線上儲存庫,「GitLab可說是結合了GitHub、Travis CI以及Docker Hub。」

他表示,過去部署必須得花上一小時的時間,在導入CI後則大幅縮短成幾秒鐘,「程式設計師可以回歸只關心程式碼的本質。」

鐘志遠笑說,一名活躍於開源社群的開發者進入雷亞遊戲後,直呼:「在這裡寫程式真輕鬆」,只要程式碼從分支提交合併請求至主幹分支(Master branch),完成審查過程後,測試及部署都可以自動完成,「但是我並沒有感受到戲劇性的轉變,因為這是一步一腳印累積起來的。」他說。

不過,現階段雷亞遊戲的CI流程多半是用於後端系統專案的開發。鐘志遠表示,由於遊戲前端的開發環境,多半是圖像開發、遊戲引擎工具等上商業化環境,目前較難整併於CI流程中,「未來目標要漸漸讓前端測試也能自動化。」

技術長得從員工身上學習新知識

隨著競爭日漸激烈,每天業界都出現新興開源工具,要如何選出合適人選,對技術長也是個難題。根據過往面試經驗,鐘志遠歸納出了3種特質的工程師人才,分別適合解決不同的工作挑戰。

他表示,第一種人選是技術狂熱份子,對於程式開發、開源軟體充滿熱情,樂於在公司內部分享知識,為公司帶來新想法。

在者是研究型人才,能夠細心地處理問題,有條理地分析系統出現錯誤的原因,並具備自主開發測試工具的能力。最後則是能確實完成工作的員工,「工作腳步俐落,只要專案完成,都已經達到可以上線的標準。」

鐘志遠表示,技術長不可能接觸到所有最新的技術、想法,必須找到最優秀的工程師,盡可能從他們身上學習新點子。如果發現有實務上可行的做法,也要設法將它整合至公司中。

雖身為技術長,但鐘志遠認為,自己對技術的掌握也許還不如一線工程師精熟,「他們才是每天試圖克服新問題的人,重點在於,我該如何從他們身上學習到新想法。」他說。

 

 CTO小檔案 

鐘志遠

雷亞遊戲技術長

學歷:臺灣大學電信工程研究所

經歷:現任雷亞遊戲技術長,在2011年與他人一同創辦雷亞遊戲,在2016年初翻轉過去的PaaS環境,正式引入Docker、Kubernetes等容器技術,更利用Container結合CI,縮短遊戲開發時程

 

 公司檔案 

雷亞遊戲

●      地址:臺北市信義區東興路47號1樓

●      成立時間:2011年

●      網址:www.rayark.com

●      主要業務:手機、PS Vita遊戲開發

●      員工數:130人

●      資本額:6,276萬元

●      董事長:鐘志遠

●      總經理:游名揚

 

 公司大事紀 

●      2011年:雷亞遊戲成立

●      2016年:開始在正式環境引入Container、Kubernetes等技術

●      2016年:音樂遊戲VOEZ上架,每日活躍使用者破百萬


Viewing all articles
Browse latest Browse all 31362

Trending Articles