Serverless 极致弹性解构在线游戏行业痛点
簡介:?本文將通過剖析一個個具體的場景案例,以期望給相關的游戲開發同學帶來共鳴,同時也希望能給非游戲行業的同學帶來一些啟發。
作者 | 羅松(西流)
來源 |?阿里巴巴云原生公眾號
導讀:本文將通過剖析一個個具體的場景案例,以期望給相關的游戲開發同學帶來共鳴,同時也希望能給非游戲行業的同學帶來一些啟發。
一、前言
1. 游戲客戶上云關注點
游戲行業是一個富有創意又競爭激烈的市場,被稱為第九藝術。游戲客戶上云主要關注以下 4 個方面:
- 快速迭代,全球部署
快速迭代是游戲行業的通用需求,包括開發效率、運維效率、架構解耦;同時游戲可能也會出海,所以也需要海外部署或全球部署戰略。
- 高并發、高彈性
每個游戲上線時都會經歷新開服、運營拉新等階段,游戲本身也有日常峰谷,再加上偶爾的活動運營,也會產生峰值,因此在游戲行業高并發高彈性也是一個通用需求。
- 穩定、可靠、安全
要保證游戲的公平性和用戶的玩家體驗,防止作弊,所以需要保證游戲的穩定可靠與安全。
- 數據、運維、成本控制
游戲上線后,通過日志收集數據對用戶行為進行分析,根據分析結果針對不同的玩家實施不同的運維策略,將運營重點放在中間的搖擺玩家上,從而做到精準定位、控制成本。
2. 認識函數計算
下文將要介紹的案例主要與函數計算相關,因此在此先對阿里云 Serverless 產品——函數計算做一下簡單介紹。
函數計算:只需要專注業務代碼,面向函數極簡編程(各種編程語言),豐富的云產品間集成與事件驅動方式提供端到端解決方案。- 專注業務代碼
如上圖所示,對于游戲開發者來說,使用函數計算,就只需要選擇一個你最擅長的代碼,編寫這段代碼,上傳到計算平臺,就可以完成開發任務。之后可以通過 API/SDK 調用這個函數,也可以通過云產品事件源去觸發函數。
上圖是一個簡單的例子,用 Java 函數寫一個“Hello World”,把它設置成 Java8 的執行環境,256MB 的內存,設置完上傳到函數計算,開發任務就完成了,之后主動調用函數即可,無需關注任何基礎設施。
這里單獨介紹一下“云產品事件源觸發函數”。除了主動觸發函數,還可以用云產品來觸發。比如使用阿里云的對象存儲 OSS,上傳一個 zip 包到 OSS Bucket 的某個目錄,希望上傳之后可以自動觸發一個函數,然后這個函數可以把 zip 包自動進行解壓,云產品事件源觸發就可以實現這種效果。另外還有其他很多事件源,比如日志的事件源、 MNS 消息事件源、定時觸發事件源等。
- 100< 代碼量
面向函數極簡編程,只需要關注核心代碼。還支持各種編程語言,對開發者非常友好,開發者可以選一個自己最擅長的語言,寫完后上傳到函數計算即可。
- 100ms 極致彈性
如果觸發函數,同時過來 10 個、 100 個、1000 個甚至 1 萬個請求都不用擔心,函數計算會百毫秒級彈出執行環境,每個執行環境去執行函數邏輯代碼,再把函數執行的結果返回,幫助在線業務應對各種突發流量。
- 100% 資源利用率
在計費方面,函數計算是按執行環境的內存和執行時間計費,計費粒度可達毫秒級,只為請求產生的資源消耗買單,資源利用率達 100%,降低成本。
二、Serverless 游戲場景實踐案例
1. 高彈性戰斗結算業務
戰斗結算是強 CPU 密集型,結算系統每日需要大量的計算力,尤其是開服或者活動期間突然涌入的大量玩家,導致需要的計算量瞬間幾倍增長,同時需要結算系統保持穩定的延時來保證玩家的用戶體驗。以 SLG 游戲或者回合制游戲場景為例,一場戰斗結束后,為了用戶體驗,客戶端需要先行結算,展示這一回合的結果,比如打贏了彈出勝利動畫,打輸了彈出失敗動畫。如果純粹依賴客戶端,很可能會出現客戶端作弊的情況(比如作弊器),所以最后的結算肯定還是由服務器做結算。
隨著游戲策劃團隊想法的增加,游戲越來越復雜,比如 buff、debuff、暴擊等等。隨著游戲越來越好玩,結算系統會越來越復雜,游戲進程很可能會出現卡頓現象,而最好的解決方案就是把戰斗結算這一 CPU 密集型的邏輯抽離出來。這一方案也尤其適用于新開服、活動期間以及每日有日常峰谷的情況等。
如上圖,當客戶把戰斗結算遷移到函數計算上后,明顯可以看到, 即使 TPS 在日常峰谷呈 90° 直線上升,但是 Latency 延時仍然基本穩定在 200~300 毫秒之間,,充分保證了用戶的玩家體驗。
在這個場景中,函數計算的核心價值是:
- 彈性高可用:百毫秒級伸縮擴容,無需預留任何資源。
- CI/CD 和版本灰度能力:每當游戲策劃有新想法時,戰斗結算函數必然會更新,可以通過直接給這個函數設置版本和別名,從而非常安全地灰度到下一個版本的戰斗結算函數。
這是游戲場景里非常經典的例子,將 CPU 密集型的邏輯抽離出來放到函數計算上,在不影響 Game server 的服務器的同時,又具備了百毫秒伸縮擴容的能力,保證了玩家用戶體驗。
2. Serverless 實現超大規模游戲營銷
游戲廠商與廣告商聯合投放大量互聯網廣告,該業務場景無法準確預估運營流量,高并發、高彈性的后臺服務對業務結果至關重要。且大量的營銷數據和原始日志需要進行離線分析,驅動運營策略升級。游戲廠商的需求是:第一,游戲需要大規模營銷,波峰波谷無法預估;第二,游戲需要快速上線,對開發效率要求較高。
解決方案如上圖,將函數埋點到網頁里面,點擊時自動觸發這個函數,函數再把點擊傳過來的用戶消息持久化到 kafka。這一步函數 TPS 非常高,預估是幾萬或者十萬級別。第二步,通過 kafka connector 把消息持久化以后,connector 可以有 batch 操作,比如把 50 次點擊的數據 batch 成 1 個再發給另外一個函數,相當于后面的這個函數變成了 1/50 的調用量,另外這個函數是異步觸發,加上 batch 操作,起到削峰填谷的作用,因為只需要把消息寫入到數據庫就可以完成任務,只要不丟數據就好。同時這個函數打印的日志也可以用 SLS 進行分析或者寫入數據庫 RDS/ADP 進行玩家畫像的分析。
客戶壓測數據如下圖所示,第一個函數 TPS 上升到十幾萬,第二個削峰填谷后變成不到 3 萬。
在這個場景中,函數計算的核心價值是:
- 事件驅動,解耦架構難點;
- 彈性高可用,削峰填谷;
- 快速開發上線,1 天完成開發和壓測。
3. Serverless 實現安卓游戲 APK 包按渠道分發
UC 的游戲分發平臺的游戲 APK 包需要根據實時請求中的參數獲取渠道號,并將渠道號寫入 APK 文件固定位置, UC 有每天有大量的且不同渠道的下載請求,能實時讓用戶斷點下載指定渠道的 APK 游戲包。以阿里內部 UC 游戲分發平臺為例,在對象存儲里面放了一個原始包,其他包在文件固定位置加一些東西就可以。但是 UC 渠道每天有不同的下載請求,通過 Channel=UC/小米/華為到 CDN,CDN 直接回源到函數計算, 比如在函數計算看到回源是小米,從 OSS 拿到原始包把小米渠道信息寫進去,再把這個包直接返還給 CDN, 其他渠道包同理, 只要被下載過一次,都被緩存到 CDN。
這個案例中,函數計算的核心價值是:
- CDN 直接回源到彈性高可用的函數計算服務(FC);
- 降低成本,按需付費。客戶不需要為峰值預留計算資源,流量單價降價 40%。
4. Serverless 實現快速多渠道游戲打包
在發行游戲之前,通常會針對不同的發行渠道,將游戲母包和不同的渠道資料包構建成渠道包。在這個構建過程中,如果使用手工方式,存在易出錯、效率低、高成本的痛點。- 效率低:針對不同的渠道去打包,傳統的做法是固定買幾臺打包機,打包機可能大部分時間浪費,每周就打幾次;
- 高成本:渠道越接越多,打包機只有幾臺,想查看渠道包情況,可能需要打一晚上第二天才能看到。隨著渠道越增越多,打包機也需要不斷增加,閑置成本也越來越高;
- 易出錯:如何給打包機分配任務,調度系統需要自己開發,如果打包機出現了異常,需要自己去解決打包機的問題。
這個場景下,引入 Serverless 工作流,如下圖所示:
工作流定義:第一步,把母包從 OSS 上下載下來;第二步,并行去打包這些包,每個渠道包有一個并行的任務;第三步,打包完以后,進行后處理。
在這個場景下,函數計算的核心價值是:
- 任務自動化:事件一鍵觸發、自動運行,工作流完整跟蹤記錄整個打包流程,提高打包成功率;
- 打包并行化:多個渠道包構建過程并行,提高打包效率,同時支持配置模板化;
- 低成本: 按量付費,計算資源利用率高。
5. Serverless 實現游戲服務快速全球部署
阿里云作為國內第一家與 Terraform 集成的云廠商,生態支持較完整(Serverless 重度依賴云服務,中國支持較完整)。由于游戲不可能使用很多其他的云服務,而使用 Terraform 可以實現快速多云部署。
6. 實踐案例總結
-
CPU 密集接口
- 戰斗結算;
- 社交類游戲中,游戲內截圖、游戲直播視頻在線截圖、離線轉碼等;
- 聊天敏感詞檢測過濾,聊天翻譯;
- 排行榜等。
-
游戲活動運營
- 激活碼生成、消耗等一些封測運營活動;
- 游戲打包發行、廣告買量、活動頁、運營平臺等業務平臺。
- 用戶基本業務數據處理
三、阿里云函數計算現狀
1. 函數計算是國內企業 Serverless 架構落地、業務創新的首選產品
2020 年中國云原生用戶調查報告,阿里云 Serverless 用戶占比是 66%。CNCF 2019 年中國云原生報告中顯示,函數計算是國內企業 Serverless 架構落地和業務創新的首選產品。
2. 阿里云函數計算產品全景
函數計算是國內生態最完整、功能最豐富的 Serverless 產品,開發者一步上云、一鍵 Serverless 化將成為現實。
圖:阿里云函數計算產品全景
- 系統層面:支持了各種語言,開發者可以選一個自己最喜歡的語言,同時也支持了容器鏡像,擁抱容器生態;
- 實例類型:默認選擇百毫秒彈性實例,也可以選擇性能實例(比如強 CPU 密集型的音視頻轉碼);
- 觸發層:可以 API Gateway 或者 SDK 直接觸發,也可以用 Kafka、OSS、CDN 等事件源觸發;
- 工具層:有全新的 Serverless-Tool、Fun、開發者框架等等;
- 可觀測性:包括日志、監控、 Metrics、告警、Tracing 等;
- 應用中心:有非常好的落地案例,可以快速體驗經典案例。
四、附錄參考
- 江娛互動:游戲領域 Serverless 架構探索之路
- 游戲打包過程枯燥且工作繁瑣,如何提升打包效率?看鯨旗游戲的新思路
- 在游戲運營行業,Serverless 如何解決數據采集分析痛點?
- 函數計算 FC 助力游戲群采集營銷數據滴水不漏
- 基于 ECI+FaaS 構建游戲戰斗結算服
- 娛樂/教育行業:推流、轉碼一站式解決方案
- 零售行業:線上線下業務 Serverless 改造
作者簡介:
羅松(西流),目前負責阿里云函數計算產品功能開發:runtime 開發、事件源集成以及工具鏈的開發等,畢業后,從事了兩年手游開發,經歷過完整的手游立項、研發、上線流程,17 年投身 Serverless 大潮,致力于將更好的 Serverless/FaaS 實踐案例落地,打造國內最好的開源開放的 Serverless 社區。
原文鏈接
本文為阿里云原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的Serverless 极致弹性解构在线游戏行业痛点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win10-Win+E快捷键失效
- 下一篇: Unity Web自适应浏览器