7天DAU超億級,《羊了個羊》技術架構升級實戰

圖片

導語 | 在短短的7天內,羊了個羊小遊戲的DAU突破了1億。然而,其最初技術架構僅支撐5000QPS併發,無論技術、人力、資源以及服務都難以應對。用戶湧入、數據飆升,給原有的技術架構、運維體系、以及安全防範等技術體系都帶來了巨大的挑戰。如何通過架構優化,讓一款小程序遊戲可以在短時間內實現對上億DAU的支持?本文將從技術角度解讀這背後的技術實踐歷程,希望爲正在從事小遊戲開發的技術同行帶來一些參考。

圖片

背景

誰也沒有想到,去年9月,一款卡通背景消除闖關遊戲《羊了個羊》全網迅速刷屏。但凡一個拿着手機目不轉睛的人,九成概率都在忙着通關,還有大批的人,因爲不能通關而通宵達旦,夜不能寐。

後臺數據顯示,在短短的7天內,這款小遊戲的DAU就突破了1億。要知道,除了王者榮耀、原神等屈指可數的現象級手遊之外,1億DAU是這個行業的喜馬拉雅山,可是,它卻被一個看上去設計粗糙的小程序遊戲輕鬆實現了。

用戶湧入、數據飆升,實際上給原有的技術架構、運維體系、以及安全防範等技術體系都帶來了巨大的挑戰,這個創業團隊一共只有幾個人,最初的技術架構僅支撐5000QPS併發,因此,無論技術、人力、資源以及服務都越來越難以應對。

如何通過架構優化,讓一款小程序遊戲可以在短時間內實現對上億DAU的支持?本文將從技術角度解讀這背後的技術實踐歷程,希望爲正在從事小遊戲開發的技術同行一些參考。

圖片

架構全面升級

一款小遊戲能不能成功,不僅和本身的通關設計有着巨大的關係,而且還和上量之後,系統能否持續穩定也密切相關。《羊了個羊》這款小遊戲在爆火之後的前幾天,曾經在技術架構面臨嚴峻考驗,這對一款正在用戶量快速爬坡的小遊戲來說,可以說是致命的挑戰,如果不能快速解決,將會大幅降低玩家的遊戲體驗,從而快速被用戶拋棄。

《羊了個羊》在最開始也遇到了這樣的問題,就是一瞬間,湧入海量用戶,速度之快,人數之多,超過了所有人的預期。就像一條雙向兩車道,車流量不大的情況下,還能正常行駛,可一旦來了成千上萬輛車,交通的效率肯定大打折扣,甚至堵死。

現在回過頭看,最開始的技術架構因爲技術以及時間等因素,在設計上有些簡單,如下圖1所示,玩家流量通過一個LB進入,傳輸給幾個POD進行遊戲邏輯處理, 再將數據進行存儲,其中,熱數據存儲在Redis中, 持久化數據存在MongoDB。

由於設計時,對如此大流量缺乏充分考慮,實際上也沒有料想到會有這麼大的流量,而且單點服務的性能瓶頸,再加上代碼未進行充分優化,造成當時的系統最高只能承受5000的QPS,但實際流量增長很快, 並且持續升高併到達性能瓶頸,遊戲服務開始癱瘓,全部玩家無法再進行遊戲。

圖片

《羊了個羊》最開始技術架構

面對服務中斷, 《羊了個羊》和騰訊雲服務團隊在詳細分析原來架構的不足之後,決定從三個方面,針對原有架構做重點優化:在計算擴容層,依靠騰訊云云原生產品爲原有技術架構升級,實現服務高可用;爲快速補齊運維能力,通過業務日誌診斷程序性能,配合業務調優以減少服務器壓力;最後在安全防範領域,通過安全方案抵抗異常流量攻擊。

圖片

《羊了個羊》最新技術架構

具體措施上,首先通過引入騰訊雲TKE Serverless 的彈性機制, 實現遊戲服自動縱向和橫向擴展,實現服務解藕,增加容錯和熔斷機制;

其次,通過騰訊雲開箱即用的日誌服務 CLS,對遊戲接口穩定性/異常調用趨勢進行監控,幫助用戶快速觀測產品質量 ,並第一時間獲取到異常panic統計分析和告警 。

