印度遊戲平臺Dream11如何伸縮擴充套件他們的遊戲中臺?
獲得騰訊投資的Dream11平臺可以讓使用者建立由真實玩家組成的虛擬團隊,並允許他們根據實際遊戲中玩家的資料表現來組織比賽。獲獎者將獲得積分獎勵,每場比賽都有參賽費。該平臺提供夢幻板球、足球、卡巴迪和NBA的比賽:
對於 1 億 Dream11 使用者來說,在我們的平臺上玩夢幻體育的刺激和興奮是無與倫比的。他們喜歡建立自己的團隊並與其他粉絲和朋友競爭!但是,從後端的角度來看,我們在 Dream11 的流量和參與度變化方面面臨著各種挑戰,主要是在比賽開始時間之前。為了確保應用程式在使用者流量高的關鍵時刻順利執行,作為一個團隊,我們提出了一個可擴充套件和可定製的解決方案。因此,我們能夠同時執行多場比賽,每秒高效處理數百萬個使用者請求,而不會影響他們玩夢幻體育的體驗。
我們如何管理 Dream11 平臺上這種在短時間內劇烈波動的流量變化?
架構支援:
- 超過1億的使用者群
- 使用者併發超過550萬
- 邊緣服務的每分鐘請求數 (RPM) 超過 1 億
- 超過 30K+ 的計算資源來支援峰值 IPL 流量
- 超過 100 多個並行執行的微服務
一旦使用者開啟 Dream11 應用程式,他們的旅程通常會在主頁、巡迴賽、團隊和比賽頁面之間來回切換。因此,應用程式的負載會發生變化,相應地,邊緣層、其依賴服務和微服務必須擴充套件或擴充套件。
有趣的是,使用者併發性可能會在事件之間或比賽之後上升或下降,並且根據每年使用者的增長來預測它可能具有挑戰性。
讓我們還考慮在比賽前、比賽中和比賽後在平臺上產生尖峰的不受控制的變數。這些是,
- 使用者興趣取決於比賽和球員在現實生活中的受歡迎程度,這會影響 RPM 的大小。
- 特定於比賽的事件,例如拋球、小隊公告、由使用者釋出小隊公告的團隊建立,以及中間時段的事件,例如小門倒下、擊中六分球、帽子戲法、突圍事件和其他不可預測的因素(例如下雨)。
自動擴充套件為何不起作用?
就基礎設施而言,自動縮放有幾個限制。它的配置時間不夠快,無法在關鍵事件期間支援使用者的計算需求!海嘯流量期間的大量使用者需要較短的配置時間來跟上峰值,並且可能不適合有構建時間並讓使用者等待。
- 節點的現貨Spot 可用性有限且競爭激烈——尤其是在關鍵時間!
- 如果要考慮 Dream11 的規模,此時步進Step縮放也可能不起作用,因為它僅限於一定數量的節點
- 基於資源的可用性重新平衡或重新安排跨可用區 (AZ) 的節點數量可能會進一步增加與時間有關的供應成本。
傳統應用程式負載均衡器 (CLB/ALB) 的限制
- 根據吞吐量建立負載均衡器分片,因為負載均衡器上生成的請求數量有限制。為了基於使用者併發性獲得更高的吞吐量,需要建立分片並根據服務路由對其進行管理。
- 必須對 ELB 進行預熱以應對突然的流量激增。
雲控制平面(雲提供商)的限制
- 此外,我們的雲提供商的功能也有限制。應用程式介面 (API) 呼叫率因業務而異,在分配資源時需要考慮這一點
- 由於供應的資源數量眾多,控制檯操作很繁重。
- 擴充套件到 100 多個微服務的運營開銷。
解決方案:預測 - 主動擴充套件
- 我們自產的併發預測模型
我們在 Dream11 的資料科學團隊在嘗試了具有 100 個特徵的多個模型後,開發了一個使用 XGboost 模式預測使用者併發的模型,以預測 Dream11 平臺上的每小時併發。
我們首先透過一個線性模型執行每個匹配的後設資料,該模型給出匹配的層級。比賽等級是比賽受歡迎程度的指標變數。
然後根據相似匹配的過去併發對匹配層進行分類(按高併發或最需要的優先)。
然後模型迭代多個特徵來預測特定匹配的併發性。這些可以是每小時的特徵,例如該小時(及其周圍的小時)按層級匹配的數量、前幾小時/天的活躍使用者、平均交易規模等。所有這些資料都經過標準化處理,可以照顧到Dream11 的指數增長。
最重要的是,我們需要一個合適的成本敏感的損失函式,沒有預測不足的選項。總的來說,我們擁有超過 200 個變數和比資料科學更多的資料藝術性,使得 XGBoost 模型可以在非常有限的超引數調整下工作。
正如我們的資料科學團隊所相信的,“錯誤分析 >>>> 超引數調整”。
- 效能測試和遊戲日
根據提供併發估計的預測模型,效能團隊舉行“比賽日”以基準基礎設施容量以及基於過去比賽的分解趨勢。
使用的效能測試框架是Torque
基礎設施配置框架:Playground(觀看此空間瞭解更多資訊)
使用 Playground 配置基礎設施和Torque來執行效能測試,效能團隊根據使用者併發預測對業務功能的以下改進進行了認證。
- 效能指標和驗證:
- 定義應用延遲——為業務服務的可接受延遲
- 識別個人服務能力
- 基準計算和網路吞吐量
- 識別應用程式的故障和飽和點
- 產生突然的尖峰和浪湧以識別對後端基礎設施的影響並識別架構中的級聯效應
- 測試基礎設施邊界,包括計算、網路、API 限制和操作。
- 部署最佳化以減少配置時間
- 完全烘焙的 Amazon 機器映像 (AMI),用於使用應用程式工件進行部署以實現更快的擴充套件
- 跨可用區配置多種計算例項型別(多樣化),減少容量挑戰
- Spot 例項的容量最佳化分配策略
- 成本最佳化確保 100% 資源在現場執行
- 在現場不可用的情況下通知失敗並啟用按需供應。
- 加權域名系統 (DNS) 記錄以支援 ELB 分片。
- 使用 Scaler 縮放關鍵時間
- Dream11 的 DevOps 和 SRE 團隊精心設計了一個平臺“Scaler”,它有助於根據併發預測和效能基準進行主動擴充套件。
- 基於與預測的併發性和趨勢相關的效能測試,系統被輸入不同的使用者併發塊和各自的基礎設施,以在比賽前、比賽中和比賽後跨微服務提供。
未來工作範圍
隨著架構的成熟,我們正在研究容器和資料儲存的預測性和計劃性擴充套件。我們還希望最佳化我們的基礎設施成本並實時擴充套件我們在 Dream11 平臺上看到的峰值。為實現這一目標,我們正在尋找有才華的工程師,他們熱衷於大規模解決基礎設施問題併為 Dream11 使用者提供出色的產品。
相關文章
- 伸縮擴充套件Node.JS應用套件Node.js
- 使用Slice擴充套件伸縮OpenJPA 應用套件
- 微信公眾平臺/擴充套件套件
- WINDOWS平臺上擴充套件SGAWindows套件
- WINDOWS平臺上擴充套件SGA (zt)Windows套件
- 非推倒重來式的讀/寫伸縮擴充套件套件
- Bittrex與受監管的交易平臺Rialto合作擴充套件平臺套件
- 如何設計高擴充套件的線上網頁製作平臺套件網頁
- Java平臺,可擴充套件GlassFish v3的JavaEE 6Java套件
- Apollo 釋出 GraphQL 平臺和 VS 程式碼擴充套件套件
- 12306火車票訂票系統的伸縮擴充套件套件
- KubeVela 外掛指南:輕鬆擴充套件你的平臺專屬能力套件
- 沙盒遊戲平臺上的青少年百萬富翁們遊戲
- 基於中臺思想的物流系統設計(五):設計可擴充套件的產品服務平臺套件
- 如何搭建遊戲資料分析平臺遊戲
- 如何用遊戲化思維構建 "好玩" 的遊戲平臺遊戲
- 他們還在做遊戲遊戲
- PHP的LZF壓縮擴充套件工具PHP套件
- UNDO SEGMENT的擴充套件和收縮套件
- 如何為SAP WebIDE開發擴充套件(Extension),並部署到SAP雲平臺上WebIDE套件
- 用template實現的可擴充套件的平臺無關的 log Class (轉)套件
- kestra: 無限可擴充套件的開源編排和排程平臺套件
- 平臺遊戲中走與跳的實現遊戲
- 什麼是XR擴充套件現實,XR雲串流平臺有哪些套件
- 如何為平臺遊戲設計關卡?遊戲設計
- 遊戲出海:如何選擇聚合廣告平臺遊戲
- 如何擴充遊戲的包容性,提升女性玩家們的歸屬感?遊戲
- [外掛擴充套件]後臺編輯器0.2套件
- 【MySQL】一次擴充套件平臺引發的字符集調整薦MySql套件
- Coinbase是如何在其加密貨幣交易平臺上應對擴充套件性挑戰的加密套件
- 如何開發一款棋牌遊戲?棋牌遊戲平臺搭建遊戲
- 開發者寧願玩家去玩盜版,也不希望大家在這個平臺上購買他們的遊戲遊戲
- 微軟:我們對於 PC 平臺遊戲的計劃與方向微軟遊戲
- 手遊折扣平臺 遊戲打折扣的平臺推薦遊戲
- GOG打造PC玩家遊戲聚合平臺 囊括所有平臺及主機遊戲Go遊戲
- 壓縮/擴充套件qcow2磁碟套件
- 手機遊戲如何在WP平臺下掙錢?遊戲
- 你們是如何敏捷開發 Laravel 私有擴充套件包的?敏捷Laravel套件