搜尋
首頁後端開發php教程關於王者榮耀開發中高並發問題分析

關於王者榮耀開發中高並發問題分析

Feb 01, 2018 pm 02:08 PM
開發王者榮耀

本文和大家分享一個很有趣的話題是關於王者榮耀開發中高並發問題,希望能為大家帶來解決此類問題的思路,下面我們就一起來學習一下關於王者榮耀開發中高並發問題分析。

「王者榮耀」是一款國民級手機遊戲,用戶體量龐大,一直維持著較高的更新頻率。在這種業務場景下,突發也變得非常頻繁,然而業務體驗是至關重要的,使用CDN必不可少。類似地,經常有頻寬突發的場景,例如新聞爆點影片、大型直播活動、熱門影視劇上線、熱門遊戲等應用程式發布。同時,由於家庭頻寬和行動網路的快速升級,突發頻寬量級越來越大,經常達到Tb級,甚至10Tb 。如何快速、低成本地保障業務突發,成為CDN的一大挑戰。

堪稱中國最火爆的手機遊戲“王者榮耀”,擁有億級用戶體量,千萬級日活用戶,如何快速、低成本地保障業務突發?本文從這個問題出發,論述了問題對應的解決方案,並對其效果做出總結。

背景 

2007年,騰訊自建CDN啟用,存取了第一個業務騰訊網。到現在CDN頻寬量級,從最早的數十Gb,發展到現在的數十Tb;單業務的頻寬也越來越大,大部分業務常量頻寬在幾百Gb,部分突發業務達到了10Tb。網路的快速升級,行動用戶爆發式成長,以及視訊業務包括點播和直播的興起,使得業務突發越來越頻繁,突發頻寬越來越高,對CDN的要求也越來越高。

自建CDN得益於騰訊業務的蓬勃發展,先後支持了遊戲下載、串流視訊加速、春節紅包等騰訊內部業務;2014年騰訊將CDN全面能力開放,成為騰訊雲CDN產品,除承載內部業務外,也開始接入第三方客戶,例如快手點播、鬥魚直播等。以上各種業務都有突發場景,也有很強的成本訴求,在如何低成本地保障業務突發,騰訊CDN累積了豐富的經驗。接下來就挑戰和問題、解決方案、效果三個面向來解析。

一、挑戰和問題

以下將從業務特徵開始,分析目前存在的挑戰和問題。

1、 業務特點和挑戰

CDN多樣化的場景,注定了突發業務充滿挑戰。突發業務具有體量大、場景多樣化、 無規律等特性。

a) 大體量:突發業務頻寬大部分都超過Tb,部分甚至達到了10T ;

b) 場景多樣化:點播中的熱劇和新聞爆點;直播中的LOL/KPL/DOTA2等遊戲直播,NBA/世界盃等體育直播,演唱會等綜藝直播;應用下載中的王者榮耀等遊戲下載;靜態網頁加速中的紅包活動、電商促銷等;

c) 無規律:部分突發活動無法預知,​​活動快要開始或已經開始了才知道,例如新聞爆點。

體積大,需要準備更多的資源;場景多樣化,需要滿足不同的資源需求;無規律性則對我們的擴容效率提了很高的要求。

2、 目前存在的問題

僅為了滿足業務突發需求而儲備大量的資源,成本太高,會造成資源極大的浪費。所以一般會透過複用資源來應對業務突發。但直接重複使用資源,有兩個問題:

a) 只能重複使用部分資源:CDN業務,一般依業務類型來區分平台與資源使用,主要原因是不同業務類型對資源需求不同,例如點播類需要更多的儲存;有較多https請求的靜態頁類,則需要更多CPU資源。這種限制使得資源無法充分利用,增加了資源準備的難度。例如影片突發主要使用影片Buffer,而下載類別和網頁類別Buffer無法直接使用,這限制了Buffer的大小。即使是複用同類型資源,因為涉及多個業務資源的協調,準備時間一般會超過兩天,無法應對臨時突發;

b) 無法降低成本:另外針對部分突發業務,例如遊戲應用程式下載,頻寬高峰期在上午和中午,如果只使用本平台資源,會導致結算頻寬明顯上漲,進而增加成本。無法利用同其他業務錯峰的特性來降低結算頻寬。

