阿里云原生內(nèi)存數(shù)據(jù)庫Tair在游戲場景的應(yīng)用

來源: 阿里云數(shù)據(jù)庫
作者:百潤
時間:2021-07-27
16798
游戲的架構(gòu)非常多,總結(jié)來看基本有三種,第一種是分區(qū)分服的游戲,第二種是全區(qū)全服,第三種是全球同服。最近全同服的游戲比較火,線上做了很多收割,而分區(qū)分服也適用于一些游戲場景。

內(nèi)容簡要:

一、游戲系統(tǒng)中的Redis

二、云原生內(nèi)存數(shù)據(jù)庫Tair介紹

三、Tair的游戲場景

 

一、游戲系統(tǒng)中的Redis


(一)Redis In Gaming Servers :分區(qū)分服


游戲的架構(gòu)非常多,總結(jié)來看基本有三種,第一種是分區(qū)分服的游戲,第二種是全區(qū)全服,第三種是全球同服。最近全同服的游戲比較火,線上做了很多收割,而分區(qū)分服也適用于一些游戲場景。



Redis的使用場景可以分為兩種,一種場景是當(dāng)緩存使用,另一種場景是當(dāng)內(nèi)存數(shù)據(jù)庫使用。Redis的使用場景在國內(nèi)外的定位是不一樣的,在國外大多數(shù)Redis都是作為緩存使用,但在國內(nèi),可以說70%的用戶是當(dāng)做內(nèi)存數(shù)據(jù)庫。


下面就用一個分區(qū)分服的場景來介紹下Redis的典型用法。


在游戲登錄的時候,這些關(guān)系型數(shù)據(jù),包括用戶數(shù)據(jù)、用戶賬單、計費(fèi)記錄等肯定是在關(guān)系型數(shù)據(jù)庫里。這里Redis的特點(diǎn)是,比如有一個注冊活動或者新服開放,當(dāng)大量的用戶進(jìn)來后,我們就需要使用一些緩存來抗住壓力,

所以這里的Redis的使用主要是緩存場景。


第二塊是分區(qū)分服里最核心的GameServer。


GameServer是一個強(qiáng)內(nèi)存的計算型服務(wù),它不會有核心的服務(wù)在數(shù)據(jù)庫里面,但它的一些周邊服務(wù),比如排行榜,還有一些通用的服務(wù),比如分布式鎖,對戰(zhàn)匹配,選角記錄等都通常放到Redis里邊。


還有一塊是圖中間的部分。當(dāng)GameServer變更到一些數(shù)據(jù),如游戲用戶的經(jīng)驗(yàn)變化,游戲獲得的裝備,這些核心關(guān)鍵數(shù)據(jù)也是存入關(guān)系型數(shù)據(jù)庫,因?yàn)檫@些東西都是游戲資產(chǎn),上方紅色部分的場景在RDS里是做緩存。


除此之外還有一些周邊系統(tǒng),在這種分區(qū)分服游戲里,一般也有一些跨服對戰(zhàn)。消息隊(duì)列,mailbox等。這些數(shù)據(jù)也經(jīng)常放在Redis中,使用方便,性能也很好。


還有最后一塊是上圖右下角的部分,游戲公司經(jīng)常會做一些活動,比如做一些宣傳,還有類似于防作弊、防木馬的情況,需要把用戶日志落盤,這個每天生成的數(shù)據(jù)量很大,一般都會放到一個Data Warehouse或者一個分析型數(shù)據(jù)庫如ADB里面供后續(xù)挖掘。此時游戲公司還需要分析活動是否成功,是否需要做投放,Redis在這里提供工單緩存/分析加速。


以上是Redis在分區(qū)分服游戲中的一些使用場景。

 

(二)Redis In Gaming Servers:全球同服



另一個是最近熱門的全球同服場景,上圖是它最基本的技術(shù)架構(gòu)。