同時,還要針對許多惡意BOT流量大量湧入到遊戲中,導致遊戲服務器 QPS、帶寬快速升高,影響服務可用性等情況,引入WAF+高防包, 抵禦外部異常流量攻擊。

在此之外,雙方產研團隊還通過啓用CDN做遊戲動靜態資源分離,讓玩家使用的遊戲資源實現就近下載,減輕網絡端壓力;設計多LB入口實現入口高可用和限流,避免系統被超額流量過載;把MongoDB轉換爲讀寫分離模式,配合代碼邏輯優化實現性能提升,引入分庫實現業務分層與隔離,Redis緩存熱數據,分擔數據庫查詢壓力等。

經過上述一系列技術升級, 新架構經受住了一波又一波的流量峯值考驗,甚至在高峯期DAU過億後,遊戲技術系統依舊錶現穩定,這對於一個發佈才幾個月的小遊戲來說,在國內也很難再找到這樣的例子。

圖片

技術實戰:擴容、運維、安全

下面我們將從擴容、運維、以及安全三大核心環節入手,詳細介紹在具體實操過程中,雙方是如何應對流量的爆發挑戰的。

3.1 一崩再崩,自動擴容爲何不靈?

在展開之前,先說下這次起到至關重要的一款產品----TKE Serverless ,它是基於騰訊雲 TKE 容器服務孵化出來的一種全新的無需管理服務器形態的 Kubernetes 容器服務平臺,最核心的利器是擁有一個全新的集羣節點管理模式,稱之爲超級節點。

上雲的開發者都知道虛擬機,超級節點就類似於一臺超大規格的 CVM 虛擬機,它是基於 Serverless 容器技術,模擬 Serverful 有節點管理體驗的新形態容器集羣節點。如果用戶需要進行固定資源的擴縮容,僅需要對這臺“超大規格的 CVM”進行升降配,簡單點擊幾個鼠標,就可以配置完成,資源管理變得極爲簡單。

實際上,《羊了個羊》在6月上線初期就採用了 TKE Serverless 的雲原生方式部署遊戲系統,希望藉助產品的免運維及快速擴縮容能力,支撐未來玩家的規模增長,但在9月上旬,《羊了個羊》突然一夜爆火,玩家規模急劇上升,遊戲系統開始出現不穩定的情況。

經過梳理髮現,因爲初始配置的容器規格比較低,副本數也相對較少,當初始玩家規模不斷上漲時,《羊了個羊》團隊根據 TKE 控制檯的監控/告警能力,發現容器的 CPU/內存等各項指標都達到了最大值,運維同學當時隨即做出調整,遊戲服務的各項指標穩定了下來。

但隨着玩家規模繼續上漲達到千萬級別時,遊戲又開始出現了偶發的不穩定問題,表現爲內存指標快速增加直到打滿整個容器,且流量還在不斷增長中。騰訊雲團隊緊急聯合《羊了個羊》產研團隊分析應用的瓶頸,快速解決了如服務內存泄露、服務分級緩存策略、雲產品配額限制等多個問題,這才讓遊戲服務逐漸穩定了下來。

由於《羊了個羊》技術團隊配置了基於 CPU 指標的容器 HPA 動態擴縮容策略,在遊戲日活持續陡增的情況下,系統能夠在秒級自動擴容了近萬核容器資源。在此期間,也無需投入人力運維 Kubernetes 集羣以及擔心資源不足等問題,從而可以把精力都投入到遊戲玩法優化上來。在隨後的兩週時間,儘管玩家規模增長到幾百倍以上,最終達到了上億的日活,這套服務依舊保持穩定。

3.2 運維能力不足,如何快速補齊?

通過技術架構的迭代以及不斷激增的用戶,《羊了個羊》技術團隊也認識到,因爲爆火太快,更需要快速補齊運維能力,才能更好的持續調整和提升遊戲體驗。

爲此,《羊了個羊》選擇了開箱即用的日誌服務 CLS,CLS 對遊戲接口穩定性、異常調用趨勢的監控可幫助他們快速觀測產品質量 ,並第一時間獲取到異常panic統計分析和告警 ;在遊戲運營方面,玩家登錄鏈路耗時/對局時間等數據亦可通過 CLS 分析、校驗及處理,進而調整和提升遊戲體驗;同時還能滿足遊戲用戶行爲及審計對賬等需求。

