開發與維運

Serverless 極致彈性解構在線遊戲行業痛點

頭圖.jpg

作者 | 羅鬆(西流)
來源 | 阿里巴巴雲原生公眾號

導讀:本文將通過剖析一個個具體的場景案例,以期望給相關的遊戲開發同學帶來共鳴,同時也希望能給非遊戲行業的同學帶來一些啟發。

一、前言

1. 遊戲客戶上雲關注點

遊戲行業是一個富有創意又競爭激烈的市場,被稱為第九藝術。遊戲客戶上雲主要關注以下 4 個方面:

  • 快速迭代,全球部署

快速迭代是遊戲行業的通用需求,包括開發效率、運維效率、架構解耦;同時遊戲可能也會出海,所以也需要海外部署或全球部署戰略。

  • 高併發、高彈性

每個遊戲上線時都會經歷新開服、運營拉新等階段,遊戲本身也有日常峰谷,再加上偶爾的活動運營,也會產生峰值,因此在遊戲行業高併發高彈性也是一個通用需求。

  • 穩定、可靠、安全

要保證遊戲的公平性和用戶的玩家體驗,防止作弊,所以需要保證遊戲的穩定可靠與安全。

  • 數據、運維、成本控制

遊戲上線後,通過日誌收集數據對用戶行為進行分析,根據分析結果針對不同的玩家實施不同的運維策略,將運營重點放在中間的搖擺玩家上,從而做到精準定位、控制成本。

2. 認識函數計算

下文將要介紹的案例主要與函數計算相關,因此在此先對阿里雲 Serverless 產品——函數計算做一下簡單介紹。

函數計算:只需要專注業務代碼,面向函數極簡編程(各種編程語言),豐富的雲產品間集成與事件驅動方式提供端到端解決方案。

  • 專注業務代碼

1.jpg

如上圖所示,對於遊戲開發者來說,使用函數計算,就只需要選擇一個你最擅長的代碼,編寫這段代碼,上傳到計算平臺,就可以完成開發任務。之後可以通過 API/SDK 調用這個函數,也可以通過雲產品事件源去觸發函數。

2.jpg

上圖是一個簡單的例子,用 Java 函數寫一個“Hello World”,把它設置成 Java8 的執行環境,256MB 的內存,設置完上傳到函數計算,開發任務就完成了,之後主動調用函數即可,無需關注任何基礎設施。

這裡單獨介紹一下“雲產品事件源觸發函數”。除了主動觸發函數,還可以用雲產品來觸發。比如使用阿里雲的對象存儲 OSS,上傳一個 zip 包到 OSS Bucket 的某個目錄,希望上傳之後可以自動觸發一個函數,然後這個函數可以把 zip 包自動進行解壓,雲產品事件源觸發就可以實現這種效果。另外還有其他很多事件源,比如日誌的事件源、 MNS 消息事件源、定時觸發事件源等。

3.jpg

  • 100< 代碼量

面向函數極簡編程,只需要關注核心代碼。還支持各種編程語言,對開發者非常友好,開發者可以選一個自己最擅長的語言,寫完後上傳到函數計算即可。

  • 100ms 極致彈性

如果觸發函數,同時過來 10 個、 100 個、1000 個甚至 1 萬個請求都不用擔心,函數計算會百毫秒級彈出執行環境,每個執行環境去執行函數邏輯代碼,再把函數執行的結果返回,幫助在線業務應對各種突發流量。

  • 100% 資源利用率

在計費方面,函數計算是按執行環境的內存和執行時間計費,計費粒度可達毫秒級,只為請求產生的資源消耗買單,資源利用率達 100%,降低成本。

二、Serverless 遊戲場景實踐案例

1. 高彈性戰鬥結算業務

戰鬥結算是強 CPU 密集型,結算系統每日需要大量的計算力,尤其是開服或者活動期間突然湧入的大量玩家,導致需要的計算量瞬間幾倍增長,同時需要結算系統保持穩定的延時來保證玩家的用戶體驗。

4.jpg

以 SLG 遊戲或者回合制遊戲場景為例,一場戰鬥結束後,為了用戶體驗,客戶端需要先行結算,展示這一回合的結果,比如打贏了彈出勝利動畫,打輸了彈出失敗動畫。如果純粹依賴客戶端,很可能會出現客戶端作弊的情況(比如作弊器),所以最後的結算肯定還是由服務器做結算。