全球同服的特點(diǎn)是,所有的國內(nèi)外節(jié)點(diǎn)都是訪問了同一份數(shù)據(jù)庫。游戲行業(yè)的一個特點(diǎn)是對數(shù)據(jù)庫的性能要求并不高,但是對網(wǎng)絡(luò)和計算的要求非常高。在游戲行業(yè)里,我們常說最遠(yuǎn)的距離可能不是數(shù)據(jù)到數(shù)據(jù)庫的距離,而是“電信到聯(lián)通”的距離。在這種全球同服游戲架構(gòu)里,有一個很復(fù)雜的問題就是數(shù)據(jù)既然集中了存儲在一個地方,那么在長距離訪問時就會遇到嚴(yán)重的體驗(yàn)問題。實(shí)際上,在這種全球同服的游戲架構(gòu)里,它都會有一個Cache Svr,把遠(yuǎn)端的數(shù)據(jù)都緩存在本地,然后讓本地的訪問去增刪查改它,降低訪問時延,這是全球同服游戲架構(gòu)里的一個核心技術(shù)。在cache server技術(shù)中,由于Redis本身可以作為很好的緩存,所以這里使用得比較多一點(diǎn)。


由于數(shù)據(jù)是集中式存儲,當(dāng)所有游戲用戶都去訪問一個大數(shù)據(jù)庫的時候,要求還是很高的。對于Redis而言,一般都有一個Redis Cluster可以提供訪問。


以上是Redis在全球同服游戲里的使用場景。



(三)游戲?qū)edis的要求


如果游戲要用做高速存儲、內(nèi)存數(shù)據(jù)庫等,那么它對Redis有哪些要求?

 

首先,對數(shù)據(jù)庫的要求是可靠性。對于Redis來說,在電商場景和游戲場景中可靠性要求都很高,但是在例如鏈路管理上還是差別較大。例如,對于電商體系而言,鏈路管理的特點(diǎn)是出問題就斷,寧可返回一個錯誤的結(jié)果,也不會Block,因?yàn)樗械碾娚替溌范际荖o Blocking,出現(xiàn)問題斷了就好,下次再處理。但是游戲行業(yè)不一樣,它需要很好的鏈路保持能力,可以慢慢解決,但是鏈接不能斷,因?yàn)閿嗔酥蠛蠖说臉I(yè)務(wù)就斷掉了,業(yè)務(wù)層還掛著各種游戲的資源信息等,這是游戲行業(yè)跟電商行業(yè)不一樣的一個地方。


一般情況下,很多游戲數(shù)據(jù)庫平均的訪問量都不大,但是不能出問題,第一是鏈路不能斷,第二是如果扛不住的時候,要求能夠平滑擴(kuò)縮容。它對平滑性的要求特別高,因?yàn)楫?dāng)一個游戲突然火了,或者剛開服時有很多用戶去注冊登錄的時候形成注冊風(fēng)暴,會發(fā)生大量擴(kuò)容的行為,如果在擴(kuò)容速度或者平滑性上有所欠缺,那么用戶體驗(yàn)就特別差。


另外,在做一個全球同服游戲的時候需要考慮容災(zāi)和多活的能力。高可靠性對數(shù)據(jù)庫類似于保險,抗熱點(diǎn)、抗壓力是保險,平滑擴(kuò)容也是保險。


游戲?qū)?shù)據(jù)庫有高可運(yùn)維的要求。電商數(shù)據(jù)庫基本不會涉及太多的運(yùn)維,因?yàn)槊刻斓墓危ń灰祝徫?,交易快照等都是存下來的,最多索引一下,不會來回搬?shù)據(jù)。但是對游戲而言,由于每天產(chǎn)生的數(shù)據(jù)和日志特別多,并且游戲運(yùn)營迭代特別快,比如有些分區(qū)分服的游戲,尤其做滾服、合服,迅速開一個新的服務(wù)器,把數(shù)據(jù)庫導(dǎo)過去,然后去滾動,這些游戲運(yùn)營模式對數(shù)據(jù)運(yùn)維要求特別高。當(dāng)游戲用戶反饋說在游戲中丟了東西,我們需要幫他進(jìn)行查找,因此需要支持?jǐn)?shù)據(jù)恢復(fù),還有內(nèi)省、清洗等。


此外還有低成本。游戲行業(yè)有很明確的冷熱效應(yīng),游戲剛開始特別火,等游戲熱度慢慢降下來之后,需要迅速把數(shù)據(jù)存下來換出去,降低運(yùn)營成本,這也是非常關(guān)鍵的一點(diǎn)。低成本考察的是介質(zhì),像Redis這種數(shù)據(jù)庫,如果數(shù)據(jù)量都放到內(nèi)存里,那么成本一定比較高。有一塊節(jié)省成本的措施是極致彈性,比如今天游戲做活動,我們把數(shù)據(jù)給彈上去,明天再拆下來,只要有足夠彈性,那么成本是可控的。