TKE Serverless在提供充足的計算資源後,可以使用CLS的雲原生特性實現穩定性和程序調優。用戶研發人員僅需在容器控制檯點擊新建日誌採集按鈕即可完成數據接入,無需在運維上投入人力。

藉助雲原生的能力和CLS的SQL分析、儀表盤、監控告警能力,分析出程序可優化點, 解決遊戲開發商在初期和爆發期對遊戲穩定性和運營數據分析的難題。

除了運維數據外,用戶還將部分運營數據接入CLS。在遊戲調整玩法、分析活動數據時,運營人員可藉助CLS快速觀測數據變化,並作出應對策略。遊戲開發商在將CLS用作簡單運維工具查日誌、做接口調用告警外的同時,還將遊戲的通關數據、用戶行爲分析、審計對賬等運營數據在CLS中存儲分析。

3.3 惡意BOT搶刷排行,如何保持遊戲公平?

哪裏有流量,哪裏就有黑產。

由於設計之初沒有充分考慮安全問題,因此引來大量不法分子通過惡意BOT搶刷遊戲排行,幾乎每分每秒,都有惡意流量訪問遊戲接口,並且這一部分惡意羣體通過互聯網、QQ羣和微信羣中傳播惡意刷排行的腳本,極大的破壞了遊戲公平性,讓本該屬於遊戲對抗的樂趣被惡意BOT抹殺。

而且更重要的是隨着羊了個羊熱度的不但攀升,許多惡意BOT流量的大量湧入,導致遊戲服務器 QPS、帶寬快速升高,一度影響服務可用性。經過雙方產研團隊合作,決定快速接入騰訊雲WAF進行防護,一開始接入WAF的時候,相關 QPS 峯值已達 21W,接入WAF之前CPU一直處於臨界值水位 、網絡鏈接打滿的導致服務不可用的情況。

圖片

通過選擇負載均衡型WAF即可在不改動網絡架構的情況下3秒完成業務接入,實現在用戶無感的情況下對惡意流量進行清洗及防護。爲了有效打擊攻擊者的惡意流量, WAF 中 BOT 行爲管理也提供了全鏈路、全生命週期的的惡意行爲流量體系,實現快速高效的惡意流量治理。

圖片

小遊戲設計的“三高”原則

通過騰訊雲這次完整支持《羊了個羊》團隊在小遊戲架構擴容、系統運維以及安全防範領域的實戰經驗,我們也得到了一些啓發,希望給同行一些參考。比如面對突發流量,小遊戲系統在設計的過程中需要考慮以下能力:第一是高性能,能夠承載瞬時爆發流量,保證響應時長在可接受的範圍;其次是高可用,系統持續提供服務,小概率發生宕機時,過載保護將故障控制在可承受範圍內,不影響核心業務;最後是高擴展,服務系統應該具備水平和垂直擴展能力,在成本和可用性中實現最佳平衡點。

我們也看到,目前在國內甚至國際上,小遊戲發行商還是以中小型遊戲公司爲主,公司大都處於早期創業或融資階段,對雲產品不熟悉、技術能力參差不齊,在算力資源、技術架構、業務邏輯、運維經驗方面缺乏成熟的經驗,這些都是小遊戲公司早期非常典型的困境。通過騰訊雲和《羊了個羊》產研團隊的這次密切合作,不僅讓騰訊雲在服務類似客戶上積累了寶貴的經驗,也爲未來的發展指明瞭清晰的目標,就是針對不同賽道搭建標準化架構,爲遊戲公司的業務保駕護航

掃碼下圖一鍵領紅包封面

如被領取完 請關注開發者公衆號

在公衆號後臺回覆【2023】繼續領取

圖片

你可能感興趣的騰訊工程師作品

| 你的2022年度開發者關鍵詞,請查收>>

| React語境下前端DDD的長年探索經驗

| 國民級應用:微信是如何防止崩潰的?

| 從Linux零拷貝深入瞭解Linux-I/O

技術盲盒:前端後端AI與算法運維工程師文化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章