隨著遊戲策劃團隊想法的增加,遊戲越來越複雜,比如 buff、debuff、暴擊等等。隨著遊戲越來越好玩,結算系統會越來越複雜,遊戲進程很可能會出現卡頓現象,而最好的解決方案就是把戰鬥結算這一 CPU 密集型的邏輯抽離出來。這一方案也尤其適用於新開服、活動期間以及每日有日常峰谷的情況等。

5.jpg

如上圖,當客戶把戰鬥結算遷移到函數計算上後,明顯可以看到, 即使 TPS 在日常峰谷呈 90° 直線上升,但是 Latency 延時仍然基本穩定在 200~300 毫秒之間,,充分保證了用戶的玩家體驗。

在這個場景中,函數計算的核心價值是:

  • 彈性高可用:百毫秒級伸縮擴容,無需預留任何資源。
  • CI/CD 和版本灰度能力:每當遊戲策劃有新想法時,戰鬥結算函數必然會更新,可以通過直接給這個函數設置版本和別名,從而非常安全地灰度到下一個版本的戰鬥結算函數。

這是遊戲場景裡非常經典的例子,將 CPU 密集型的邏輯抽離出來放到函數計算上,在不影響 Game server 的服務器的同時,又具備了百毫秒伸縮擴容的能力,保證了玩家用戶體驗。

2. Serverless 實現超大規模遊戲營銷

遊戲廠商與廣告商聯合投放大量互聯網廣告,該業務場景無法準確預估運營流量,高併發、高彈性的後臺服務對業務結果至關重要。且大量的營銷數據和原始日誌需要進行離線分析,驅動運營策略升級。

遊戲廠商的需求是:第一,遊戲需要大規模營銷,波峰波谷無法預估;第二,遊戲需要快速上線,對開發效率要求較高。

6.jpg

解決方案如上圖,將函數埋點到網頁裡面,點擊時自動觸發這個函數,函數再把點擊傳過來的用戶消息持久化到 kafka。這一步函數 TPS 非常高,預估是幾萬或者十萬級別。第二步,通過 kafka connector 把消息持久化以後,connector 可以有 batch 操作,比如把 50 次點擊的數據 batch 成 1 個再發給另外一個函數,相當於後面的這個函數變成了 1/50 的調用量,另外這個函數是異步觸發,加上 batch 操作,起到削峰填谷的作用,因為只需要把消息寫入到數據庫就可以完成任務,只要不丟數據就好。同時這個函數打印的日誌也可以用 SLS 進行分析或者寫入數據庫 RDS/ADP 進行玩家畫像的分析。

客戶壓測數據如下圖所示,第一個函數 TPS 上升到十幾萬,第二個削峰填谷後變成不到 3 萬。

7.jpg

在這個場景中,函數計算的核心價值是:

  • 事件驅動,解耦架構難點;
  • 彈性高可用,削峰填谷;
  • 快速開發上線,1 天完成開發和壓測。

3. Serverless 實現安卓遊戲 APK 包按渠道分發

UC 的遊戲分發平臺的遊戲 APK 包需要根據實時請求中的參數獲取渠道號,並將渠道號寫入 APK 文件固定位置, UC 有每天有大量的且不同渠道的下載請求,能實時讓用戶斷點下載指定渠道的 APK 遊戲包。

8.jpg

以阿里內部 UC 遊戲分發平臺為例,在對象存儲裡面放了一個原始包,其他包在文件固定位置加一些東西就可以。但是 UC 渠道每天有不同的下載請求,通過 Channel=UC/小米/華為到 CDN,CDN 直接回源到函數計算, 比如在函數計算看到回源是小米,從 OSS 拿到原始包把小米渠道信息寫進去,再把這個包直接返還給 CDN, 其他渠道包同理, 只要被下載過一次,都被緩存到 CDN。

這個案例中,函數計算的核心價值是:

  • CDN 直接回源到彈性高可用的函數計算服務(FC);
  • 降低成本,按需付費。客戶不需要為峰值預留計算資源,流量單價降價 40%。

4. Serverless 實現快速多渠道遊戲打包

