Pokémon GO 如何在 GCP 上部署服務?

作者:李振皓(現就讀於台大電機所) 自從《Pokémon GO》在上週六(8/6)開放台灣玩家下載,全民陷入一陣瘋狂,紛紛走出戶外,開啟抓寶之旅。不論是在校園,車站附近,公園或是一些熱門景點,總是聚集著訓練家們,拿著手機,瘋狂地丟出寶貝球,希望跟隨卡通主角小智的步伐,收服世界上所有神奇寶貝,往神奇寶貝大師的道路邁進! Google-Cloud-Platform-Pokemon《Pokémon GO》遊戲畫面。圖/截圖自Pokémon GO日本官網 可是你知道嗎?在抓寶的同時,手機正不停地與遊戲伺服器做溝通,利用你的地理位置座標(GPS)進行相關運算,比如載入附近地圖資訊,偵測附近的寶可夢,監控移動速度等等。面對全世界這麼多的玩家,這麼大的流量,該如何部署後端伺服器,如何做優化,確保這些運算能正常運作,是一項挑戰,也是讓遊戲能持續風靡的重要關鍵!

不只關注攻略、寶可夢地圖,你該思考的是背後的雲端架構

這麼火紅的遊戲,網路上不斷地有相關討論,訓練家們關注著各種攻略、密技,從Google Trends的分析之中,也發現大家為了要能長時間的抓寶、孵蛋,開始關注行動電源,為了要快速的提升等級,紛紛尋找能夠直接看到寶可夢分布的地圖以及自動遊玩外掛(necrobot)等等。 pg-trend-b 行動電源的搜尋聲浪在《Pokémon GO》發表後增加。圖/截圖自Google Trends pg-trend 《Pokémon GO》的相關搜尋趨勢。圖/截圖自Google Trends 然而在遊玩之餘,你有想過後端如何運作嗎? 在國外的知識問答平台Quora,已經有人在探討技術層面的議題,探究背後的伺服器架構怎麼部署,應該如何設計。根據Apps-gcp所做的實驗,以封包擷取軟體(Wireshark)來檢測遊戲發出的封包,從目的地伺服器的IP網段,合理推測出《Pokémon GO》的確採用了GCP (Google Cloud Platform)。此外,我們也能從遊戲開發商Niantic釋出的職缺消息看出來,服務建置在GKE (Google Container Engine) 並且運用輕量化的虛擬技術Docker與Google提供的開源容器調度工具Kubernetes來完成後端部署。 gcp-docker-kubernetes 在《Pokémon GO》的世界裡,無時無刻都有人在地圖間游走,尋找寶可夢,也不停地有人向道館發出挑戰,而且根據不同的時間與地點,玩家的數量也會有所變化。對於這樣的需求,背後的系統需要有相當大的彈性以及便攜性,Docker正是為此而生。同樣的硬體資源下,Docker可以跑的應用程式數量比虛擬機器 (Virtual machine)多4到6倍,且通常在幾秒鐘的時間內即可啟動容器。也就是因為如此,可以應付突如其來的流量,讓玩家有流暢的抓寶體驗,而當流量變小的時候,系統能根據設定減少容器數量,降低營運成本。

用聰明的方式,讓遊戲無痛上雲端

Livehouse.in在8/9日舉辦的第二場雲端小聚『遊戲無痛轉移上雲端』,就搭上了寶可夢列車,分別由Gene與Taco以自身經驗與實際案例出發,介紹該如何利用Docker來簡化開發與部署流程,並分享Kubernetes的使用心得。 如果你是企業用戶,可以透過Kubernetes來控管Docker Cluster,做負載平衡(Load Balance),Auto scaling,還有Self-healing等等設定,讓系統可以依據事先設定的判斷機制,動態的改變服務數量,並在服務出問題時自動重新啟動,維持遊戲穩定。如果只想簡單做測試,又不想管這麼多複雜設定,別怕,這些Google都幫我們做好了!透過GCP Cloud Console圖形化介面,可以很輕易地完成相關設定,架起一個Docker叢集。 container-engine在Google Container Engine 設定容器叢集。圖/截圖自 GCP Cloud Console 《Pokémon GO》的成功,是經過多年累積的努力,很大程度也仰賴在《Ingress》汲取的經驗,網友也笑稱《Pokémon GO》其實做了三年的beta測試,在這之中了解不同廠牌手機的GPS定位效果,做適當修正,同時蒐集了玩家活動的時間、範圍與相關資訊,應用到這款遊戲上。面對多人連線遊戲的需求,以及巨量資料的處理,自己建立機房已不符合經濟效益,如何快速使用現有資源打造產品,才是在生命週期短暫的手機遊戲產業中生存的關鍵!透過GCP,您可以快速整合Google旗下服務以及各種API,並使用Stackdriver監控資源與系統紀錄,隨時掌握狀況。 如果各位對於雲端相關的議題有興趣,請持續追蹤GCP部落格唷!後續我們會分享當日活動的剪輯影片,並發布雲端小聚下次聚會的訊息!最後,祝福各位都能成為神奇寶貝大師,一起收服神奇寶貝吧!