二、解決方案

騰訊雲端CDN透過虛擬化重複使用現有資源,建構全業務通用的突發池,所有平台共享Buffer。 突發池中的設備為Docker虛擬機,虛擬機有不同的規格,只要業務有需求,都可以按需使用。突發池中的頻寬儲備達到了10Tb,基本能滿足所有業務突發需求 。任何業務有突發需求,配合自動化上架接口,可在10分鐘完成10Tb突發池的擴充。

突發池系統架構

a) 突發池:在各平台實體機的上層,由Docker虛擬機器組成的資源池,對CPU/記憶體/磁碟等使用進行了限制,防止對物理機造成影響。原有業務仍部署在實體機上,不用調整。

b) 自動化部署與監控系統: 能依照業務實際需求,自動預測需求並擴充 。所有的突發需求,都能在10分鐘內擴容完成。針對點播/下載業務,自動分發熱點文件,降低迴源頻寬。

c) 調度系統:突發業務的突發性與量大兩個特點,使得相較於網域排程系統,直通車更佔優勢。直通車調度更靈活,生效時間快,可達到分鐘級。

虛擬機器和實體機部署了上報Agent,業務資訊和伺服器負載每分鐘都會回報到監控系統。監控系統會根據歷史頻寬預測一個值,並與目前頻寬比較,如果當前頻寬超過預測值的50%,則認為有突發。根據頻寬上漲的比例,系統會自動從突發池擴充對應資料的裝置。針對提前準備的突發活動,維運可指定頻寬需求量,之後系統便會自動計算設備需求並擴充。

分鐘粒度上報的伺服器負載資訊則為監控系統做調度決策提供了依據。系統會依據機房剩餘頻寬、伺服器頻寬、CPU、IO等綜合資訊決定虛擬機器是否需要從直通車啟用或停用。用戶造訪時先請求直通車調度系統,直通車會根據調度策略傳回一個302位址,302位址中為實際CDN資源位址。用戶跳到302地址,並取得實際內容。

2、技術最佳化

使用虛擬化技術重複使用資源的重​​要前提是,不影響現有業務。這就要求對資源有充分的隔離,例如CPU/磁碟,以及對頻寬的使用。以下是實作過程中存在的幾個問題及解決方案:

● 精準控制單機負載:負載過高會影響業務質量,需要對單機負載進行精準的控制。

解決方案:

a) 配額系統:直通車中有配額系統,對每個虛擬機器可使用的資源做了限制,包括CPU/IO和頻寬。監控系統中所回報的訊息,結合配額系統,可以確保伺服器負載被限定在製定的範圍內,粒度為分鐘級。

b) 部分請求回傳302:對CPU/頻寬/IO等做了限制後,應用程式能根據母機目前負載,即時判斷是否處理一個請求。如果負載在限制範圍內,直接處理;如果負載超出限制,則返回302,使用戶跳到直通車的調度地址,這樣能在盡量不影響業務質量的情況對負載做精準控制。程序層面對負載的即時控制,是配額系統的有效補充。

c) 網路卡流量控制:在極端情況下,業務頻寬超過設定門檻值,這時虛擬網路卡會主動丟包,避免對母機造成影響。

● 限制磁碟大小:Docker在ext3/ext4檔案系統中無法對檔案/目錄層級進行磁碟大小限制。

解決方案:

由於騰訊雲端CDN業務基本上都是使用ext3/ext4檔案系統,這種情況下Docker只能對根據使用者或使用者群組對磁碟進行限制,但現網業務都是直接在root環境下使用。這裡我們使用loop device來解決磁碟大小限制問題。虛擬機器中突發業務使用掛載在loop device上的目錄,這樣就可以間接限制磁碟大小,防止使用太多磁碟影響其他業務。

● CPU綁定:預設是綁定所有CPU,部分單CPU負載高會影響母機業務。

解決方案:

