Niantic一點都沒想到Pokémon GO遊戲會這樣爆紅。7月6日,Pokémon GO遊戲剛在澳洲和紐西蘭正式上線不到15分鐘,玩家流量就遠遠超過了開發者Niantic公司的預期,用來儲存所有玩家資料的NoSQL資料庫服務Cloud Datastore,每秒存取次數很快就達到Niantic預估最大的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遊戲使用了超過1打的Google Cloud服務,所建置的Kubernetes叢集,是GCE平臺上有史以來最大規模的叢集。Google也調度了許多個上萬核心數的容器叢集,來分擔Pokémon GO遊戲的流量。
因為在Niantic中負責Pokémon GO遊戲決策的團隊才不過6個人規模,其中負責開發的只有4個人,因此得仰賴許多來自Google底層雲端平臺開發團隊中,擅長架構和維運的工程師來協助打造這個全球性的遊戲底層架構。
甚至,Niantic做出了一個更大膽的決定,要在遊戲不停機的情況下進行平臺升級,將Pokémon GO容器叢集所用的GKE,升級到下一個能夠一次讓叢集加入1千個節點的新版本。這就像是在飛機一邊飛行,一邊更換引擎一樣的考驗。不過,在升級之前,Niantic和Google先更換了新的網路負載平衡機制,改用Google的新版HTTP/S負載平衡服務來取代。這個服務可以提供全球性規模的HTTPS流量管理系統,也能提供更多控制、更快的使用者連線和更高的整體吞吐量。
搭配大量運算資源擴充、新版GKE的架構升級、新一代負載平衡機制後,2周後,Pokémon GO登陸日本時,新玩家人數比美國玩家多3倍的情況下,還能順利運作。Google事後也將這些在Pokémon GO爆量事件中所修補的臭蟲,都提報到Kubernetes開源專案中改善。
Pokémon GO遊戲已遍及全球90個國家,遊戲推出2個月時,全球玩家所累積的移動距離,就達到29億英里之遠,目前App累計下載數量也達到5億次。