在發行遊戲之前,通常會針對不同的發行渠道,將遊戲母包和不同的渠道資料包構建成渠道包。在這個構建過程中,如果使用手工方式,存在易出錯、效率低、高成本的痛點。

  • 效率低:針對不同的渠道去打包,傳統的做法是固定買幾臺打包機,打包機可能大部分時間浪費,每週就打幾次;
  • 高成本:渠道越接越多,打包機只有幾臺,想查看渠道包情況,可能需要打一晚上第二天才能看到。隨著渠道越增越多,打包機也需要不斷增加,閒置成本也越來越高;
  • 易出錯:如何給打包機分配任務,調度系統需要自己開發,如果打包機出現了異常,需要自己去解決打包機的問題。

這個場景下,引入 Serverless 工作流,如下圖所示:

9.jpg

工作流定義:第一步,把母包從 OSS 上下載下來;第二步,並行去打包這些包,每個渠道包有一個並行的任務;第三步,打包完以後,進行後處理。

在這個場景下,函數計算的核心價值是:

  • 任務自動化:事件一鍵觸發、自動運行,工作流完整跟蹤記錄整個打包流程,提高打包成功率;
  • 打包並行化:多個渠道包構建過程並行,提高打包效率,同時支持配置模板化;
  • 低成本: 按量付費,計算資源利用率高。

5. Serverless 實現遊戲服務快速全球部署

阿里雲作為國內第一家與 Terraform 集成的雲廠商,生態支持較完整(Serverless 重度依賴雲服務,中國支持較完整)。由於遊戲不可能使用很多其他的雲服務,而使用 Terraform 可以實現快速多雲部署。

10.jpg

6. 實踐案例總結

  • CPU 密集接口

    • 戰鬥結算;
    • 社交類遊戲中,遊戲內截圖、遊戲直播視頻在線截圖、離線轉碼等;
    • 聊天敏感詞檢測過濾,聊天翻譯;
    • 排行榜等。
  • 遊戲活動運營

    • 激活碼生成、消耗等一些封測運營活動;
    • 遊戲打包發行、廣告買量、活動頁、運營平臺等業務平臺。
  • 用戶基本業務數據處理

三、阿里雲函數計算現狀

1. 函數計算是國內企業 Serverless 架構落地、業務創新的首選產品

2020 年中國雲原生用戶調查報告,阿里雲 Serverless 用戶佔比是 66%。CNCF 2019 年中國雲原生報告中顯示,函數計算是國內企業 Serverless 架構落地和業務創新的首選產品。

11.jpg

2. 阿里雲函數計算產品全景

函數計算是國內生態最完整、功能最豐富的 Serverless 產品,開發者一步上雲、一鍵 Serverless 化將成為現實。

12.jpg
圖:阿里雲函數計算產品全景

  • 系統層面:支持了各種語言,開發者可以選一個自己最喜歡的語言,同時也支持了容器鏡像,擁抱容器生態;
  • 實例類型:默認選擇百毫秒彈性實例,也可以選擇性能實例(比如強 CPU 密集型的音視頻轉碼);
  • 觸發層:可以 API Gateway 或者 SDK 直接觸發,也可以用 Kafka、OSS、CDN 等事件源觸發;
  • 工具層:有全新的 Serverless-Tool、Fun、開發者框架等等;
  • 可觀測性:包括日誌、監控、 Metrics、告警、Tracing 等;
  • 應用中心:有非常好的落地案例,可以快速體驗經典案例。

四、附錄參考

作者簡介
羅鬆(西流),目前負責阿里雲函數計算產品功能開發:runtime 開發、事件源集成以及工具鏈的開發等,畢業後,從事了兩年手遊開發,經歷過完整的手遊立項、研發、上線流程,17 年投身 Serverless 大潮,致力於將更好的 Serverless/FaaS 實踐案例落地,打造國內最好的開源開放的 Serverless 社區。

本文整理自【Serverless Live 系列直播】1 月 27 日場
直播回看鏈接:https://developer.aliyun.com/topic/serverless/practices

Serverless 電子書下載

本書亮點

  • 從架構演進開始,介紹 Serverless 架構及技術選型構建 Serverless 思維;
  • 瞭解業界流行的 Serverless 架構運行原理;
  • 掌握 10 大 Serverless 真實落地案例,活學活用。

下載鏈接https://developer.aliyun.com/topic/download?id=1128

Leave a Reply

Your email address will not be published. Required fields are marked *