圖片來源: 

Google

Niantic一點都沒想到Pokémon GO遊戲會這樣爆紅。7月6日,Pokémon GO遊戲剛在澳洲和紐西蘭正式上線不到15分鐘,玩家流量就遠遠超過了開發者Niantic公司的預期,尤其是儲存所有玩家資料的Cloud Datastore資料庫服務流量暴增,很快達到事先預估最大值的5倍量,甚至不久後,Niantic技術長Phil Keslin坦言,還增加到了50倍爆量流量,比他預估最壞的情況還要慘10倍。Niantic團隊嚇壞了,連忙打電話給Google CRE團隊尋求協助,因為隔天,Pokémon GO就要正式在美國上線。

Google內部一手包辦各項全球性服務維運的是SRE(Site Reliability Engineering)團隊,隨著雲端服務大舉進軍企業市場,Google正打算將自家SRE經驗,轉變成協助企業維運雲端服務的CRE(Customer Reliability Engineering)服務團隊,Niantic就成了Google CRE服務的第一號顧客,第一個任務就是確保Pokemon遊戲不被50倍爆量流量衝垮。

Google新的CRE服務部門總監Luke Stone是協助Niantic解決Pokémon GO爆量夢魘的關鍵人物,9月29日時,他在Google雲端平臺部落格上,公開了他們如何對抗爆量夢魘的幕後故事。他還特別發布了一張Pokémon GO遊戲所用Cloud Datastore每秒交易流量的變化,Pokémon GO使用了大量Google Cloud上的服務,其中用來儲存遊戲所有玩家資料的Cloud Datastore資料庫服務,是架構起Pokémon遊戲世界最主要的資料庫。遊戲上線當天,Cloud Datastore每秒存取交易次數迅速從5倍、10倍,增加到了50倍的爆量。

不斷湧入的玩家流量,衝垮了原先所有預期的設計,Niantic和Google Cloud旗下CRE、SRE、開發者、產品人員、技術支援團隊紛紛出動聯手來解決這個難題。Google工程師開始設法調度更多額外資源來支撐服務,不過,只是擴充資源還不夠,超大流量已經衍生了不少遊戲穩定性的問題。

為了讓上百萬名新玩家可以繼續登入遊戲,工程師一方面先拆解這些衍生問題的發生順序,來找出不同階段問題的對策,另一方面,Google CRE團隊手把手和Niantic一起重新檢視遊戲架構的每一個環節,甚至找來開發Google Cloud平臺的核心工程師和產品經理幫忙。Pokémon GO遊戲後端其實是布建在Container應用環境中。遊戲核心程式都用部署在Google容器服務GKE上的Kubernetes叢集中。Niantic利用GKE來打造一個全球性架構(planetary-scale)的容器叢集,讓他們的開發團隊可以專心於部署各項玩家需要的即時更新功能。Niantic還利用Google Cloud來建立Pokémon GO的後端單一服務平臺,可以提供持續部署和改善。

Pokémon GO遊戲使用了十多項Google Cloud服務,並建置了一個超大規模的Kubernetes叢集來支撐後端運算。Luke Stone表示,Pokémon GO所用的容器叢集,是GCE平臺推出後有史以來最大規模的叢集。在爆量出現後,Google也緊急調度了許多套核心數破萬的容器叢集,來分擔Pokémon GO遊戲的流量。

因為在Niantic中主導Pokémon GO遊戲決策的團隊才不過6個人,其中負責開發的人更只有4個人,因此Niantic得仰賴許多來自Google底層雲端平臺開發團隊,尤其是擅長架構和維運的工程師,來協助打造這個全球性遊戲的底層架構。

甚至,Niantic做出了一個更大膽的決定,要在遊戲不停機的情況下進行平臺升級,將Pokémon GO容器叢集所用的GKE,升級到下一個有能力提供一次擴充1千個節點的新版本。這個升級就像是在飛機飛行中同步更換引擎一樣的困難。不過,在升級之前,Niantic和Google先更換了新的網路負載平衡機制,改用Google的新版HTTP/S負載平衡服務來取代。這個服務可以提供一套全球架構的HTTPS流量管理系統,也提供了更多控制機制、更快的使用者連線速度,以及更高的整體吞吐量。

搭配大量運算資源擴充、新版GKE的架構升級、新一代負載平衡機制後,2周後,Pokémon GO登陸日本時,新玩家人數比美國玩家多3倍的情況下,還能順利運作。Google事後也將這些在Pokémon GO爆量事件中所修補的臭蟲,都提報到Kubernetes開源專案中改善。

不過,單靠Google加持還不夠,Pokémon GO爆紅之後,不止湧進大量玩家,也開始出現非人玩家的爆量存取,包括了大量第三方程式、軟體機器人等各式各樣的資料爬蟲程式,尤其8月初在南美洲、巴西等國推出時,非官方程式的爆量存取,更讓Pokémon GO被迫延後上市時間,因為服務幾乎快撐不住了,後來,Pokémon GO決定在8月3日開始封鎖那些「非人」的特殊查詢流量,才讓遊戲服務恢復正常。Niantic執行長也在8月4日時在Pokémon GO官網解釋了南美洲上市延後的原因。如下圖所示,在8月3日啟用封鎖機制後,特殊查詢的流量瞬間減少了6、7成。

Pokémon GO遊戲已遍及全球90個國家,遊戲推出2個月時,全球玩家所累積的移動距離,就達到29億英里之遠,大約是從地球到冥王星的距離,目前Pokémon GO App累計下載數量也達到5億次。

 

 


Advertisement

更多 iThome相關內容