騰訊游戲背后的TcaplusDB:國產(chǎn)自研分布式NoSQL這十年

從找不到需求險些被叫停,到支撐億級DAU的數(shù)據(jù)庫行業(yè)標桿,騰訊云數(shù)據(jù)庫TcaplusDB在風雨中走過了整整10年。輝映日月破風浪,十年一劍破九天。百萬行代碼就像淙淙流淌的數(shù)據(jù)溪流,終于在十年后匯成不可逾越的護城河。

出發(fā)

2010年前后,QQ空間很火,帶動了基于SNS互動頁游(WebSNS)的火爆,騰訊內(nèi)部開始考慮怎么做頁游。也開始建設(shè)頁游基礎(chǔ)技術(shù)體系,其中最重要的產(chǎn)出是研發(fā)自己的分布式數(shù)據(jù)庫TcaplusDB。與MMOG游戲不同,通常WebSNS游戲是全區(qū)全服的,數(shù)據(jù)集中存儲;而其游戲邏輯服務(wù)器是對等的,web客戶端通過短連接與服務(wù)器進行通信,也就是說玩家游戲過程,后端交互的邏輯服務(wù)器隨時會變動;這些特性導致在邏輯層不方便對用戶數(shù)據(jù)做緩存。

此外,WebSNS游戲基于玩家之間社會關(guān)系的互動場景非常多,玩家的一個互動操作,需要讀取和修改與此關(guān)聯(lián)的其他多個玩家的數(shù)據(jù);這意味著web游戲中數(shù)據(jù)讀寫訪問頻率高于同時在線數(shù),其訪問頻率實際上是在線數(shù)的N倍;假如某個100萬在線的web游戲,平均每個玩家有50個好友,如果同時有1%的玩家觸發(fā)一個好友動作,則可能會觸發(fā)50萬次數(shù)據(jù)訪問。也就是說,基于這樣的場景,web游戲的數(shù)據(jù)庫層需要支持比傳統(tǒng)MMOG游戲大的多的訪問頻率,如果仍然采用傳統(tǒng)的數(shù)據(jù)庫管理系統(tǒng)(如MySQL),要支持這么大的訪問頻率,其代價非常大。

因此,在游戲邏輯層和傳統(tǒng)數(shù)據(jù)庫管理系統(tǒng)之間架設(shè)高速的緩存系統(tǒng),對web游戲來說至關(guān)重要。

當時業(yè)界已經(jīng)有比較多的提供高速數(shù)據(jù)訪問的NoSQL產(chǎn)品,不可否認,這些NoSQL產(chǎn)品在一定場景下使用是很優(yōu)秀的,但在部分場景或需求下存在不支持或不夠出色的情況——比如全內(nèi)存帶來的成本問題或?qū)Ξ惒綌?shù)據(jù)讀寫支持不夠等。

2011年起,騰訊內(nèi)部開始著手研發(fā)一款自己的分布式游戲數(shù)據(jù)庫系統(tǒng)——TcaplusDB。這是個很美好的愿景。但從零開始自己研發(fā)一款數(shù)據(jù)庫又談何容易?2009 年開始,大量新的NoSQL數(shù)據(jù)庫涌現(xiàn),在整個行業(yè)掀起了一場NoSQL 革命,如今赫赫有名的 Redis、MongoDB 皆誕生于那一年。研發(fā)TcaplusDB是高樓萬丈平地起的事情,我們一邊調(diào)研外部產(chǎn)品,一邊抓住游戲行業(yè)特定的場景和需求,做最小化的產(chǎn)品驗證。經(jīng)過不斷的驗證,第一個版本在2012年初終于出爐。

時機

2012年4月,TcaplusDB首次正式提供服務(wù),支持騰訊自研的頁游《夜店之王》。《夜店之王》是騰訊自主研發(fā)的一款以時尚夜店為題材,以夜店經(jīng)營為核心,融入吸血鬼元素的模擬經(jīng)營類社交游戲。

騰訊游戲背后的TcaplusDB:國產(chǎn)自研分布式NoSQL這十年

當時的游戲,大部分是“分區(qū)分服”的形式,每個區(qū)域內(nèi)的玩家自己玩。但基于社交場景的WebSNS需要所有的好友在一起玩。《夜店之王》就是這樣典型的場景,TcaplusDB的高性能和低成本贏得了項目組的青睞。由于采用了包括 TcaplusDB 數(shù)據(jù)庫在內(nèi)的新技術(shù),《夜店之王》通過“全區(qū)全服”,讓玩家在一個池子里“大亂斗”并通過實時派對邀請好友體驗。《夜店之王》通過QQgame游戲大廳、空間、游戲人生、朋友等諸多渠道進入取得了相當不錯的成績。

發(fā)展過程中,挫折并不是沒有,2013年9月騰訊移動游戲《天天酷跑》火爆公測,開啟QQ、微信雙平臺登陸,隨時與QQ、微信好友一起玩。上線后,在不到一天的時間內(nèi)就迅速登上了蘋果App Store暢銷榜第一位。