最后是快速開發(fā)。游戲行業(yè)的在開發(fā)上的特點(diǎn)是快速迭代,競爭比較激烈,推出游戲的速度特別快,如果成功,則馬上準(zhǔn)備下一版,不成功就很快收掉做下一個游戲。所以如果有框架支持,更多的API,提供更多的封裝和語法糖,那么它可以很迅速地搭建適合自己的游戲體系。



二、云原生內(nèi)存數(shù)據(jù)庫Tair介紹


云原生內(nèi)存數(shù)據(jù)庫Tair(Redis企業(yè)版)是阿里云推出的支持高并發(fā)低延遲訪問的云原生內(nèi)存數(shù)據(jù)庫,完全兼容Redis數(shù)據(jù)結(jié)構(gòu)和API。支持主從與集群架構(gòu),采用多樣存儲介質(zhì)應(yīng)對不同數(shù)據(jù)溫度場景,并提供全球多活、數(shù)據(jù)閃回和豐富的數(shù)據(jù)模型等特性,致力于幫助客戶構(gòu)建在線實(shí)時場景。


Tair兼容了Redis的數(shù)據(jù)結(jié)構(gòu),那么面向游戲行業(yè),和Redis的差別主要是什么呢?


首先是容災(zāi)方面,開源的自建Redis沒有很可靠容災(zāi),但阿里云Tair通過可靠的高精度容災(zāi)模塊,能夠做到快速容災(zāi),比如10秒級就可以切換掉一個有問題的數(shù)據(jù)庫。


第二個是鏈接保持能力,游戲領(lǐng)域?qū)︽溄颖3值男枨蠛芨撸@和電商、直播等領(lǐng)域不太一樣。Tair通過代理層的熱升級能力,將鏈接盡可能保持,確保了升級、宕機(jī)等多種情況下的可用性。


第三,一般數(shù)據(jù)庫做容災(zāi)就是主備容災(zāi),用Redis的時候也可以搭個主備出來,阿里云Tair除了采用多可用區(qū)容災(zāi)或跨可用區(qū)容災(zāi)之外,還提供了跨域多活容災(zāi)的能力。注意的是跨域容災(zāi)不一定是多活,但多活一定是跨域容災(zāi)。


還有就是備份,備份很關(guān)鍵,可以防止刪庫跑路等情況。游戲行業(yè)的特點(diǎn)是發(fā)版本的速度特別快,如果版本發(fā)錯則需要快速回滾。Tair提供任意時間點(diǎn)的數(shù)據(jù)恢復(fù),當(dāng)游戲廠商發(fā)現(xiàn)發(fā)布的版本有問題,可以馬上回滾,降低影響。除此之外,Tair還支持秒級數(shù)據(jù)閃回這樣更精密的數(shù)據(jù)回滾能力,可以指定過去任意秒級時間點(diǎn)按key/key pattern或者全量恢復(fù)數(shù)據(jù)。


在這種日常運(yùn)維中,可觀測性是需要建設(shè)的重點(diǎn),業(yè)務(wù)在運(yùn)行中不可避免會遇到實(shí)時熱Key、大Key。由于游戲迭代速度很快,質(zhì)量方面難免偶爾出現(xiàn)問題,我們能夠通過實(shí)時和歷史Key分析快速找到這些瓶頸并解決問題。在Tair中除去能夠迅速觀測到熱點(diǎn),還能夠迅速把熱點(diǎn)加速掉,我們稱之為散列技術(shù),可以把熱點(diǎn)的抗壓能力輕松提升到10~30倍。


成本上,從我們的角度來看Redis,往內(nèi)存里邊放的東西越多,成本就越高,內(nèi)存是所有的存儲里最貴的。但是阿里云Tair有更好方式,我們有Tair持久內(nèi)存型,很好地解決了存儲成本和訪問性能的矛盾。最早做持久內(nèi)存的時候,它沒有什么企業(yè)級特性,后續(xù)我們把企業(yè)級能力都搬到持久內(nèi)存上,如今大家去買持久內(nèi)存的話,就具備這些企業(yè)級能力,包括PITR、多活、加速等。


開源Redis的好處在于它跟一般的Key-Value不一樣,它存很多結(jié)構(gòu)化數(shù)據(jù),跟數(shù)據(jù)結(jié)構(gòu)更貼合一點(diǎn),用得比較快一點(diǎn)。但是我們發(fā)現(xiàn)用戶真正用起來的時候,這些結(jié)果是不夠的。游戲用戶大量使用JSON,比如存用戶屬性、道具等,都是JSON結(jié)構(gòu)。所以Tair引擎里已內(nèi)置了JSON結(jié)構(gòu),那么用戶用起來就非常方便了。


 

