本文和大家分享一個很有趣的話題是關於王者榮耀開發中高並發問題,希望能為大家帶來解決此類問題的思路,下面我們就一起來學習一下關於王者榮耀開發中高並發問題分析。
「王者榮耀」是一款國民級手機遊戲,用戶體量龐大,一直維持著較高的更新頻率。在這種業務場景下,突發也變得非常頻繁,然而業務體驗是至關重要的,使用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跳轉,調度系統需要支援網域調度方式。
相關推薦:
#以上是關於王者榮耀開發中高並發問題分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!