騰訊游戲背后的TcaplusDB:國產(chǎn)自研分布式NoSQL這十年

當初公測的時候,內(nèi)部霸氣地給《天天酷跑》這款新游戲配了100臺服務(wù)器,對于一款新游戲,這顯然是一個很充裕的配置。然而誰都沒想到《天天酷跑》會這么火爆,準備的100臺服務(wù)器很快就要高容量了。最后,在多部門的協(xié)同下,擴容的50臺服務(wù)器快上架。硬件上架、網(wǎng)絡(luò)打通、操作系統(tǒng)安裝妥當,TcaplusDB的系統(tǒng)軟件也很快部署完成。

但接下來就要通過部分數(shù)據(jù)的搬遷來實現(xiàn)數(shù)據(jù)庫承載能力的擴容。按照正常邏輯,哪怕是停服維護,通常的擴容都有一個提前準備的過程,這次來得實在太快了,眼看舊數(shù)據(jù)庫在逼近存儲極限,那邊不斷涌入的玩家還在不斷地制造新數(shù)據(jù),搬遷的速度必須足夠快,才能避免數(shù)據(jù)庫爆倉。當時在業(yè)內(nèi)深耕多年的大??嘈χf:“按照當前的情況,24小時后數(shù)據(jù)庫就會崩潰,游戲只能暫時停服。”

誰都不敢面對這樣的結(jié)局。

24小時很短,也能做很多事情,一個字,干!

于是,我們和當時酷跑的業(yè)務(wù)團隊一起挺身而出,背水一戰(zhàn),連夜調(diào)試搬遷工具,在凌晨緊急上線,硬是抗住了一波又一波海量的用戶訪問沖擊。有了這次的經(jīng)歷,我們下定決心,我們要做得更好。之后的幾個月,我們都在重復一件事——一行一行地碼代碼,看得最多的是星夜、喝得最多的是咖啡,終于把這套數(shù)據(jù)庫的自動擴容系統(tǒng)打磨得穩(wěn)定高效。

成長

2014年2月,TcaplusDB已經(jīng)深度優(yōu)化了存儲引擎,推出全托管的分布式存儲服務(wù)。

但還不夠,遠遠不夠。

還記得上面說的《夜店之王》嗎?經(jīng)過2年多的發(fā)展,此時的《夜店之王》已經(jīng)是排名第一的經(jīng)營類社交游戲。而《夜店之王》使用的卻還是TcaplusDB的老版本。TcaplusDB的全托管版本,性能得到了較大的提升,在服務(wù)上給項目組帶來了較大的便利性。因此,將《夜店之王》TcaplusDB切換到全托管版本被提升日程。

騰訊游戲背后的TcaplusDB:國產(chǎn)自研分布式NoSQL這十年

由于《夜店之王》是線上業(yè)務(wù),且此次切換TcaplusDB不能停服,還得解決新老協(xié)議不同、落地數(shù)據(jù)格式不同、數(shù)據(jù)分布不同等問題。對于任何一個團隊,都是一個很大的挑戰(zhàn)。

最終,在跟《夜店之王》團隊的聯(lián)合攻堅之下,我們通過數(shù)據(jù)雙寫、增加協(xié)議轉(zhuǎn)換層、數(shù)據(jù)一致性校驗工具等工作。最終完美實施了服務(wù)的遷移,在這個時期積累的數(shù)據(jù)遷移方案,也為后續(xù)TcaplusDB在無損水平擴展、無損數(shù)據(jù)遷移能力的產(chǎn)品化打下了堅實的基礎(chǔ)。

2015年年底《王者榮耀》正式公測。這款游戲的火爆程度又一次突破了大家的想象力,這個游戲就像一個永遠不能滿足的巨獸,勢不可擋地吞噬著各種后臺資源。在打破各種游戲記錄的同時,這個逆天的游戲每一秒鐘都在創(chuàng)造數(shù)據(jù)庫的新紀錄。最瘋狂的游戲浪潮,一般出現(xiàn)在周末。回想那個時候,一到周末,我們就在家盯著電腦,看著各種數(shù)字瘋狂飆升。前期的技術(shù)積累終于派上了用場,嚴陣以待的技術(shù)人也終究見證了歷史。幾千臺服務(wù)器在預(yù)先設(shè)定好的統(tǒng)一調(diào)度機制下不停服自動擴容,完美扛過流量高峰。同年,TcaplusDB又相繼推出故障自動恢復、不停服升級、不停服擴縮容功能,成功支持了《天天愛消除》、《全民飛機大戰(zhàn)》、《全民突擊》、《CF手游》和《火影忍者手游》等游戲。2016年,TcaplusDB陸續(xù)推出細粒度備份回檔、軟硬件升級、機房裁撤搬遷、軟硬件故障對業(yè)務(wù)無損等核心能力。同時優(yōu)化單業(yè)務(wù)海量數(shù)據(jù)訪問能力,提供穩(wěn)健高性能的數(shù)據(jù)存儲服務(wù)。