三、Tair游戲場景介紹


(一)Tair全球多活


Tair有一個典型的場景是全球多活。



這個是線上的一個例子,例如游戲里中國用戶可以到美國的商店里去買一個光環(huán)裝備,然后這個用戶在國內(nèi)服務(wù)器上就具有了一個光環(huán)。


全球多活是基于引擎高可靠的數(shù)據(jù)多活服務(wù),Tair提供全球同服的高效Cache Server,數(shù)據(jù)庫本身具備多活,數(shù)據(jù)寫入一個地方,那么所有地方都可見。


多活在游戲里基本是用在Cache Server上,所有互聯(lián)網(wǎng)類的用戶都會有一個登錄Session系統(tǒng),如果要去把Session系統(tǒng)做大,做一個很可靠的全球多活Session,Tair也能支持。

 

(二)數(shù)據(jù)閃回 - 任意時間點(diǎn)數(shù)據(jù)恢復(fù)


Tair另外一個經(jīng)典場景是任意時間點(diǎn)的數(shù)據(jù)恢復(fù),它實(shí)際上是數(shù)據(jù)安全的一部分。數(shù)據(jù)安全包括鏈路加密,也包括存儲加密,還包括多副本等。


但任意時間點(diǎn)數(shù)據(jù)恢復(fù)這個場景游戲客戶用得最多,大約占90%。游戲廠商在發(fā)版本的時候,如果出現(xiàn)問題可以快速回滾,也支持只回滾某一些東西?;貪L既支持把數(shù)據(jù)恢復(fù)到源,也支持克隆一個新實(shí)例來恢復(fù)。

 

(三)CAS/CAD 高性能分布式鎖


剛才我們從分區(qū)分服的服務(wù)器里邊也看到了,Redis本身會作為Game Server的一些周邊服務(wù),最簡單一個例子就是分布式鎖。多個機(jī)器同時去拿一個資源的時候,牽扯到資源競爭肯定要有鎖,業(yè)務(wù)需要通過分布式鎖來解決。但這個分布式鎖很少有人實(shí)現(xiàn)的對,所以我們就直接把分布式鎖做在這個引擎里面了。



分布式鎖比起一般的鎖,它除了有互斥性,還有租約性。一般會在鎖上加一個Timer,設(shè)置鎖多長時間,當(dāng)租約到期后,鎖自動釋放。


分布式鎖存在的問題不是加鎖的地方,而是釋放的地方。舉個例子,比如一個應(yīng)用程序去加了鎖,應(yīng)用程序沒有掛,但是時間拖得長一點(diǎn),然后等到引擎里面的Timer超時,鎖就釋放了。結(jié)果第二個應(yīng)用程序就拿到鎖了。當(dāng)這個APP又跑起來的時候,我們一刪鎖就把別人的鎖給刪掉了,會引發(fā)資源錯誤。


因此,難點(diǎn)在刪除這一步,刪除時的要求是只能刪自己的鎖,不能刪別人的鎖。所以很多的云上用戶,如果用去del命令去刪Key的話就刪錯了,正確的實(shí)現(xiàn)是一個事務(wù)操作,而Tair直接在引擎里實(shí)現(xiàn)了分布式鎖。


阿里內(nèi)部90%的分布式鎖都是使用Tair的高性能分布式鎖,包括許多游戲客戶也經(jīng)常使用。

 

(四)TairDoc:游戲業(yè)務(wù)快速迭代


另一個核心的module能力就是TairDoc,因?yàn)镴SON數(shù)據(jù)結(jié)構(gòu)是游戲用戶里最大的特征結(jié)構(gòu),我們更新JSON的時候不需要該表,直接在對應(yīng)的JSON數(shù)據(jù)中增加相應(yīng)信息即可。


 

(五)TairZset: 多維/多條件實(shí)時排序


排行榜是游戲場景的最常見應(yīng)用,也是Redis的一個主要應(yīng)用場景,甚至有些大型游戲公司有一個專門的排行榜組,給全平臺游戲人員提供排行榜服務(wù),而非直接暴露一個Redis zset接口。在具體開發(fā)實(shí)現(xiàn)中,會遇到如下兩個主要的問題。