透過腳本每分鐘採集一次系統所有單CPU負載,為避免頻繁調整和受毛邊資料影響,取15分鐘的平均值。最後選取負載較低的部分核,並透過設定檔cpuset.cpus來動態綁定,將虛擬機器對母機業務影響降低到最小,並且能充分利用資源。

突發池上線後,高效支持了王者榮耀下載、NBA直播、KPL/LPL遊戲直播等多次大型突發活動,節省成本2000萬。透過共享buffer,搭建突發池能顯著提升突發能力及降低成本。

總結

騰訊雲CDN,透過Docker技術重複使用資源,建構Tb級突發池,能支援直播、點播、靜態等各種業務突發,能自動偵測到業務突發需求並在10分鐘內完成資源擴容,具有發布快,成本低等特點。資源多工能提高資源利用率,為業務提供極大的突發池,但要注意復用業務之間不能相互影響,這需要對伺服器進行即時的監控和及時的調度。另外還有一些待改進的地方,例如核心參數基於容器隔離,方便不同業務調優;部分業務客戶端不支援302跳轉,調度系統需要支援網域調度方式。

相關推薦:

解決web開發中高並發問題

php和redis實現高並發下的搶購以及秒殺功能範例詳解

php讀取和寫入檔案衝突出現高並發解決方案匯總

#

以上是關於王者榮耀開發中高並發問題分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
PHP如何識別用戶的會話?PHP如何識別用戶的會話?May 01, 2025 am 12:23 AM

phpIdentifiesauser'ssessionSessionSessionCookiesAndSessionId.1)whiwsession_start()被稱為,phpgeneratesainiquesesesessionIdStoredInacookInAcookInAcienamedInAcienamedphpsessIdontheuser'sbrowser'sbrowser.2)thisIdallowSphptpptpptpptpptpptpptpptoretoreteretrieetrieetrieetrieetrieetrieetreetrieetrieetrieetrieetremthafromtheserver。

確保PHP會議的一些最佳實踐是什麼?確保PHP會議的一些最佳實踐是什麼?May 01, 2025 am 12:22 AM

PHP會話的安全可以通過以下措施實現:1.使用session_regenerate_id()在用戶登錄或重要操作時重新生成會話ID。 2.通過HTTPS協議加密傳輸會話ID。 3.使用session_save_path()指定安全目錄存儲會話數據,並正確設置權限。

PHP會話文件默認存儲在哪裡?PHP會話文件默認存儲在哪裡?May 01, 2025 am 12:15 AM

phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()

您如何從PHP會話中檢索數據?您如何從PHP會話中檢索數據?May 01, 2025 am 12:11 AM

ToretrievedatafromaPHPsession,startthesessionwithsession_start()andaccessvariablesinthe$_SESSIONarray.Forexample:1)Startthesession:session_start().2)Retrievedata:$username=$_SESSION['username'];echo"Welcome,".$username;.Sessionsareserver-si

您如何使用會議來實施購物車?您如何使用會議來實施購物車?May 01, 2025 am 12:10 AM

利用會話構建高效購物車系統的步驟包括:1)理解會話的定義與作用,會話是服務器端的存儲機制,用於跨請求維護用戶狀態;2)實現基本的會話管理,如添加商品到購物車;3)擴展到高級用法,支持商品數量管理和刪除;4)優化性能和安全性,通過持久化會話數據和使用安全的會話標識符。

您如何在PHP中創建和使用接口?您如何在PHP中創建和使用接口?Apr 30, 2025 pm 03:40 PM

本文解釋瞭如何創建,實施和使用PHP中的接口,重點關注其對代碼組織和可維護性的好處。

crypt()和password_hash()有什麼區別?crypt()和password_hash()有什麼區別?Apr 30, 2025 pm 03:39 PM

本文討論了PHP中的crypt()和password_hash()的差異,以進行密碼哈希,重點介紹其實施,安全性和對現代Web應用程序的適用性。

如何防止PHP中的跨站點腳本(XSS)?如何防止PHP中的跨站點腳本(XSS)?Apr 30, 2025 pm 03:38 PM

文章討論了通過輸入驗證,輸出編碼以及使用OWASP ESAPI和HTML淨化器之類的工具來防止PHP中的跨站點腳本(XSS)。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)