2017年元宵晚會,在春晚小品《回家》中,主持人提到了《王者榮耀》,這讓團隊即緊張又興奮。接著,又是一路不斷飆升的QPS陪伴著我們度過一個不眠之夜,好在最后又是有驚無險。

同年,TcaplusDB支持protobuf數(shù)據(jù)格式定義及訪問,協(xié)議更加開放,兼容行業(yè)使用習慣。

2018年,TcaplusDB將高可用、無損擴縮容做到極致,深度優(yōu)化性能降低成本,提升Api多語言、多平臺、多模式、易使用的能力,陸續(xù)為《QQ飛車》、《無限法則》等游戲提供高品質(zhì)數(shù)據(jù)存儲服務(wù)。

開放

2019年憑借多年的積累和在游戲分布式系統(tǒng)情景中適配能力,TcaplusDB做為騰訊完全自研的NoSQL數(shù)據(jù)庫,正式成為騰訊云Tcaplus,通過騰訊云對外提供服務(wù)。結(jié)合了騰訊云的優(yōu)勢后,騰訊云Tcaplus又在多租戶、安全性、開放API和多語言SDK等方面有了極大的提升。

2020年NEXON、上海盛趣等游戲廠商開始選擇騰訊云TcaplusDB做為游戲的核心數(shù)據(jù)庫支撐業(yè)務(wù)。根據(jù)客戶的測試與使用反饋,TcaplusDB的毫秒級時延、千萬級QPS、無限水平擴展無需分庫分表、細粒度回檔、合服和無損彈性變配等能力能夠?qū)崒嵲谠诘膸椭接螒驑I(yè)務(wù)。

騰訊云TcaplusDB的核心能力得到了客戶的認可的同時,不得不提一提我們強大的遷移服務(wù)。當時上海盛趣使用的是DynamoDB,上海盛趣的技術(shù)團隊需要解決開發(fā)者不熟悉騰訊云TcaplusDB的用法和已有代碼遷移的問題。通過溝通,騰訊云TcaplusDB的接口的易用性得到了客戶的充分認可,重點轉(zhuǎn)移到了已有代碼如何遷移到騰訊云TcaplusDB 接口上。經(jīng)過雙方技術(shù)團隊的溝通,上海盛趣的架構(gòu)中有一個數(shù)據(jù)訪問適配層,所有的數(shù)據(jù)庫訪問均通過該適配層,問題一下變得清晰和簡單了起來。騰訊云派出技術(shù)專家駐場,僅僅用了兩周時間就和上海盛趣的研發(fā)團隊一起完成了代碼遷移的工作。 至此,TcaplusDB開始全面為公有云客戶提供服務(wù)。

騰訊游戲背后的TcaplusDB:國產(chǎn)自研分布式NoSQL這十年

2020年12月14日,中國信息通信研究院官方權(quán)威公布第十一批大數(shù)據(jù)產(chǎn)品能力評測結(jié)果,騰訊云TcaplusDB成為首批通過鍵值型內(nèi)存數(shù)據(jù)庫功能評測的分布式NoSQL數(shù)據(jù)庫產(chǎn)品。

2021年1月,TcaplusDB社區(qū)上線,這標志著TcaplusDB將通過和廣大的用戶及行業(yè)合作伙伴進行交流和共建,持續(xù)推動國產(chǎn)分布式NoSQL數(shù)據(jù)庫生態(tài)的繁榮。

下一個十年:為行業(yè)提供更多助力

自誕生以來,騰訊云TcaplusDB就以服務(wù)更多開發(fā)者為目標,面向擁有使用高性能數(shù)據(jù)庫的研發(fā)人員,分享經(jīng)過騰訊內(nèi)部檢驗的存儲研發(fā)經(jīng)驗、工具和行業(yè)資源。而在未來,騰訊云TcaplusDB還將以國產(chǎn)數(shù)據(jù)庫領(lǐng)航者的身份,在這條道路上走得更遠,根據(jù)行業(yè)動態(tài)為平臺引入更多元化的功能。同時,騰訊云TcaplusDB將和行業(yè)合作伙伴一起,繼續(xù)分享騰訊分布式數(shù)據(jù)庫方面的經(jīng)驗,并將積極投入基于多模和多負載能力的一站式低成本數(shù)據(jù)處理能力的研發(fā);滿足基于全球分布式能力,助力企業(yè)解決業(yè)務(wù)出海、全球同服/多活、跨域數(shù)據(jù)遷移等關(guān)鍵業(yè)務(wù)領(lǐng)域需求。

在下一個十年,誕生于游戲的TcaplusDB,還將繼續(xù)為更多行業(yè)優(yōu)化數(shù)據(jù)服務(wù)能力,貢獻自己的力量。

(免責聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準確性及可靠性,但不保證有關(guān)資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負任何法律責任。
任何單位或個人認為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。 )