第一個問題是在對戰(zhàn)的時候,玩家選擇排行榜上的其他玩家PK,肯定也是選一個分?jǐn)?shù)和時間差不多的,因此,做排行榜的時候是多維度的。例如在直播網(wǎng)站,可以看到在線人數(shù),粉絲點(diǎn)贊數(shù),禮物金額等。如果按照一個個維度去做的時候,那么很難做一個很精確的使用。開源的Redis只能提供一維的排行榜,而Tair則可以提供包含多個Score的多維排行榜,這樣的多維/多條件實(shí)時排序能力很好地解決了這個問題,開發(fā)者使用起來也會非常的敏捷順手。


第二個問題是當(dāng)游戲特別大的時候,例如游戲用戶有2000萬人,那么2000萬人的排行榜是非常大的了,在這樣規(guī)模排行榜程序設(shè)計上把所有的用戶都存在一個Key下面,Redis就會發(fā)生數(shù)據(jù)傾斜,性能也不是特別好,而如果要把 Key拆開,因?yàn)榕判邪窦炔环戏峙渎剩膊环辖粨Q率,所以拆的話也比較難。針對這個痛點(diǎn),通過TairJedis更可以創(chuàng)建分布式排行榜,非常敏捷的構(gòu)建大規(guī)模、高靈活度的排行榜應(yīng)用,用戶可以根據(jù)業(yè)務(wù)容忍度和性能訴求選擇分布式精確/非精確排行榜而不用關(guān)注實(shí)現(xiàn)細(xì)節(jié),讓游戲開發(fā)者能夠更加敏捷地進(jìn)行游戲邏輯的開發(fā),這些細(xì)節(jié)都是通過SDK層結(jié)合低層TairZset能力幫助用戶構(gòu)建起來的。




后續(xù)Tair的產(chǎn)品發(fā)展過程將會針對游戲行業(yè)的更多場景提供更為靈活敏捷的能力,同時在客戶降本增效上做進(jìn)一步探索。

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于阿里云數(shù)據(jù)庫,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個人觀點(diǎn),不代表快出海對觀點(diǎn)贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
相關(guān)文章
阿里云助力《誅仙世界》端游正式開服!
阿里云助力《誅仙世界》端游正式開服!
近?,完美世界游戲歷時多年打造的新國?仙俠MMORPG端游《誅仙世界》在阿?云上正式開服。
阿里云
云服務(wù)
2024-12-292024-12-29
一文詳解阿里云AI大基建
一文詳解阿里云AI大基建
面向AI時代,阿里云基礎(chǔ)設(shè)施是如何創(chuàng)新與發(fā)展的?計算、網(wǎng)絡(luò)、存儲、服務(wù)器、集群、可觀測等,阿里云全新升級的AI Infra到底有哪些重磅更新?
阿里云
云服務(wù)
2024-11-022024-11-02
AI時代云安全新范式,阿里云安全能力全線升級!
AI時代云安全新范式,阿里云安全能力全線升級!
AI時代,云安全面臨著新的挑戰(zhàn),不僅要持續(xù)面對以往的傳統(tǒng)問題,更需要全新理念落地于產(chǎn)品設(shè)計、技術(shù)演進(jìn)、架構(gòu)設(shè)計,才能實(shí)現(xiàn)效果、性能、和成本的最優(yōu)解。
AI
阿里云
云服務(wù)
2024-09-272024-09-27
連續(xù)四年!阿里云領(lǐng)跑中國公有云大數(shù)據(jù)平臺
連續(xù)四年!阿里云領(lǐng)跑中國公有云大數(shù)據(jù)平臺
近日,國際數(shù)據(jù)公司(IDC)發(fā)布《中國大數(shù)據(jù)平臺市場份額,2023:數(shù)智融合時代的真正到來》報告——2023年中國大數(shù)據(jù)平臺公有云服務(wù)市場規(guī)模達(dá)72.2億元人民幣,其中阿里巴巴市場份額保持領(lǐng)先,占比達(dá)40.2%,連續(xù)四年排名第一。
阿里云
云服務(wù)
2024-09-182024-09-18
優(yōu)質(zhì)服務(wù)商推薦
更多
掃碼登錄
打開掃一掃, 關(guān)注公眾號后即可登錄/注冊
加載中
二維碼已失效 請重試
刷新
賬號登錄/注冊
個人VIP
小程序
快出海小程序
公眾號
快出海公眾號
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家